<?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>152045</bug_id>
          
          <creation_ts>2015-12-09 01:41:26 -0800</creation_ts>
          <short_desc>WTF::ParkingLot should stop using std::chrono because std::chrono::duration casts are prone to overflows</short_desc>
          <delta_ts>2016-11-24 06:07:29 -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 Template Framework</component>
          <version>WebKit 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>165061</dependson>
          <blocked>164415</blocked>
    
    <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>aestes</cc>
    
    <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jfbastien</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1147631</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-12-09 01:41:26 -0800</bug_when>
    <thetext>Spun off from bug #144908
https://bugs.webkit.org/show_bug.cgi?id=144908

Casting between different std::chrono::duration specializations (e.g. seconds or milliseconds to microseconds) can easily result in an overflow of the duration value. In the worst-case scenario we can end up using a negative value to schedule platform-specific timers. In case of GLib, this can end up in continuous and immediate timer dispatches (bugs #144908 and #150930).

Current suggestions revolve around using clamping and/or overflow checks that could maybe be baked into a std::chrono::duration template specialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148993</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-12-14 09:52:36 -0800</bug_when>
    <thetext>Anders, do you have ideas on the best idiom for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246987</commentid>
    <comment_count>2</comment_count>
      <attachid>293572</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-01 12:58:26 -0700</bug_when>
    <thetext>Created attachment 293572
possibly solution

This std::chrono nonsense has got to stop.  I&apos;ve had to write so much boilerplate defend-against-overflow code because of std::chrono.  I don&apos;t want to do this anymore.

This patch creates wrappers for doubles so that we can use doubles for time.  The types are easy and have operator overloading for algebra:

Seconds
WallTime
MonotonicTime
TimeWithDynamicClockType

I&apos;m going to see how easy it is to teach existing std::chrono clients to use this instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246990</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-01 12:59:05 -0700</bug_when>
    <thetext>I&apos;m pretty sure I need this to do proper scheduling in the concurrent GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247180</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-01 17:53:45 -0700</bug_when>
    <thetext>I&apos;ve started thinking about what the transition plan should look like.  One approach would be to teach these new classes how to convert to and from std::chrono.  Another approach is to switch all clients of std::chrono over to this in one go.

It&apos;s not obvious that the incremental route will be less risky, because conversions to and from std::chrono require some weirdness. Right now, I&apos;m assuming that the Seconds/WallTime/MonotonicTime classes will use time according to CurrentTime.h.  This implies a certain epoch. To convert a time according to CurrentTime.h into a time according to std::chrono means going one of three routes:

    (1) assume without evidence that all implementations of std::chrono and all of our ports&apos; implementations of CurrentTime.h agree and perform the conversion directly,

    (2) perform the conversion using the current time as a reference (chronoTime = ourTime - ourNow + chronoNow), which means every conversion site pays two time syscalls, or

    (3) convert CurrentTime.h to actually use std::chrono behind the scenes to force the same time base. This assumes that all of the ports would be happy with WebKit&apos;s notion of time suddenly shifting to whatever std::chrono thinks.

I think that (2) is easiest to get correct, but it risks performance regressions, which means that I will have to allow time for benchmark running to validate it.  So, all of these approaches will be time consuming in their own way.

On the other hand, it might be that the number of clients of std::chrono is small enough that I can simply convert them over in one go.  I think that I&apos;m going to start with that.  So far it has been easy.  I&apos;ll worry if my patch goes over 100kb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247198</commentid>
    <comment_count>5</comment_count>
      <attachid>293632</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-01 19:19:07 -0700</bug_when>
    <thetext>Created attachment 293632
patch so far

It&apos;s looking unlikely that any version of this patch will be less than 100kb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247375</commentid>
    <comment_count>6</comment_count>
      <attachid>293673</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 10:46:49 -0700</bug_when>
    <thetext>Created attachment 293673
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247803</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 12:32:32 -0700</bug_when>
    <thetext>*** Bug 157937 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247807</commentid>
    <comment_count>8</comment_count>
      <attachid>293790</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 12:35:16 -0700</bug_when>
    <thetext>Created attachment 293790
rebased

JSC is happy with this.  I haven&apos;t gotten WebCore to build yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248019</commentid>
    <comment_count>9</comment_count>
      <attachid>293853</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 21:08:36 -0700</bug_when>
    <thetext>Created attachment 293853
close to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248087</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 02:58:41 -0700</bug_when>
    <thetext>Attachment 293853 did not pass style-queue:


ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248131</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 08:58:11 -0700</bug_when>
    <thetext>It turns out that if I convert ParkingLot to using the new time classes without providing a mechanism for converting between std::chrono and those new classes, then I can make this work with a ~100KB patch by just converting all things that flow time into ParkingLot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248140</commentid>
    <comment_count>12</comment_count>
      <attachid>293892</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 09:49:05 -0700</bug_when>
    <thetext>Created attachment 293892
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248142</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 09:50:35 -0700</bug_when>
    <thetext>Attachment 293892 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 55 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248164</commentid>
    <comment_count>14</comment_count>
      <attachid>293892</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 10:48:17 -0700</bug_when>
    <thetext>Comment on attachment 293892
the patch

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

&gt; Source/WTF/wtf/Condition.h:51
&gt; +    // are unlikely to be affected by the cost of conversions, it is better to use MonoronicTime.

MoronicTime? :)

&gt; Source/WTF/wtf/Condition.h:73
&gt; +        if (timeout &lt; timeout.nowWithSameClock()) {

I&apos;m not sure I understand the invariants w.r.t. inf and NaN. Can they ever occur here (should it be an assert) or is it impossible by construction? e.g. can Atomic.Futex ever trick us to do something bad? It seems like this isn&apos;t under attacker control otherwise, and here is a bit late to check invariants, but I can&apos;t convince myself that all attacker-controlled times were sanitized before getting here. I guess the worst case is a hang, whereas an assert would cause a crash (probably a better outcome).

&gt; Source/WTF/wtf/Condition.h:111
&gt; +        return waitUntil(lock, MonotonicTime::now() + relativeTimeout, predicate);

What would the semantics of waitFor(NaN) be? Should that be zero?
Inf &quot;just works&quot;, so do negative values.

&gt; Source/WTF/wtf/CurrentTime.cpp:343
&gt; +    fakeCondition.waitFor(fakeLock, Seconds(value));

Why not change `sleep` above to accept Seconds instead of double?

&gt; Source/WTF/wtf/MonotonicTime.h:69
&gt; +    explicit operator bool() const { return !!m_value; }

I don&apos;t understand the intent of converting to bool. &quot;if not epoch&quot;?

&gt; Source/WTF/wtf/MonotonicTime.h:111
&gt; +    }

Does it make sense to have == and != ? I think you want to use &lt; and &gt; only (and maybe isinf / isnan).

&gt; Source/WTF/wtf/Seconds.h:142
&gt; +    }

Same here, I&apos;m not sure about strict equality.

&gt; Source/WTF/wtf/Seconds.h:166
&gt; +    WTF_EXPORT_PRIVATE void sleep() const;

I... ew... Seconds().sleep()... ew...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248173</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 11:11:53 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 293892 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293892&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Condition.h:51
&gt; &gt; +    // are unlikely to be affected by the cost of conversions, it is better to use MonoronicTime.
&gt; 
&gt; MoronicTime? :)

That&apos;s great.

&gt; 
&gt; &gt; Source/WTF/wtf/Condition.h:73
&gt; &gt; +        if (timeout &lt; timeout.nowWithSameClock()) {
&gt; 
&gt; I&apos;m not sure I understand the invariants w.r.t. inf and NaN. Can they ever
&gt; occur here (should it be an assert) or is it impossible by construction?

NaN could happen here if the passed timeout was NaN.  I don&apos;t attempt to guarantee sensible behavior if you pass a NaN timeout, but looking at ParkingLot, it looks like it will timeout immediately because it waits while timeout.nowWithSameClock() &lt; timeout.

&gt; e.g. can Atomic.Futex ever trick us to do something bad? 

AtomicsObject.wake does the right thing according to the spec.  It checks for NaN explicitly.

&gt; It seems like this
&gt; isn&apos;t under attacker control otherwise, and here is a bit late to check
&gt; invariants, but I can&apos;t convince myself that all attacker-controlled times
&gt; were sanitized before getting here. I guess the worst case is a hang,
&gt; whereas an assert would cause a crash (probably a better outcome).
&gt; 
&gt; &gt; Source/WTF/wtf/Condition.h:111
&gt; &gt; +        return waitUntil(lock, MonotonicTime::now() + relativeTimeout, predicate);
&gt; 
&gt; What would the semantics of waitFor(NaN) be? Should that be zero?
&gt; Inf &quot;just works&quot;, so do negative values.
&gt; 
&gt; &gt; Source/WTF/wtf/CurrentTime.cpp:343
&gt; &gt; +    fakeCondition.waitFor(fakeLock, Seconds(value));
&gt; 
&gt; Why not change `sleep` above to accept Seconds instead of double?

CurrentTime.h is currently for our deprecated double-based time.  There&apos;s still code that uses that, and I don&apos;t want to change all of it in this patch.

&gt; 
&gt; &gt; Source/WTF/wtf/MonotonicTime.h:69
&gt; &gt; +    explicit operator bool() const { return !!m_value; }
&gt; 
&gt; I don&apos;t understand the intent of converting to bool. &quot;if not epoch&quot;?

In code that used double for time, we use 0 to mean &quot;I don&apos;t have a time&quot;.

&gt; 
&gt; &gt; Source/WTF/wtf/MonotonicTime.h:111
&gt; &gt; +    }
&gt; 
&gt; Does it make sense to have == and != ? I think you want to use &lt; and &gt; only
&gt; (and maybe isinf / isnan).

It does make sense!  ==/!= only become strange if you&apos;ve transformed values with math that could round.

We use it to compare to infinity in a few places, and it&apos;s our way of checking for NaN.

&gt; 
&gt; &gt; Source/WTF/wtf/Seconds.h:142
&gt; &gt; +    }
&gt; 
&gt; Same here, I&apos;m not sure about strict equality.
&gt; 
&gt; &gt; Source/WTF/wtf/Seconds.h:166
&gt; &gt; +    WTF_EXPORT_PRIVATE void sleep() const;
&gt; 
&gt; I... ew... Seconds().sleep()... ew...

Hahaha!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248184</commentid>
    <comment_count>16</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 11:49:55 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WTF/wtf/Condition.h:73
&gt; &gt; &gt; +        if (timeout &lt; timeout.nowWithSameClock()) {
&gt; &gt; 
&gt; &gt; I&apos;m not sure I understand the invariants w.r.t. inf and NaN. Can they ever
&gt; &gt; occur here (should it be an assert) or is it impossible by construction?
&gt; 
&gt; NaN could happen here if the passed timeout was NaN.  I don&apos;t attempt to
&gt; guarantee sensible behavior if you pass a NaN timeout, but looking at
&gt; ParkingLot, it looks like it will timeout immediately because it waits while
&gt; timeout.nowWithSameClock() &lt; timeout.

It seems like code should treat NaN as infinity when waiting. NaNs propagate, so a mistake would be easy to spot when it infloops, but it if just insta-wakes then I don&apos;t think bugs will get noticed.


&gt; &gt; &gt; Source/WTF/wtf/CurrentTime.cpp:343
&gt; &gt; &gt; +    fakeCondition.waitFor(fakeLock, Seconds(value));
&gt; &gt; 
&gt; &gt; Why not change `sleep` above to accept Seconds instead of double?
&gt; 
&gt; CurrentTime.h is currently for our deprecated double-based time.  There&apos;s
&gt; still code that uses that, and I don&apos;t want to change all of it in this
&gt; patch.

Bug #?


&gt; &gt; &gt; Source/WTF/wtf/MonotonicTime.h:69
&gt; &gt; &gt; +    explicit operator bool() const { return !!m_value; }
&gt; &gt; 
&gt; &gt; I don&apos;t understand the intent of converting to bool. &quot;if not epoch&quot;?
&gt; 
&gt; In code that used double for time, we use 0 to mean &quot;I don&apos;t have a time&quot;.

That seems weird to me. I guess I don&apos;t understand the usecase. Wouldn&apos;t NaN time be &quot;I don&apos;t have a time&quot;? It doesn&apos;t need to be in this patch, but it&apos;s probably worth changing later.


&gt; &gt; &gt; Source/WTF/wtf/MonotonicTime.h:111
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Does it make sense to have == and != ? I think you want to use &lt; and &gt; only
&gt; &gt; (and maybe isinf / isnan).
&gt; 
&gt; It does make sense!  ==/!= only become strange if you&apos;ve transformed values
&gt; with math that could round.

I read this as: it works if you don&apos;t mess up. &lt; and &gt; always work, they just seem better.


&gt; We use it to compare to infinity in a few places, and it&apos;s our way of
&gt; checking for NaN.

I&apos;m not a fan of that ;-)


&gt; &gt; &gt; Source/WTF/wtf/Seconds.h:142
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Same here, I&apos;m not sure about strict equality.
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/Seconds.h:166
&gt; &gt; &gt; +    WTF_EXPORT_PRIVATE void sleep() const;
&gt; &gt; 
&gt; &gt; I... ew... Seconds().sleep()... ew...
&gt; 
&gt; Hahaha!

https://www.youtube.com/watch?v=PEZWYXPvmS8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248192</commentid>
    <comment_count>17</comment_count>
      <attachid>293908</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 12:09:06 -0700</bug_when>
    <thetext>Created attachment 293908
the patch

Fixed a bunch of things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248195</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 12:12:00 -0700</bug_when>
    <thetext>Attachment 293908 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 59 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248196</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 12:14:21 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; &gt; &gt; Source/WTF/wtf/Condition.h:73
&gt; &gt; &gt; &gt; +        if (timeout &lt; timeout.nowWithSameClock()) {
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure I understand the invariants w.r.t. inf and NaN. Can they ever
&gt; &gt; &gt; occur here (should it be an assert) or is it impossible by construction?
&gt; &gt; 
&gt; &gt; NaN could happen here if the passed timeout was NaN.  I don&apos;t attempt to
&gt; &gt; guarantee sensible behavior if you pass a NaN timeout, but looking at
&gt; &gt; ParkingLot, it looks like it will timeout immediately because it waits while
&gt; &gt; timeout.nowWithSameClock() &lt; timeout.
&gt; 
&gt; It seems like code should treat NaN as infinity when waiting. NaNs
&gt; propagate, so a mistake would be easy to spot when it infloops, but it if
&gt; just insta-wakes then I don&apos;t think bugs will get noticed.

It&apos;ll get noticed both ways.  Insta-waking registers as a spin.

&gt; 
&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/CurrentTime.cpp:343
&gt; &gt; &gt; &gt; +    fakeCondition.waitFor(fakeLock, Seconds(value));
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not change `sleep` above to accept Seconds instead of double?
&gt; &gt; 
&gt; &gt; CurrentTime.h is currently for our deprecated double-based time.  There&apos;s
&gt; &gt; still code that uses that, and I don&apos;t want to change all of it in this
&gt; &gt; patch.
&gt; 
&gt; Bug #?

I don&apos;t think we have a bug for that, because I don&apos;t think there&apos;s agreement on the extent to which we should get rid of that old code.

&gt; 
&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/MonotonicTime.h:69
&gt; &gt; &gt; &gt; +    explicit operator bool() const { return !!m_value; }
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t understand the intent of converting to bool. &quot;if not epoch&quot;?
&gt; &gt; 
&gt; &gt; In code that used double for time, we use 0 to mean &quot;I don&apos;t have a time&quot;.
&gt; 
&gt; That seems weird to me. I guess I don&apos;t understand the usecase. Wouldn&apos;t NaN
&gt; time be &quot;I don&apos;t have a time&quot;? It doesn&apos;t need to be in this patch, but it&apos;s
&gt; probably worth changing later.

Well, there&apos;s code that does that already.  Also, it because Seconds and the Time classes are meant to just be stronger-typed numbers, it makes sense for them to respond to operator! the same way that a number would.

&gt; 
&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/MonotonicTime.h:111
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; 
&gt; &gt; &gt; Does it make sense to have == and != ? I think you want to use &lt; and &gt; only
&gt; &gt; &gt; (and maybe isinf / isnan).
&gt; &gt; 
&gt; &gt; It does make sense!  ==/!= only become strange if you&apos;ve transformed values
&gt; &gt; with math that could round.
&gt; 
&gt; I read this as: it works if you don&apos;t mess up. &lt; and &gt; always work, they
&gt; just seem better.

Right, and since this is a stronger-typed number, it should support those things the same way that numbers support them.

&gt; 
&gt; 
&gt; &gt; We use it to compare to infinity in a few places, and it&apos;s our way of
&gt; &gt; checking for NaN.
&gt; 
&gt; I&apos;m not a fan of that ;-)
&gt; 
&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/Seconds.h:142
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; 
&gt; &gt; &gt; Same here, I&apos;m not sure about strict equality.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/Seconds.h:166
&gt; &gt; &gt; &gt; +    WTF_EXPORT_PRIVATE void sleep() const;
&gt; &gt; &gt; 
&gt; &gt; &gt; I... ew... Seconds().sleep()... ew...
&gt; &gt; 
&gt; &gt; Hahaha!
&gt; 
&gt; https://www.youtube.com/watch?v=PEZWYXPvmS8

These reactions are worth it.

But seriously: any technical reason not to do it this way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248201</commentid>
    <comment_count>20</comment_count>
      <attachid>293911</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 12:27:17 -0700</bug_when>
    <thetext>Created attachment 293911
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248204</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 12:29:53 -0700</bug_when>
    <thetext>Attachment 293911 did not pass style-queue:


ERROR: Source/WTF/wtf/ClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/WallTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/TimeWithDynamicClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MonotonicTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 8 in 59 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248208</commentid>
    <comment_count>22</comment_count>
      <attachid>293892</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-11-04 12:41:38 -0700</bug_when>
    <thetext>Comment on attachment 293892
the patch

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

&gt; Source/WTF/wtf/MonotonicTime.h:42
&gt; +// MonotonicTime::now().secondsSinceEpoch().value() is the same as
&gt; +// WTF::monotonicallyIncreasingTime().

Typically, we convert these statements into assertions instead of adding a comment in WebCore.

&gt; Source/WTF/wtf/MonotonicTime.h:48
&gt; +    // This is the epoch. So, x.secondsSinceEpoch() should be the same as x - MonotonicTime().
&gt; +    MonotonicTime() { }

It&apos;s a bit confusing for MonotonicTime() to mean epoch time &amp; &quot;I don&apos;t have a time&quot;.

&gt; Source/WTF/wtf/MonotonicTime.h:53
&gt; +    // Call this if you know for sure that the double represents time according to
&gt; +    // WTF::monotonicallyIncreasingTime(). It must be in seconds and it must be from the same time
&gt; +    // source.
&gt; +    static MonotonicTime fromRawDouble(double value)

It&apos;s unclear to me in which unit double would be in.
I presume it&apos;s either in milliseconds or seconds but why don&apos;t we make that explicit?
e.g. fromRawMilliseconds.

&gt; Source/WTF/wtf/Seconds.cpp:46
&gt; +WallTime Seconds::operator+(WallTime other) const
&gt; +{
&gt; +    return other + *this;
&gt; +}
&gt; +
&gt; +MonotonicTime Seconds::operator+(MonotonicTime other) const
&gt; +{
&gt; +    return other + *this;
&gt; +}
&gt; +

It seems like we could just inline these?  It&apos;s a bit silly to call a function just to add two numbers.

&gt; Source/WTF/wtf/TimeWithDynamicClockType.cpp:98
&gt; +bool TimeWithDynamicClockType::operator&lt;(const TimeWithDynamicClockType&amp; other) const
&gt; +{
&gt; +    RELEASE_ASSERT(m_type == other.m_type);
&gt; +    return m_value &lt; other.m_value;
&gt; +}

Again, it seems like we should be inlining these.

&gt; Source/WTF/wtf/TimeWithDynamicClockType.h:65
&gt; +    WTF_EXPORT_PRIVATE TimeWithDynamicClockType nowWithSameClock() const;

It seems that the common cause of calling now() is to get the current time in the same clock so I&apos;d call this just now() if I were you.

&gt; Source/WTF/wtf/TimeWithDynamicClockType.h:67
&gt; +    TimeWithDynamicClockType withSameClockAndRawDouble(double value) const

Ditto about calling this just fromRawDouble although I&apos;d prefer something like fromRawMilliseconds which clarifies the unit of time.

&gt; Source/WTF/wtf/TimeWithDynamicClockType.h:72
&gt; +    // Asserts that the time is of the type you want.

This comment would have been unnecessary if the functions were inlined.
Also, I&apos;m not sure RELEASE_ASSERT would buy us much compared to regular ASSERT.

&gt; Source/WTF/wtf/TimeWithDynamicClockType.h:74
&gt; +    WTF_EXPORT_PRIVATE WallTime wallTime() const;
&gt; +    WTF_EXPORT_PRIVATE MonotonicTime monotonicTime() const;

I usually prefer a template for things like this. e.g.
TimeWithDynamicClockType t1;
t1.time&lt;WallTime&gt;()
t1.approximte&lt;MonotonicTime&gt;()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248210</commentid>
    <comment_count>23</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 12:44:13 -0700</bug_when>
    <thetext>
&gt; &gt; &gt; &gt; &gt; Source/WTF/wtf/Seconds.h:142
&gt; &gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Same here, I&apos;m not sure about strict equality.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WTF/wtf/Seconds.h:166
&gt; &gt; &gt; &gt; &gt; +    WTF_EXPORT_PRIVATE void sleep() const;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I... ew... Seconds().sleep()... ew...
&gt; &gt; &gt; 
&gt; &gt; &gt; Hahaha!
&gt; &gt; 
&gt; &gt; https://www.youtube.com/watch?v=PEZWYXPvmS8
&gt; 
&gt; These reactions are worth it.
&gt; 
&gt; But seriously: any technical reason not to do it this way?

Is &quot;fugly&quot; a technical reason? I guess it&apos;s fine, it&apos;s just weird layering that the class that counts time can actually suspend it as well. I mean, could you also write a Money class so I can Dollar().SendTo(&quot;JF&quot;) ?

At the end of the day it doesn&apos;t really matter, seems convenient, and fits the &quot;WTF&quot; moniker :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248215</commentid>
    <comment_count>24</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 12:48:00 -0700</bug_when>
    <thetext>&gt; could you also write a Money class so I can Dollar().SendTo(&quot;JF&quot;) ?

Let me change this to Dollar(31e37).sendTo(&quot;JF&quot;). I assume you&apos;d zero-initialize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248216</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 12:52:02 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Comment on attachment 293892 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293892&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/MonotonicTime.h:42
&gt; &gt; +// MonotonicTime::now().secondsSinceEpoch().value() is the same as
&gt; &gt; +// WTF::monotonicallyIncreasingTime().
&gt; 
&gt; Typically, we convert these statements into assertions instead of adding a
&gt; comment in WebCore.

It&apos;s not possible to assert this, because every time you call monotonicallyIncreasingTime() or MonotonicTime::now(), they return a new value, almost by definition.

&gt; 
&gt; &gt; Source/WTF/wtf/MonotonicTime.h:48
&gt; &gt; +    // This is the epoch. So, x.secondsSinceEpoch() should be the same as x - MonotonicTime().
&gt; &gt; +    MonotonicTime() { }
&gt; 
&gt; It&apos;s a bit confusing for MonotonicTime() to mean epoch time &amp; &quot;I don&apos;t have
&gt; a time&quot;.

Usually, zero is the default value of numbers.

Usually, zero converts to false in operator bool.

I&apos;d rather stick to these conventions because if I came up with new ones then they&apos;d probably be more surprising than these.

I don&apos;t think that this implies that !time means &quot;I don&apos;t have the time&quot;.  The goal of these types is to be numeric when appropriate to easy transition from code that uses doubles already, and so it&apos;s nice to have operator! do something similar to what WK expects.  It so happens that in WebCore there is some code that uses a zero time to mean &quot;I don&apos;t have a time&quot;.

&gt; 
&gt; &gt; Source/WTF/wtf/MonotonicTime.h:53
&gt; &gt; +    // Call this if you know for sure that the double represents time according to
&gt; &gt; +    // WTF::monotonicallyIncreasingTime(). It must be in seconds and it must be from the same time
&gt; &gt; +    // source.
&gt; &gt; +    static MonotonicTime fromRawDouble(double value)
&gt; 
&gt; It&apos;s unclear to me in which unit double would be in.
&gt; I presume it&apos;s either in milliseconds or seconds but why don&apos;t we make that
&gt; explicit?
&gt; e.g. fromRawMilliseconds.

I&apos;ll rename it to fromRawSeconds().

&gt; 
&gt; &gt; Source/WTF/wtf/Seconds.cpp:46
&gt; &gt; +WallTime Seconds::operator+(WallTime other) const
&gt; &gt; +{
&gt; &gt; +    return other + *this;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +MonotonicTime Seconds::operator+(MonotonicTime other) const
&gt; &gt; +{
&gt; &gt; +    return other + *this;
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; It seems like we could just inline these?  It&apos;s a bit silly to call a
&gt; function just to add two numbers.

We could do it, but it probably doesn&apos;t matter since none of the code that does time computations is on critical path.

&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.cpp:98
&gt; &gt; +bool TimeWithDynamicClockType::operator&lt;(const TimeWithDynamicClockType&amp; other) const
&gt; &gt; +{
&gt; &gt; +    RELEASE_ASSERT(m_type == other.m_type);
&gt; &gt; +    return m_value &lt; other.m_value;
&gt; &gt; +}
&gt; 
&gt; Again, it seems like we should be inlining these.

This makes the RELEASE_ASSERT have a nicer backtrace, and none of these functions are on critical path.

&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.h:65
&gt; &gt; +    WTF_EXPORT_PRIVATE TimeWithDynamicClockType nowWithSameClock() const;
&gt; 
&gt; It seems that the common cause of calling now() is to get the current time
&gt; in the same clock so I&apos;d call this just now() if I were you.

I named it this way to make uses look intuitive.  In your version, we&apos;d have code that says:

if (timeout.now() &lt; timeout)
    ....

With my version it says:

if (timeout.nowWithSameClock() &lt; timeout)
    ....

In your version, if I had not seen the code before, I&apos;d be confused why a time has a now() method that returns a time.  But calling it nowWithSameClock() gives a pretty good hint as to why.

&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.h:67
&gt; &gt; +    TimeWithDynamicClockType withSameClockAndRawDouble(double value) const
&gt; 
&gt; Ditto about calling this just fromRawDouble although I&apos;d prefer something
&gt; like fromRawMilliseconds which clarifies the unit of time.

I&apos;ll rename to withSameClockAndRawSeconds().

Again, I wanted the method name to answer the question: why isn&apos;t this a static method?

&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.h:72
&gt; &gt; +    // Asserts that the time is of the type you want.
&gt; 
&gt; This comment would have been unnecessary if the functions were inlined.
&gt; Also, I&apos;m not sure RELEASE_ASSERT would buy us much compared to regular
&gt; ASSERT.

Concurrency bugs often only repro in release because of timing.

&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.h:74
&gt; &gt; +    WTF_EXPORT_PRIVATE WallTime wallTime() const;
&gt; &gt; +    WTF_EXPORT_PRIVATE MonotonicTime monotonicTime() const;
&gt; 
&gt; I usually prefer a template for things like this. e.g.
&gt; TimeWithDynamicClockType t1;
&gt; t1.time&lt;WallTime&gt;()
&gt; t1.approximte&lt;MonotonicTime&gt;()

I think that would make the code more complicated because then these types would have to have adapter methods, like WallTime::approximateFrom(WallTime | MonotonicTime | TimeWithDynamicClockType).  So, that&apos;s not any better.

As it stands, instead of using templates to range over both types of time, you can just use TimeWithDynamicClockType.  That&apos;s great, because it eliminates template bloat from code that simply won&apos;t need it: none of the time code in WK is perf critical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248218</commentid>
    <comment_count>26</comment_count>
      <attachid>293913</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 12:57:55 -0700</bug_when>
    <thetext>Created attachment 293913
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248220</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 13:00:11 -0700</bug_when>
    <thetext>Attachment 293913 did not pass style-queue:


ERROR: Source/WTF/wtf/ClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Seconds.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/WallTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/TimeWithDynamicClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MonotonicTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 9 in 60 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248228</commentid>
    <comment_count>28</comment_count>
      <attachid>293913</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-11-04 13:06:00 -0700</bug_when>
    <thetext>Comment on attachment 293913
the patch

I would like to see types that differentiate between absolute times and time deltas, because it makes reading code that does time math easier. Deltas could be described as a &quot;time interval&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248231</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 13:16:34 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Comment on attachment 293913 [details]
&gt; the patch
&gt; 
&gt; I would like to see types that differentiate between absolute times and time
&gt; deltas, because it makes reading code that does time math easier. Deltas
&gt; could be described as a &quot;time interval&quot;.

This patch does this! :-)

For measuring time intervals, there is a type simply called Seconds.  It&apos;s never vended from, or accepted by, functions that speak of moments in time.  It&apos;s only used to describe intervals, which I believe is consistent with the SI definition of seconds.

For absolute times, there are three types: WallTime (for wall-clock or real-time clock times like gettimeofday()) and MonotonicTime, as well as a type that dynamically holds either a WallTime or MonotonicTime, called TimeWithDynamicClockType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248242</commentid>
    <comment_count>30</comment_count>
      <attachid>293919</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 13:39:25 -0700</bug_when>
    <thetext>Created attachment 293919
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248247</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 13:40:52 -0700</bug_when>
    <thetext>Attachment 293919 did not pass style-queue:


ERROR: Source/WTF/wtf/ClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Seconds.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/WallTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/TimeWithDynamicClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MonotonicTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 9 in 60 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248265</commentid>
    <comment_count>32</comment_count>
      <attachid>293919</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-11-04 14:07:57 -0700</bug_when>
    <thetext>Comment on attachment 293919
the patch

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

&gt; Source/WebKit2/Platform/IPC/Connection.cpp:472
&gt;      // Clamp the timeout to however much time is remaining on our clock.

This comment&apos;s no longer relevant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248271</commentid>
    <comment_count>33</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 14:18:56 -0700</bug_when>
    <thetext>It almost looks like the iOS builders are getting an internal compiler error.  I&apos;ll see what happens when I build it myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248274</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 14:24:56 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Comment on attachment 293919 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293919&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/IPC/Connection.cpp:472
&gt; &gt;      // Clamp the timeout to however much time is remaining on our clock.
&gt; 
&gt; This comment&apos;s no longer relevant.

Oops, fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248286</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 14:46:00 -0700</bug_when>
    <thetext>The iOS build failure was a trivial mistake.  Too bad the EWS log didn&apos;t didn&apos;t show it clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248287</commentid>
    <comment_count>36</comment_count>
      <attachid>293932</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 14:46:25 -0700</bug_when>
    <thetext>Created attachment 293932
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248289</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 14:48:52 -0700</bug_when>
    <thetext>Attachment 293932 did not pass style-queue:


ERROR: Source/WTF/wtf/ClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Seconds.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/WallTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/threads/BinarySemaphore.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/TimeWithDynamicClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MonotonicTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 9 in 60 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248294</commentid>
    <comment_count>38</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 14:52:07 -0700</bug_when>
    <thetext>I contacted Howard (original libc++ author, who standardized std::chrono).
He thinks this should be sufficient for our needs:

```
using Seconds = std::chrono::duration&lt;double&gt;;
using WallTime = std::chrono::time_point&lt;std::chrono::system_clock, Seconds&gt;;
```

It seems like we&apos;re discussing two things in this issue:
 1. objections over the API being wordy / ugly
 2. trying to avoid bugs

We can debate 1. forever, not worth it. You code is pretty small, probably unlikely to have bugs.

I think Howard&apos;s suggestion fixes 2.? Howard&apos;s experience has been that bugs are rare and easy to fix, I don&apos;t have an opinion here. Floating-point seems to do what we want for a browser (we don&apos;t really need exact precision for time, the properties of FP work great for us, and avoiding the pitfalls of overflow is nice).

Your code did remove a workaround for a libstdc++ impl bug as well. Not much to do about that if we keep std::chrono.

It&apos;s a bit of a shame if the STL doesn&apos;t work for us. That wouldn&apos;t be new for WTF, but if there&apos;s something we can take to the committee I&apos;d like to make sure I understand it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248322</commentid>
    <comment_count>39</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 15:24:16 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; I contacted Howard (original libc++ author, who standardized std::chrono).
&gt; He thinks this should be sufficient for our needs:
&gt; 
&gt; ```
&gt; using Seconds = std::chrono::duration&lt;double&gt;;
&gt; using WallTime = std::chrono::time_point&lt;std::chrono::system_clock, Seconds&gt;;
&gt; ```

It&apos;s not:

- We need a mechanism to reject code that tries to use chrono with int types.  This would do no such thing.
- TimeWithDynamicClockType gives us functionality that chrono does not have.
- You forgot MonotonicTime.

&gt; 
&gt; It seems like we&apos;re discussing two things in this issue:
&gt;  1. objections over the API being wordy / ugly
&gt;  2. trying to avoid bugs

And:

3. TimeWithDynamicClockType

&gt; 
&gt; We can debate 1. forever, not worth it. You code is pretty small, probably
&gt; unlikely to have bugs.
&gt; 
&gt; I think Howard&apos;s suggestion fixes 2.? 

It doesn&apos;t because you could still accidentally use integer times, and that&apos;s what you get by default when you use the built-in chrono types.

The point here is to eliminate chrono from our codebase, because it encourages usage patterns that are not safe.

&gt; Howard&apos;s experience has been that bugs
&gt; are rare and easy to fix, I don&apos;t have an opinion here. 

We have found them to be incredibly difficult.

&gt; Floating-point seems
&gt; to do what we want for a browser (we don&apos;t really need exact precision for
&gt; time, the properties of FP work great for us, and avoiding the pitfalls of
&gt; overflow is nice).
&gt; 
&gt; Your code did remove a workaround for a libstdc++ impl bug as well. Not much
&gt; to do about that if we keep std::chrono.
&gt; 
&gt; It&apos;s a bit of a shame if the STL doesn&apos;t work for us. That wouldn&apos;t be new
&gt; for WTF, but if there&apos;s something we can take to the committee I&apos;d like to
&gt; make sure I understand it.

I think it&apos;s a simple bug: chrono should not have allowed integers to be used as the representation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248324</commentid>
    <comment_count>40</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-04 15:28:33 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; I contacted Howard (original libc++ author, who standardized std::chrono).
&gt; &gt; He thinks this should be sufficient for our needs:
&gt; &gt; 
&gt; &gt; ```
&gt; &gt; using Seconds = std::chrono::duration&lt;double&gt;;
&gt; &gt; using WallTime = std::chrono::time_point&lt;std::chrono::system_clock, Seconds&gt;;
&gt; &gt; ```
&gt; 
&gt; It&apos;s not:
&gt; 
&gt; - We need a mechanism to reject code that tries to use chrono with int
&gt; types.  This would do no such thing.

check-webkit-style would :-)


&gt; - TimeWithDynamicClockType gives us functionality that chrono does not have.
&gt; - You forgot MonotonicTime.
&gt; 
&gt; &gt; 
&gt; &gt; It seems like we&apos;re discussing two things in this issue:
&gt; &gt;  1. objections over the API being wordy / ugly
&gt; &gt;  2. trying to avoid bugs
&gt; 
&gt; And:
&gt; 
&gt; 3. TimeWithDynamicClockType

True. To be clear, I&apos;m not trying to derail your patch: I want to distill this for the committee.


&gt; I think it&apos;s a simple bug: chrono should not have allowed integers to be
&gt; used as the representation.

That&apos;s the curse of generality: the committee doesn&apos;t just have those for the use you make of it, IIUC it&apos;s also therefore for computations that wanted to be precise.

You can argue that the default is wrong, but then you&apos;re sounding like that guy:
  https://twitter.com/isotrumpp/status/729901801814691840
;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248333</commentid>
    <comment_count>41</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 15:58:03 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; (In reply to comment #38)
&gt; &gt; &gt; I contacted Howard (original libc++ author, who standardized std::chrono).
&gt; &gt; &gt; He thinks this should be sufficient for our needs:
&gt; &gt; &gt; 
&gt; &gt; &gt; ```
&gt; &gt; &gt; using Seconds = std::chrono::duration&lt;double&gt;;
&gt; &gt; &gt; using WallTime = std::chrono::time_point&lt;std::chrono::system_clock, Seconds&gt;;
&gt; &gt; &gt; ```
&gt; &gt; 
&gt; &gt; It&apos;s not:
&gt; &gt; 
&gt; &gt; - We need a mechanism to reject code that tries to use chrono with int
&gt; &gt; types.  This would do no such thing.
&gt; 
&gt; check-webkit-style would :-)

It&apos;s better to have APIs that don&apos;t need style rules.

&gt; 
&gt; 
&gt; &gt; - TimeWithDynamicClockType gives us functionality that chrono does not have.
&gt; &gt; - You forgot MonotonicTime.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems like we&apos;re discussing two things in this issue:
&gt; &gt; &gt;  1. objections over the API being wordy / ugly
&gt; &gt; &gt;  2. trying to avoid bugs
&gt; &gt; 
&gt; &gt; And:
&gt; &gt; 
&gt; &gt; 3. TimeWithDynamicClockType
&gt; 
&gt; True. To be clear, I&apos;m not trying to derail your patch: I want to distill
&gt; this for the committee.
&gt; 
&gt; 
&gt; &gt; I think it&apos;s a simple bug: chrono should not have allowed integers to be
&gt; &gt; used as the representation.
&gt; 
&gt; That&apos;s the curse of generality: the committee doesn&apos;t just have those for
&gt; the use you make of it, IIUC it&apos;s also therefore for computations that
&gt; wanted to be precise.
&gt; 
&gt; You can argue that the default is wrong, but then you&apos;re sounding like that
&gt; guy:
&gt;   https://twitter.com/isotrumpp/status/729901801814691840
&gt; ;-)

The default is bad enough that it&apos;s the reason why the API is getting ripped out of WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248360</commentid>
    <comment_count>42</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-11-04 16:28:44 -0700</bug_when>
    <thetext>We already had a discussion about having these classes on webkit-dev, and most of people who engaged in that discussion have given a positive support for it. I don&apos;t think having a separate side discussion on Bugzilla is helpful.

If you feel that these classes aren&apos;t needed, then you should raise that point on webkit-dev thread: https://lists.webkit.org/pipermail/webkit-dev/2016-November/028497.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248367</commentid>
    <comment_count>43</comment_count>
      <attachid>293932</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-11-04 16:54:14 -0700</bug_when>
    <thetext>Comment on attachment 293932
the patch

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

r=me. I&apos;d like to see mac-debug EWS go green before this lands.

&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:308
&gt; +    

Stray whitespace.

&gt; Source/WTF/wtf/ClockType.h:27
&gt; +#ifndef WTF_ClockType_h
&gt; +#define WTF_ClockType_h

Let&apos;s use #pragma once instead.

&gt; Source/WTF/wtf/CurrentTime.cpp:2
&gt; + * Copyright (C) 2006, 2008, 2009, 2010, 2016 Apple Inc. All rights reserved.

This can be written as 2006-2016.

&gt; Source/WTF/wtf/MonotonicTime.h:27
&gt; +#ifndef WTF_MonotonicTime_h
&gt; +#define WTF_MonotonicTime_h

#pragma once

&gt; Source/WTF/wtf/Seconds.h:27
&gt; +#ifndef WTF_Seconds_h
&gt; +#define WTF_Seconds_h

#pragma once

&gt; Source/WTF/wtf/TimeWithDynamicClockType.cpp:129
&gt; +void TimeWithDynamicClockType::sleep() const
&gt; +{
&gt; +    Lock fakeLock;
&gt; +    Condition fakeCondition;
&gt; +    LockHolder fakeLocker(fakeLock);
&gt; +    fakeCondition.waitUntil(fakeLock, *this);
&gt; +}

I also find it weird that this is a member function on a class that&apos;s supposed to represent a time value. Seems like it should be a free function that takes a TimeWithDynamicClock as a parameter.

&gt; Source/WTF/wtf/TimeWithDynamicClockType.h:27
&gt; +#ifndef WTF_TimeWithDynamicClockType_h
&gt; +#define WTF_TimeWithDynamicClockType_h

#pragma once

&gt; Source/WTF/wtf/WallTime.h:27
&gt; +#ifndef WTF_WallTime_h
&gt; +#define WTF_WallTime_h

#pragma once

&gt; Source/WTF/wtf/threads/BinarySemaphore.cpp:2
&gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.

2010-2016

&gt; Source/WTF/wtf/threads/BinarySemaphore.h:2
&gt; + * Copyright (C) 2010, 2011, 2016 Apple Inc. All rights reserved.

2010-2016.

&gt; Source/WTF/wtf/threads/BinarySemaphore.h:30
&gt; +#include &lt;wtf/TimeWithDynamicClockType.h&gt;

This should go below ThreadingPrimitives.h.

&gt; Source/WebCore/platform/MainThreadSharedTimer.h:3
&gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.

2006-2016.

&gt; Source/WebCore/platform/SharedTimer.h:2
&gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.

2006-2016.

&gt; Source/WebCore/platform/ThreadTimers.cpp:2
&gt; + * Copyright (C) 2006, 2008, 2016 Apple Inc. All rights reserved.

2006-2016.

&gt; Source/WebCore/platform/cf/MainThreadSharedTimerCF.cpp:2
&gt; + * Copyright (C) 2006, 2010, 2015-2016 Apple Inc. All rights reserved.

2006-2016.

&gt; Source/WebCore/platform/glib/MainThreadSharedTimerGLib.cpp:2
&gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.

2006-2016.

&gt; Source/WebCore/platform/win/MainThreadSharedTimerWin.cpp:2
&gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.

2006-2016.

&gt; Source/WebCore/platform/win/MainThreadSharedTimerWin.cpp:124
&gt; +void MainThreadSharedTimer::setFireInterval(Seconds intervalInSeconds)

Don&apos;t see why the &quot;InSeconds&quot; is needed now that the type is Seconds.

&gt; Source/WebKit2/Platform/IPC/Connection.cpp:2
&gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.

2010-2016.

&gt; Source/WebKit2/Platform/IPC/Connection.h:2
&gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.

2010-2016.

&gt; Source/WebKit2/Platform/IPC/MessageSender.h:2
&gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.

2010-2016.

&gt; Source/WebKit2/UIProcess/ChildProcessProxy.h:2
&gt; + * Copyright (C) 2012, 2016 Apple Inc. All rights reserved.

2012-2016.

&gt; Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp:2
&gt; + * Copyright (C) 2012, 2016 Apple Inc. All rights reserved.

2012-2016.

&gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:2
&gt; + * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.

2013-2016.

&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:2
&gt; + * Copyright (C) 2012-2014, 2016 Apple Inc. All rights reserved.

2012-2016.

&gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:2
&gt; + * Copyright (C) 2012-2014, 2016 Apple Inc. All rights reserved.

2012-2016.

&gt; Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:2
&gt; + * Copyright (C) 2011, 2016 Apple Inc. All rights reserved.

2011-2016.

&gt; Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm:2
&gt; + * Copyright (C) 2014, 2016 Apple Inc. All rights reserved.

2014-2016.

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:2
&gt; + * Copyright (C) 2010, 2011, 2015-2016 Apple Inc. All rights reserved.

2010-2016.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248381</commentid>
    <comment_count>44</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 17:07:21 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Comment on attachment 293932 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293932&amp;action=review
&gt; 
&gt; r=me. I&apos;d like to see mac-debug EWS go green before this lands.

Will do!

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:308
&gt; &gt; +    
&gt; 
&gt; Stray whitespace.

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/ClockType.h:27
&gt; &gt; +#ifndef WTF_ClockType_h
&gt; &gt; +#define WTF_ClockType_h
&gt; 
&gt; Let&apos;s use #pragma once instead.

If I do this, Windows EWS is red.  It seems to include these headers along multiple paths.

&gt; 
&gt; &gt; Source/WTF/wtf/CurrentTime.cpp:2
&gt; &gt; + * Copyright (C) 2006, 2008, 2009, 2010, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; This can be written as 2006-2016.

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/MonotonicTime.h:27
&gt; &gt; +#ifndef WTF_MonotonicTime_h
&gt; &gt; +#define WTF_MonotonicTime_h
&gt; 
&gt; #pragma once
&gt; 
&gt; &gt; Source/WTF/wtf/Seconds.h:27
&gt; &gt; +#ifndef WTF_Seconds_h
&gt; &gt; +#define WTF_Seconds_h
&gt; 
&gt; #pragma once
&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.cpp:129
&gt; &gt; +void TimeWithDynamicClockType::sleep() const
&gt; &gt; +{
&gt; &gt; +    Lock fakeLock;
&gt; &gt; +    Condition fakeCondition;
&gt; &gt; +    LockHolder fakeLocker(fakeLock);
&gt; &gt; +    fakeCondition.waitUntil(fakeLock, *this);
&gt; &gt; +}
&gt; 
&gt; I also find it weird that this is a member function on a class that&apos;s
&gt; supposed to represent a time value. Seems like it should be a free function
&gt; that takes a TimeWithDynamicClock as a parameter.

OK, I made this a free function.

&gt; 
&gt; &gt; Source/WTF/wtf/TimeWithDynamicClockType.h:27
&gt; &gt; +#ifndef WTF_TimeWithDynamicClockType_h
&gt; &gt; +#define WTF_TimeWithDynamicClockType_h
&gt; 
&gt; #pragma once
&gt; 
&gt; &gt; Source/WTF/wtf/WallTime.h:27
&gt; &gt; +#ifndef WTF_WallTime_h
&gt; &gt; +#define WTF_WallTime_h
&gt; 
&gt; #pragma once
&gt; 
&gt; &gt; Source/WTF/wtf/threads/BinarySemaphore.cpp:2
&gt; &gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2010-2016

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/threads/BinarySemaphore.h:2
&gt; &gt; + * Copyright (C) 2010, 2011, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2010-2016.

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/threads/BinarySemaphore.h:30
&gt; &gt; +#include &lt;wtf/TimeWithDynamicClockType.h&gt;
&gt; 
&gt; This should go below ThreadingPrimitives.h.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/MainThreadSharedTimer.h:3
&gt; &gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.
&gt; 
&gt; 2006-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/SharedTimer.h:2
&gt; &gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.
&gt; 
&gt; 2006-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/ThreadTimers.cpp:2
&gt; &gt; + * Copyright (C) 2006, 2008, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2006-2016.

FIxed.

&gt; 
&gt; &gt; Source/WebCore/platform/cf/MainThreadSharedTimerCF.cpp:2
&gt; &gt; + * Copyright (C) 2006, 2010, 2015-2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2006-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/glib/MainThreadSharedTimerGLib.cpp:2
&gt; &gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.
&gt; 
&gt; 2006-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/win/MainThreadSharedTimerWin.cpp:2
&gt; &gt; + * Copyright (C) 2006, 2016 Apple Inc.  All rights reserved.
&gt; 
&gt; 2006-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/win/MainThreadSharedTimerWin.cpp:124
&gt; &gt; +void MainThreadSharedTimer::setFireInterval(Seconds intervalInSeconds)
&gt; 
&gt; Don&apos;t see why the &quot;InSeconds&quot; is needed now that the type is Seconds.

This code is pretty weird, and I decided to leave it weird.  Even before my change, it had these variables:

intervalInSeconds, which was what it seemed to be
interval, which was the interval in milliseconds
intervalInMS, which was a clipped interval that respects USER_TIMER_MAXIMUM

I cannot simply rename intervalInSeconds, and I didn&apos;t want to try to make bigger changes to this code.

&gt; 
&gt; &gt; Source/WebKit2/Platform/IPC/Connection.cpp:2
&gt; &gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2010-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/Platform/IPC/Connection.h:2
&gt; &gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2010-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/Platform/IPC/MessageSender.h:2
&gt; &gt; + * Copyright (C) 2010, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2010-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ChildProcessProxy.h:2
&gt; &gt; + * Copyright (C) 2012, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2012-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp:2
&gt; &gt; + * Copyright (C) 2012, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2012-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Storage/StorageManager.cpp:2
&gt; &gt; + * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2013-2016.

FIxed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:2
&gt; &gt; + * Copyright (C) 2012-2014, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2012-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:2
&gt; &gt; + * Copyright (C) 2012-2014, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2012-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:2
&gt; &gt; + * Copyright (C) 2011, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2011-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm:2
&gt; &gt; + * Copyright (C) 2014, 2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2014-2016.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:2
&gt; &gt; + * Copyright (C) 2010, 2011, 2015-2016 Apple Inc. All rights reserved.
&gt; 
&gt; 2010-2016.

Fixed.

Thanks for the detailed review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248382</commentid>
    <comment_count>45</comment_count>
      <attachid>293963</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 17:12:35 -0700</bug_when>
    <thetext>Created attachment 293963
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248383</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-04 17:14:29 -0700</bug_when>
    <thetext>Attachment 293963 did not pass style-queue:


ERROR: Source/WTF/wtf/ClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Condition.cpp:250:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/Seconds.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/WallTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/TimeWithDynamicClockType.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MonotonicTime.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/MessageQueue.h:132:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:67:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 8 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248431</commentid>
    <comment_count>47</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-04 20:06:20 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/208415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248461</commentid>
    <comment_count>48</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-11-05 00:44:37 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; Landed in https://trac.webkit.org/changeset/208415

It broke the builf of the JSCOnly port:
https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/3599/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248462</commentid>
    <comment_count>49</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-05 00:47:15 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #47)
&gt; &gt; Landed in https://trac.webkit.org/changeset/208415
&gt; 
&gt; It broke the builf of the JSCOnly port:
&gt; https://build.webkit.org/builders/JSCOnly%20Linux%20AArch64%20Release/builds/
&gt; 3599/steps/compile-webkit/logs/stdio

https://bugs.webkit.org/show_bug.cgi?id=164447 fix is coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248536</commentid>
    <comment_count>50</comment_count>
      <attachid>293963</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-05 13:47:45 -0700</bug_when>
    <thetext>Comment on attachment 293963
patch for landing

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

&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:317


Would you be willing to write this kind of expression as !std::isnan(timeout) for clarity, or is there a reason to prefer this current form?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248537</commentid>
    <comment_count>51</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-05 13:48:35 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Would you be willing to write this kind of expression as
&gt; !std::isnan(timeout) for clarity, or is there a reason to prefer this
&gt; current form?

For some reason, bugs.webkit.org omitted the line of code. It&apos;s:

    if (timeout == timeout) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248538</commentid>
    <comment_count>52</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 14:02:02 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Comment on attachment 293963 [details]
&gt; patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293963&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:317
&gt; 
&gt; 
&gt; Would you be willing to write this kind of expression as
&gt; !std::isnan(timeout) for clarity, or is there a reason to prefer this
&gt; current form?

I find == to be clearer because it&apos;s a primitive operator of the language.  In general, if there is a primitive operator in the language that does exactly what I want, then I&apos;d rather use that instead of using a library function that wraps it.  If x is a float and IEEE semantics are obeyed, there is no other meaning for x == x other than &quot;is x not NaN&quot;.

I think that std::isnan is appropriate for projects that compile with math optimization settings that break x==x and other IEEE rules.  We can&apos;t use those settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248542</commentid>
    <comment_count>53</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-05 14:30:16 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; I find == to be clearer because it&apos;s a primitive operator of the language.

OK. I understand the reason behind your preference and I don’t agree that it’s clearer to most programmers, even ones who are fully expert in the IEEE semantics.

If you are willing, I suggest you talk to the other programmers you are working with  to make sure they concur, since they are the people that need to read and understand the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248543</commentid>
    <comment_count>54</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-05 14:35:20 -0700</bug_when>
    <thetext>If we do reach consensus that using &quot;x == x&quot; and &quot;x != x&quot; directly is clearer than using std::nan then we should follow through:

Since I prefer consistent style across WebKit, I suggest we consider whether we want to change the 30 or so places in JavaScriptCore that use std::isnan and the 70 or so places in WebCore that use std::isnan. I have to say, though, that reading them over, I don’t think they would be clearer if they used the operator instead of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248547</commentid>
    <comment_count>55</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-05 14:59:46 -0700</bug_when>
    <thetext>Two more thoughts:

1) Didn&apos;t mean to come on so strong above! But I do think a lot of the current code using std::isnan is pretty easy to read and I hope you will take a look before fully committing to what you prefer.

2) I think the change is great. I’m sad that std::chrono was such a bust for our project. Some of the other recent C++ features have helped us simplify and streamline our code, but it&apos;s good that we took action before this one made things a lot worse. Only thing I’m sad about is losing the nice literal syntax (1ms, 1h, etc.). Maybe we can find a way to make that syntax work for durations with our classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248548</commentid>
    <comment_count>56</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 15:06:22 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; Two more thoughts:
&gt; 
&gt; 1) Didn&apos;t mean to come on so strong above! But I do think a lot of the
&gt; current code using std::isnan is pretty easy to read and I hope you will
&gt; take a look before fully committing to what you prefer.
&gt; 
&gt; 2) I think the change is great. I’m sad that std::chrono was such a bust for
&gt; our project. Some of the other recent C++ features have helped us simplify
&gt; and streamline our code, but it&apos;s good that we took action before this one
&gt; made things a lot worse. Only thing I’m sad about is losing the nice literal
&gt; syntax (1ms, 1h, etc.). Maybe we can find a way to make that syntax work for
&gt; durations with our classes.

I think that it would be easy to get that back, but I didn&apos;t try, because I haven&apos;t yet found code that uses the literal syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248551</commentid>
    <comment_count>57</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-05 15:19:45 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; I haven&apos;t yet found code that uses the literal syntax

I found some uses of ms (edited out the ones that were using 0ms)

WebCore/inspector/InspectorOverlay.cpp:    const auto removeDelay = 250ms;
WebCore/loader/ProgressTracker.cpp:static const auto progressNotificationTimeInterval = 200ms;
WebCore/page/DOMTimer.cpp:static const auto maxIntervalForUserGestureForwarding = 1000ms; // One second matches Gecko.
WebCore/page/DOMTimer.cpp:static const auto minIntervalForNonUserObservableChangeTimers = 1000ms; // Empirically determined to maximize battery life.
WebCore/page/DOMTimer.cpp:    auto interval = std::max(1ms, m_originalInterval);
WebCore/page/DOMTimer.h:    static std::chrono::milliseconds defaultMinimumInterval() { return 4ms; }
WebCore/page/DOMTimer.h:    static std::chrono::milliseconds defaultAlignmentInterval() { return 0ms; }
WebCore/page/DOMTimer.h:    static std::chrono::milliseconds hiddenPageAlignmentInterval() { return 1000ms; }
WebCore/page/ResourceUsageThread.cpp:        auto difference = 500ms - duration;
WebCore/page/Settings.cpp:static const auto layoutScheduleThreshold = 250ms;
WebCore/page/mac/ServicesOverlayController.mm:    auto minimumTimeUntilHighlightShouldBeShown = 200ms;
WebCore/page/mac/ServicesOverlayController.mm:        minimumTimeUntilHighlightShouldBeShown = 1000ms;
WebCore/platform/gamepad/cocoa/GameControllerGamepadProvider.mm:static const std::chrono::milliseconds InputNotificationDelay = 16ms;
WebCore/platform/graphics/cg/IOSurfacePool.cpp:const std::chrono::milliseconds collectionInterval = 500ms;
WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:    const auto readTimeout = 1500ms;
WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:const std::chrono::milliseconds volatileSecondaryBackingStoreAgeThreshold = 200ms;
WebKit2/Shared/mac/RemoteLayerBackingStoreCollection.mm:const std::chrono::milliseconds volatilityTimerInterval = 200ms;
WebKit2/UIProcess/Cocoa/ViewGestureController.cpp:static const std::chrono::milliseconds swipeSnapshotRemovalActiveLoadMonitoringInterval = 250ms;
WebKit2/WebProcess/Network/WebLoaderStrategy.cpp:        return 500ms;
WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:    const auto initialFlushDelay = 500ms;
WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:    const auto flushDelay = 1500ms;

Not sure if we use any of the other units.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248556</commentid>
    <comment_count>58</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-11-05 15:37:52 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; I find == to be clearer because it&apos;s a primitive operator of the language.
&gt; 
&gt; OK. I understand the reason behind your preference and I don’t agree that
&gt; it’s clearer to most programmers, even ones who are fully expert in the IEEE
&gt; semantics.
&gt; 
&gt; If you are willing, I suggest you talk to the other programmers you are
&gt; working with  to make sure they concur, since they are the people that need
&gt; to read and understand the code.

I would find isnan() much more readable. Using == here requires much more brainpower to process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248612</commentid>
    <comment_count>59</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-06 08:36:52 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; (In reply to comment #53)
&gt; &gt; (In reply to comment #52)
&gt; &gt; &gt; I find == to be clearer because it&apos;s a primitive operator of the language.
&gt; &gt; 
&gt; &gt; OK. I understand the reason behind your preference and I don’t agree that
&gt; &gt; it’s clearer to most programmers, even ones who are fully expert in the IEEE
&gt; &gt; semantics.
&gt; &gt; 
&gt; &gt; If you are willing, I suggest you talk to the other programmers you are
&gt; &gt; working with  to make sure they concur, since they are the people that need
&gt; &gt; to read and understand the code.
&gt; 
&gt; I would find isnan() much more readable. Using == here requires much more
&gt; brainpower to process.

I agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248614</commentid>
    <comment_count>60</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-06 08:48:14 -0800</bug_when>
    <thetext>(In reply to comment #59)
&gt; (In reply to comment #58)
&gt; &gt; (In reply to comment #53)
&gt; &gt; &gt; (In reply to comment #52)
&gt; &gt; &gt; &gt; I find == to be clearer because it&apos;s a primitive operator of the language.
&gt; &gt; &gt; 
&gt; &gt; &gt; OK. I understand the reason behind your preference and I don’t agree that
&gt; &gt; &gt; it’s clearer to most programmers, even ones who are fully expert in the IEEE
&gt; &gt; &gt; semantics.
&gt; &gt; &gt; 
&gt; &gt; &gt; If you are willing, I suggest you talk to the other programmers you are
&gt; &gt; &gt; working with  to make sure they concur, since they are the people that need
&gt; &gt; &gt; to read and understand the code.
&gt; &gt; 
&gt; &gt; I would find isnan() much more readable. Using == here requires much more
&gt; &gt; brainpower to process.
&gt; 
&gt; I agree.

To elaborate on my preference:

I don&apos;t always agree that we should pick using a primitive operator over a function. This comes down to style/experience more many folks, but when the operator is doing non-obvious things, it should be given a name. I&apos;m reminded of the first chapter of SICP which basically boils down to abstraction is naming, and I think this operation deserves a name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248722</commentid>
    <comment_count>61</comment_count>
      <attachid>293963</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-11-07 04:58:17 -0800</bug_when>
    <thetext>Comment on attachment 293963
patch for landing

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

&gt; Tools/TestWebKitAPI/Tests/WTF/Time.cpp:185
&gt; +TEST(WTF_Time, less)
&gt; +{
&gt; +    EXPECT_EQ(false, s(2) &lt; s(1));
&gt; +    EXPECT_EQ(false, s(2) &lt; s(2));
&gt; +    EXPECT_EQ(true, s(2) &lt; s(3));
&gt; +    EXPECT_EQ(false, wt(2) &lt; wt(1));
&gt; +    EXPECT_EQ(false, wt(2) &lt; wt(2));
&gt; +    EXPECT_EQ(true, wt(2) &lt; wt(3));
&gt; +    EXPECT_EQ(false, mt(2) &lt; mt(1));
&gt; +    EXPECT_EQ(false, mt(2) &lt; mt(2));
&gt; +    EXPECT_EQ(true, mt(2) &lt; mt(3));
&gt; +    EXPECT_EQ(false, dtw(2) &lt; dtw(1));
&gt; +    EXPECT_EQ(false, dtw(2) &lt; dtw(2));
&gt; +    EXPECT_EQ(true, dtw(2) &lt; dtw(3));
&gt; +    EXPECT_EQ(false, dtm(2) &lt; dtm(1));
&gt; +    EXPECT_EQ(false, dtm(2) &lt; dtm(2));
&gt; +    EXPECT_EQ(true, dtm(2) &lt; dtm(3));
&gt; +}

This code introduced zillion warnings on Linux:
../../Tools/TestWebKitAPI/Tests/WTF/Time.cpp: In member function &apos;virtual void TestWebKitAPI::WTF_Time_less_Test::TestBody()&apos;:
../../Tools/TestWebKitAPI/Tests/WTF/Time.cpp:170:158: warning: converting &apos;false&apos; to pointer type for argument 1 of &apos;char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)&apos; [-Wconversion-null]
../../Tools/TestWebKitAPI/Tests/WTF/Time.cpp:171:158: warning: converting &apos;false&apos; to pointer type for argument 1 of &apos;char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)&apos; [-Wconversion-null]
../../Tools/TestWebKitAPI/Tests/WTF/Time.cpp:173:158: warning: converting &apos;false&apos; to pointer type for argument 1 of &apos;char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)&apos; [-Wconversion-null]
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248968</commentid>
    <comment_count>62</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-07 21:58:23 -0800</bug_when>
    <thetext>Best fix for that is to use EXPECT_TRUE(x) and EXPECT_FALSE(y) instead of EXPECT_EQ(true, x) and EXPECT_EQ(false, y).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253575</commentid>
    <comment_count>63</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-11-24 06:07:29 -0800</bug_when>
    <thetext>(In reply to comment #62)
&gt; Best fix for that is to use EXPECT_TRUE(x) and EXPECT_FALSE(y) instead of
&gt; EXPECT_EQ(true, x) and EXPECT_EQ(false, y).

Thanks for the idea, fixing in bug165061.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293572</attachid>
            <date>2016-11-01 12:58:26 -0700</date>
            <delta_ts>2016-11-01 19:19:07 -0700</delta_ts>
            <desc>possibly solution</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29854</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
bG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNsb2NrVHlwZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENsb2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldh
bGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Cisg
ICAgICAgIG91dC5wcmludCgiTW9ub3RvbmljIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKworZW51bSBjbGFzcyBDbG9ja1R5cGUgewor
ICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tUeXBlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25v
dG9uaWNUaW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1l
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb25v
dG9uaWNUaW1lLmgiCisKKyNpbmNsdWRlICJXYWxsVGltZS5oIgorI2luY2x1ZGUgIlByaW50U3Ry
ZWFtLmgiCisjaW5jbHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKK25hbWVzcGFj
ZSBXVEYgeworCitXYWxsVGltZSBNb25vdG9uaWNUaW1lOjphcHByb3hpbWF0ZVdhbGxUaW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIFdhbGxUaW1lOjpub3coKTsKK30K
Kwordm9pZCBNb25vdG9uaWNUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJNb25vdG9uaWMoIiwgbV92YWx1ZSwgIiBzZWMpIik7Cit9CisKK3ZvaWQg
TW9ub3RvbmljVGltZTo6c2xlZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VGltZSgqdGhpcykuc2xlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDog
U291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL01vbm90b25pY1RpbWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Nb25v
dG9uaWNUaW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV2FsbFRpbWU7
CitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgTW9ub3RvbmljVGltZSB7CitwdWJsaWM6Cisg
ICAgTW9ub3RvbmljVGltZSgpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IE1vbm90b25pY1RpbWUo
ZG91YmxlIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBub3coKTsKKyAgICAKKyAgICBTZWNvbmRzIHNl
Y29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIE1v
bm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QgeyByZXR1cm4gKnRo
aXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxsVGlt
ZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKyhTZWNv
bmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWUobV92
YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9w
ZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vbm90
b25pY1RpbWUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBNb25v
dG9uaWNUaW1lIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUg
b3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0g
KnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oTW9ub3Rv
bmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1fdmFs
dWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE1v
bm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTW9ub3Rv
bmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90
aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE1vbm90b25pY1Rp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1f
dmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KE1vbm90b25pY1RpbWUgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShNb25vdG9uaWNUaW1lIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0K
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6Ok1vbm90b25pY1RpbWU7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1NlY29uZHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY29uZHMuaCIKKworI2lu
Y2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1
ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgi
CisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dhbGxUaW1lIFNl
Y29uZHM6Om9wZXJhdG9yKyhXYWxsVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3Ro
ZXIgKyAqdGhpczsKK30KKworTW9ub3RvbmljVGltZSBTZWNvbmRzOjpvcGVyYXRvcisoTW9ub3Rv
bmljVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKwor
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFNlY29uZHM6Om9wZXJhdG9yKyhjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBvdGhlciArICp0
aGlzOworfQorCitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvci0oV2FsbFRpbWUgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG90aGVyIC0gKnRoaXM7Cit9CisKK01vbm90b25pY1RpbWUgU2Vj
b25kczo6b3BlcmF0b3ItKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG90aGVyIC0gKnRoaXM7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBTZWNvbmRzOjpv
cGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gb3RoZXIgLSAqdGhpczsKK30KKwordm9pZCBTZWNvbmRzOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUsICIgc2VjIik7Cit9
CisKK3ZvaWQgU2Vjb25kczo6c2xlZXAoKSBjb25zdAoreworICAgIFdURjo6c2xlZXAobV92YWx1
ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNv
bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2Vjb25kcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitj
bGFzcyBTZWNvbmRzIHsKK3B1YmxpYzoKKyAgICBTZWNvbmRzKCkgeyB9CisgICAgCisgICAgU2Vj
b25kcyhkb3VibGUgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAg
ICAKKyAgICBkb3VibGUgc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBk
b3VibGUgbWlsbGlzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gc2Vjb25kcygpICogMTAwMDsgfQor
ICAgIGRvdWJsZSBtaWNyb3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWxsaXNlY29uZHMoKSAq
IDEwMDA7IH0KKyAgICBkb3VibGUgbmFub3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWNyb3Nl
Y29uZHMoKSAqIDEwMDA7IH0KKyAgICAKKyAgICBzdGF0aWMgU2Vjb25kcyBmcm9tTWlsbGlzZWNv
bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlIC8g
MTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTZWNvbmRzIGZyb21NaWNyb3NlY29uZHMo
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21NaWxsaXNlY29uZHModmFs
dWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNlY29uZHMgZnJvbU5hbm9zZWNv
bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tTWljcm9zZWNvbmRz
KHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9y
KyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFs
dWUoKSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9y
LShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFs
dWUoKSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRv
cis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAr
IG90aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci09KFNlY29uZHMgb3Ro
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0K
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgb3BlcmF0b3IrKFdhbGxUaW1l
KSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBvcGVyYXRvciso
TW9ub3RvbmljVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSBvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2smKSBjb25z
dDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgb3BlcmF0b3ItKFdhbGxUaW1lKSBj
b25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBvcGVyYXRvci0oTW9u
b3RvbmljVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2smKSBjb25zdDsK
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhPShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcjwoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
IDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oU2Vjb25k
cyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92
YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWUgV1RG
CisKK3VzaW5nIFdURjo6U2Vjb25kczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKworI2lu
Y2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRlICJQcmludFN0
cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlOjp3YWxsVGltZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09
IENsb2NrVHlwZTo6V2FsbCk7CisgICAgcmV0dXJuIFdhbGxUaW1lKG1fdmFsdWUpOworfQorCitN
b25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bW9ub3RvbmljVGltZSgpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlwZTo6TW9ub3Rvbmlj
KTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZShtX3ZhbHVlKTsKK30KKworV2FsbFRpbWUgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjphcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBy
ZXR1cm4gd2FsbFRpbWUoKTsKKyAgICBjYXNlIENsb2NrVHlwZTo6TW9ub3RvbmljOgorICAgICAg
ICByZXR1cm4gbW9ub3RvbmljVGltZSgpLmFwcHJveGltYXRlV2FsbFRpbWUoKTsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV2FsbFRpbWUoKTsK
K30KKworTW9ub3RvbmljVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRl
TW9ub3RvbmljVGltZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNl
IENsb2NrVHlwZTo6V2FsbDoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKTsKKyAgICBj
YXNlIENsb2NrVHlwZTo6TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUoKS5hcHBy
b3hpbWF0ZU1vbm90b25pY1RpbWUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZSgpOworfQorCitTZWNvbmRzIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVy
Lm1fdHlwZSk7CisgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOwor
fQorCitib29sIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8KGNvbnN0IFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3Zh
bHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+KGNvbnN0
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhl
ci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVl
IDw9IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcj49KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJu
IG1fdmFsdWUgPj0gb3RoZXIubV92YWx1ZTsKK30KKwordm9pZCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90
eXBlLCAiKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZTo6c2xlZXAoKSBjb25zdAoreworICAgIExvY2sgZmFrZUxvY2s7CisgICAgQ29uZGl0
aW9uIGZha2VDb25kaXRpb247CisgICAgTG9ja0hvbGRlciBmYWtlTG9ja2VyKGZha2VMb2NrKTsK
KyAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbChmYWtlTG9jaywgKnRoaXMpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgor
I2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJp
bnRTdHJlYW07CisKK2NsYXNzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSB7CitwdWJsaWM6Cisg
ICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCkgeyB9CisgICAgCisgICAgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlKFdhbGxUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1ZSh0aW1lLm1fdmFs
dWUpCisgICAgICAgICwgbV90eXBlKENsb2NrVHlwZTo6V2FsbCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZShNb25vdG9uaWNUaW1lIHRpbWUpCisgICAg
ICAgIDogbV92YWx1ZSh0aW1lLm1fdmFsdWUpCisgICAgICAgICwgbV90eXBlKENsb2NrVHlwZTo6
TW9ub3RvbmljKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5cGUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1
ZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFNlY29u
ZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgQ2xv
Y2tUeXBlIGNsb2NrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIC8v
IEFzc2VydHMgdGhhdCB0aGUgdGltZSBpcyBvZiB0aGUgdHlwZSB5b3Ugd2FudC4KKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgd2FsbFRpbWUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgTW9ub3RvbmljVGltZSBtb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25p
Y1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
IG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSwgbV90eXBlKTsK
KyAgICB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShTZWNv
bmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZShtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSwgbV90eXBlKTsKKyAgICB9CisgICAgCisg
ICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAor
ICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU2Vjb25kcyBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlCisgICAgICAgICAgICAmJiBtX3R5cGUgPT0g
b3RoZXIubV90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgLy8gVG8gZG8gcmVsYXRpdmUg
Y29tcGFyaXNvbnMsIHlvdSBtdXN0IGJlIHVzaW5nIHRpbWVzIHdpdGggdGhlIHNhbWUgY2xvY2sg
dHlwZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
b3BlcmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKKyAgICBDbG9ja1R5cGUgbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwpJbmRleDogU291cmNl
L1dURi93dGYvV2FsbFRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhbGxU
aW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FsbFRp
bWUuaCIKKworI2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVh
bS5oIgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorCituYW1lc3BhY2Ug
V1RGIHsKKworTW9ub3RvbmljVGltZSBXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIE1vbm90b25pY1RpbWU6Om5v
dygpOworfQorCit2b2lkIFdhbGxUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJXYWxsKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIFdh
bGxUaW1lOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUaW1lKCp0
aGlzKS5zbGVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9XYWxsVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1l
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvV2FsbFRpbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9uaWNUaW1lOworY2xhc3MgUHJpbnRTdHJl
YW07CisKK2NsYXNzIFdhbGxUaW1lIHsKK3B1YmxpYzoKKyAgICBXYWxsVGltZSgpIHsgfQorICAg
IAorICAgIGV4cGxpY2l0IFdhbGxUaW1lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFdhbGxUaW1lIG5vdygpOwor
ICAgIAorICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisgICAgCisgICAgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgYXBw
cm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIAorICAgIFdhbGxUaW1l
IG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdh
bGxUaW1lKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgV2FsbFRp
bWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
V2FsbFRpbWUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBXYWxs
VGltZSBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRo
aXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBXYWxsVGltZSBvcGVyYXRvci09
KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90
aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLShXYWxsVGltZSBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci52YWx1
ZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KFdhbGxUaW1lIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcjwoV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I+KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmFsdWUgPiBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPD0o
V2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBv
dGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oV2FsbFRpbWUg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OldhbGxUaW1lOworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293632</attachid>
            <date>2016-11-01 19:19:07 -0700</date>
            <delta_ts>2016-11-02 10:46:49 -0700</delta_ts>
            <desc>patch so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60533</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjA4MjM0KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksMTYgQEAKIAkJMEY0M0Q4RjIxREI1QUREQzAwMTA4RkI2
IC8qIEF1dG9tYXRpY1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5o
ICovOyB9OwogCQkwRjQ1NzA0MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4
RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJB
NjI5IC8qIEJ1YmJsZVNvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07
CisJCTBGNjZCMjhBMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODAxREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5jcHAgKi87IH07CisJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAv
KiBDbG9ja1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLzsgfTsKKwkJMEY2
NkIyOEMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODIxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwICovOyB9OworCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0Yg
LyogTW9ub3RvbmljVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkIyODMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLzsg
fTsKKwkJMEY2NkIyOEUxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODQxREM5N0JBQjAwNEEx
RDNGIC8qIFNlY29uZHMuY3BwICovOyB9OworCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyog
U2Vjb25kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkIyODUxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuaCAqLzsgfTsKKwkJMEY2NkIyOTAx
REM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NjFEQzk3QkFCMDA0
QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOTEx
REM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODcxREM5N0JBQjAwNEEx
RDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovOyB9OworCQkwRjY2QjI5MjFEQzk3
QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNw
cCAqLzsgfTsKKwkJMEY2NkIyOTMxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4OTFEQzk3QkFC
MDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLzsgfTsKIAkJMEY3MjVDQUMxQzUwNDYxNjAwQUQ5NDNB
IC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLzsgfTsKIAkJMEY3
QzVGQjYxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjUxRDg4NUNGMjAwNDRGNUUy
IC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07
CkBAIC0zNzIsNiArMzgyLDE2IEBACiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRv
bWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGlj
VGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYw
MDYyQTYyOSAvKiBEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERvbWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4
MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnViYmxlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4
MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xvY2tUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vbm90b25pY1RpbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb25vdG9uaWNU
aW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg0MURDOTdCQUIwMDRB
MUQzRiAvKiBTZWNvbmRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNlY29uZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NTFEQzk3
QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZWNvbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg2MURDOTdC
QUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhbGxUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2NkIyODkxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhbGxUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjdDNUZCNTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVE
IC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjMsNiArODgz
LDggQEAKIAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJ
CQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJ
CQkJQThBNDcyNkIxNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCisJCQkJ
MEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oICovLAogCQkJCTBGQzRFREU1MTY5NjE0
OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAqLywKIAkJCQkwRjhGMkI4RjE3MkUwMEYwMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovLAogCQkJCTBGOEYyQjkwMTcyRTAwRjAw
MDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovLApAQCAtOTQ2LDYgKzk2OCw4IEBACiAJ
CQkJQThBNDcyQ0QxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJ
CUE4QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCiAJCQkJQThB
NDcyQ0YxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLywKKwkJCQkw
RjY2QjI4MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi8sCisJCQkJMEY2
NkIyODMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUz
MDFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQdHIuaCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIx
MDBCMkVFQTcgLyogTmV2ZXJEZXN0cm95ZWQuaCAqLywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAz
MzgyMTAgLyogTm9Mb2NrLmggKi8sCkBAIC0xMDA3LDYgKzEwMzEsOCBAQAogCQkJCTE0Njk0MTk1
MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJMUEzNTI0QUEx
RDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggKi8sCiAJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBG
Rjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAorCQkJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAv
KiBTZWNvbmRzLmNwcCAqLywKKwkJCQkwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3Iu
aCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0
LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAt
MTA0Myw2ICsxMDY5LDggQEAKIAkJCQlBOEE0NzMzNjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nUHRocmVhZHMuY3BwICovLAogCQkJCUE4QTQ3MzNFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRTYWZlUmVmQ291bnRlZC5oICovLAogCQkJCUE4QTQ3MzNGMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRTcGVjaWZpYy5oICovLAorCQkJCTBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICovLAorCQkJCTBGNjZCMjg3MURDOTdCQUIwMDRBMUQz
RiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCAqLywKIAkJCQk1NTMwNzFDOTFDNDA0Mjcy
MDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8sCiAJCQkJMEZFRDY3QjUxQjIyRDREODAwNjZD
RTE1IC8qIFRpbnlQdHJTZXQuaCAqLywKIAkJCQkxNDlFRjE2MjE2QkJGRTBEMDAwQTQzMzEgLyog
VHJpU3RhdGUuaCAqLywKQEAgLTEwNTQsNiArMTA4Miw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCisJCQkJMEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAq
LywKKwkJCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLywKIAkJCQk5
NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICovLAogCQkJCTBGMzUwMTYzMUJC
MjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJMEZFNDQ3OUExQjdBQUEwMzAw
OTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCAqLywKQEAgLTEyNTksNyArMTI4OSw5IEBACiAJCQkJMEZC
MTRFMTkxODBGQTIxODAwOUI2QjREIC8qIEJhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRF
MUIxODEwRTFEQzAwOUI2QjREIC8qIEJhZ1RvSGFzaE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODEzNDAxMzkxNUIwOTJGRDAwMUZGMEI4IC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2NkIyOEYxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0E5MTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY2NkIyOTExREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQUIxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFy
eVNlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOEExNTFBODI1QjAwNDEyM0ZG
IC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzQwLDYgKzEzNzIsNyBAQAogCQkJCTkz
QUM5MUE4MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5
RUIwNjMxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MERBMDg1MTc5OUYwNEQwMDUyOUE5QiAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY2NkIyOTMxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzNFMTE1MUE4MjVCMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTE2NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzNFMzE1MUE4MjVCMDA0MTIzRkYgLyogTG9ja2VyLmggaW4gSGVhZGVycyAq
LywKQEAgLTEzOTksNiArMTQzMiw3IEBACiAJCQkJMTRGM0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8q
IFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Njk0MTk2MTZFQUFG
RjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzUyNEFC
MUQ2M0EyRkYwMDMxNzI5QiAvKiBTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEQx
REM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MDk4QjAyMUMxNkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0MUYxNTFBODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xNDY2LDYgKzE1MDAsNyBAQAogCQkJCUU0QTBBRDNBMUE5NjI0NTUw
MDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ2MTUxQTgy
NUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDg3MTUx
QTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2
QjI4QjFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RTczRTAyNTE5RENCN0FCMDA1ODBENUMgLyogWFBDU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
OEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEgLyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUM5MTZCOTc1RjAyRjRGN0U4QjRBQjEyRCAvKiBJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNTgxLDYgKzE2MTYsNyBAQAogCQkJCUE4QTQ3M0FBMTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdu
dW0uY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ1MTE1MUE4MjVCMDA0MTIzRkYgLyogQmlu
YXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzhCMTUxQTgyNUIwMDQx
MjNGRiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOTAxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlEQ0VFMjIwMTFDRUE3NTUxMDAwQzIzOTYgLyogQmxvY2tPYmpDRXhjZXB0aW9ucy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FDMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93
ZXJzLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NjAxNTFBODI1QjAwNDEyM0ZGIC8qIENv
bGxhdG9yRGVmYXVsdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NDEsNiArMTY3Nyw5IEBACiAJ
CQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3Rh
dGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2QjI4QTFEQzk3QkFCMDA0QTFEM0YgLyog
Q2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQz
RiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2QjI4RTFEQzk3QkFCMDA0
QTFEM0YgLyogU2Vjb25kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQzRDhGMTFEQjVBRERD
MDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5
OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzOTM0QkQ1MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xNjUyLDYgKzE2OTEsNyBAQAogCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0NEUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGNjZCMjhDMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzhGMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4
dFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkxMUQzMDdBQjgwMEY1RkEx
NiAvKiBVVGV4dFByb3ZpZGVyTGF0aW4xLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkz
MUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3ZpZGVyVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
Q2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IENsb2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tU
eXBlOjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rv
bmljIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0
cmVhbTsKKworZW51bSBjbGFzcyBDbG9ja1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3Rvbmlj
Cit9OworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgQ2xvY2tUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tU
eXBlOworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MjM0KQorKysgU291cmNlL1dU
Ri93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2lm
bmRlZiBXVEZfQ29uZGl0aW9uX2gKICNkZWZpbmUgV1RGX0NvbmRpdGlvbl9oCiAKLSNpbmNsdWRl
IDxjaHJvbm8+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFya2lu
Z0xvdC5oPgorI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFt
ZXNwYWNlIFdURiB7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlz
IGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQg
aXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5j
ZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5n
TG90OjpDbG9jayBDbG9jazsKKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUgVGltZTsKICAg
ICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhlIGdp
dmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8gcGFy
a2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdva2Ug
dXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY0LDEwIEBAIHN0cnVjdCBDb25kaXRp
b25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sgZm9yIHBhc3Qg
dGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBPcGVuR3JvdXAK
ICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgQ2xvY2s6
OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywg
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsKICAgICAgICAg
Ym9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygpKSB7CisgICAg
ICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsKICAgICAgICAg
ICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAg
fSBlbHNlIHsKQEAgLTg5LDcgKzg5LDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIC8v
IFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMgdHJ1
ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0dXJuIGVhcmx5
IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFt
ZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBDbG9jazo6dGlt
ZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgYm9vbCB3YWl0
VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAg
IHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVudGlsKGxvY2ss
IHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDEsMjMgQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ugewog
CiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4gUmV0
dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8vIE1heSByZXR1
cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUs
IHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdhaXRGb3IoCi0g
ICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0aXZlVGltZW91
dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYgbG9jaywgU2Vj
b25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRpdmUocmVsYXRp
dmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBU
aW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9vbCB3YWl0Rm9yKExvY2tUeXBl
JiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiB3
YWl0VW50aWwobG9jaywgVGltZTo6bm93KCkgKyByZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYg
bG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRpbChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6
bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9jaywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBA
IC0xMjAsNTMgKzEyNyw2IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAgICAgICAgIHdh
aXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVu
YW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBU
aW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBl
OjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0
IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBl
JiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1
cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgot
ICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBk
b3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0
Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2Nr
VHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGltZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3Im
IHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vj
b25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMgKiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4w
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4g
MCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxs
IGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxv
Y2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUg
dGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0
IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAgIC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3Jl
dmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBwcmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1l
b3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxp
bnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3
YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAv
LyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMg
d2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxs
aW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxs
eSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9uZSgpCkBAIC0yMDcsNTggKzE2Nyw4IEBAIHN0
cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5
cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAg
ZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25k
cyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjApOwotICAgICAgICAKLSAgICAgICAgaWYgKCEo
cmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAwKSkgewotICAgICAgICAgICAgLy8gVGhpcyBo
YW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwgYXMgTmFOLgotICAgICAgICAgICAgbG9jay51
bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRz
ID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgo
KSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5v
dCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQgaW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAg
ICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2sp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vj
b25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwot
Ci0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAg
IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRp
b25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0
aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRp
bChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShyZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlvblR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9p
bnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3QgRHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVv
dXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6
ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0g
ICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBDbG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0g
ICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMs
IHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAv
LyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5zaWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0
aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBiZQotICAgICAgICAgICAgLy8gZXhwcmVzc2Vk
IHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAgICAgIHJldHVybiBDbG9jazo6dGltZV9wb2lu
dDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBt
eVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2Fz
dDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGltZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgIH0KLQogICAgIEF0b21pYzxib29s
PiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAKIGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBD
b25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRl
eDogU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0N1cnJlbnRUaW1lLmNwcAkocmV2aXNpb24gMjA4MjM0KQorKysgU291cmNlL1dURi93
dGYvQ3VycmVudFRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9p
ZCBzbGVlcChkb3VibGUgdmFsdWUpCiAgICAgTG9jayBmYWtlTG9jazsKICAgICBDb25kaXRpb24g
ZmFrZUNvbmRpdGlvbjsKICAgICBMb2NrSG9sZGVyIGZha2VMb2NrZXIoZmFrZUxvY2spOwotICAg
IGZha2VDb25kaXRpb24ud2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKGZha2VMb2NrLCBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHZhbHVlKTsKKyAgICBmYWtlQ29uZGl0aW9u
LndhaXRGb3IoZmFrZUxvY2ssIFNlY29uZHModmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisKKyNpbmNsdWRlICJD
dXJyZW50VGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmgiCisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK01vbm90b25pY1RpbWUgTW9ub3RvbmljVGltZTo6bm93KCkKK3sKKyAgICBNb25v
dG9uaWNUaW1lIHJlc3VsdDsKKyAgICByZXN1bHQubV92YWx1ZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dhbGxUaW1lIE1vbm90b25p
Y1RpbWU6OmFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAqdGhpcyAt
IG5vdygpICsgV2FsbFRpbWU6Om5vdygpOworfQorCit2b2lkIE1vbm90b25pY1RpbWU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk1vbm90b25pYygiLCBt
X3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBNb25vdG9uaWNUaW1lOjpzbGVlcCgpIGNvbnN0
Cit7CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBU
aGUgY3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3Rvbmlj
IGNsb2NrcyBkb24ndCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3NzaWJseSBkb24ndCBjb3VudCBk
b3dudGltZS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3Ug
Y2FuIHJlYXNvbiBhYm91dAorLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNl
IGluIG1hdGguIEl0J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywK
Ky8vIG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBh
cmUgYWxsIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8gU3BlY2lmaWNhbGx5LCBNb25v
dG9uaWNUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUg
dGhhdAorLy8gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
IGlzIHRoZSBzYW1lIGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgor
Y2xhc3MgTW9ub3RvbmljVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlw
ZSBjbG9ja1R5cGUgPSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAgICAKKyAgICAvLyBUaGlzIGlz
IHRoZSBlcG9jaC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUg
YXMgeCAtIE1vbm90b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNUaW1lKCkgeyB9CisgICAgCisg
ICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXBy
ZXNlbnRzIHRpbWUgYWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhl
IHNhbWUgdGltZQorICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBmcm9t
UmF3RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1vbm90b25pY1RpbWUgcmVz
dWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE1vbm90b25p
Y1RpbWUgbm93KCk7CisgICAgCisgICAgc3RhdGljIE1vbm90b25pY1RpbWUgaW5maW5pdHkoKSB7
IHJldHVybiBmcm9tUmF3RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5p
dHkoKSk7IH0KKworICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVy
biBTZWNvbmRzKG1fdmFsdWUpOyB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0
ZU1vbm90b25pY1RpbWUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Q7CisgICAgCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAg
IAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlIC0gb3Ro
ZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNj
YWxhcnMgY2FuIGJlIG5lZ2F0ZWQgYXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYwor
ICAgIC8vIHRyYW5zZm9ybWF0aW9ucy4gU28sIHdlIGFsbG93IGl0LgorICAgIE1vbm90b25pY1Rp
bWUgb3BlcmF0b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91Ymxl
KC1tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcis9KFNl
Y29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVy
OworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhl
cikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQor
ICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3ItKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPChNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPihNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPD0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I+PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUgPj0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNsZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1f
dmFsdWUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNb25v
dG9uaWNUaW1lOworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMjA4MjM0KQor
KysgU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDgg
KzU0LDggQEAgcHVibGljOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
OwogICAgIAotICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25f
dmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKyAgICBNdXRleCBwYXJraW5nTG9jazsKKyAgICBU
aHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKIAogICAgIGNvbnN0IHZvaWQqIGFkZHJl
c3MgeyBudWxscHRyIH07CiAgICAgCkBAIC01NjQsNyArNTY0LDcgQEAgTkVWRVJfSU5MSU5FIFBh
cmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFyawogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAg
Y29uc3QgU2NvcGVkTGFtYmRhPGJvb2woKT4mIHZhbGlkYXRpb24sCiAgICAgY29uc3QgU2NvcGVk
TGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNsZWVwLAotICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVv
dXQpCisgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAg
IGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogcGFya2luZy5cbiIpKTsKQEAgLTU5MiwyMCArNTkyLDE3IEBAIE5FVkVSX0lOTElORSBQYXJr
aW5nTG90OjpQYXJrUmVzdWx0IFBhcmsKICAgICAKICAgICBib29sIGRpZEdldERlcXVldWVkOwog
ICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBh
cmtpbmdMb2NrKTsKLSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzICYmIENsb2NrOjpub3coKSA8
IHRpbWVvdXQpIHsKLSAgICAgICAgICAgIC8vIEZhbGxpbmcgYmFjayB0byB3YWl0KCkgd29ya3Mg
YXJvdW5kIGEgYnVnIGluIGxpYnN0ZGMrKyBpbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmNvbmRpdGlv
bl92YXJpYWJsZS4gU2VlOgotICAgICAgICAgICAgLy8gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MDI3Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2NjLmdu
dS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU4OTMxCi0gICAgICAgICAgICBpZiAodGlt
ZW91dCA9PSBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpCi0gICAgICAgICAgICAgICAgbWUtPnBh
cmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXRfdW50aWwobG9ja2VyLCB0aW1lb3V0KTsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIHdo
aWxlIChtZS0+YWRkcmVzcyAmJiB0aW1lb3V0Lm5vd1dpdGhTYW1lQ2xvY2soKSA8IHRpbWVvdXQp
IHsKKyAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAg
ICAgICAgICBtZS0+cGFya2luZ0xvY2ssIHRpbWVvdXQuYXBwcm94aW1hdGVXYWxsVGltZSgpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IEJlY2F1c2Ugb2YgdGhlIGFib3ZlLCB3ZSBkbyB0aGlzIHRoaW5nLCB3aGljaCBpcyBoaWxhcmlv
dXNseSBhd2Z1bCwgYnV0IGVuc3VyZXMgdGhhdCB0aGUgd29yc3QgY2FzZSBpcwotICAgICAgICAg
ICAgLy8gYSBDUFUtZWF0aW5nIHNwaW4gYnV0IG5vdCBhIGRlYWRsb2NrLgotICAgICAgICAgICAg
bG9ja2VyLnVubG9jaygpOwotICAgICAgICAgICAgbG9ja2VyLmxvY2soKTsKKyAgICAgICAgICAg
IC8vIEl0J3MgcG9zc2libGUgZm9yIHRoZSBPUyB0byBkZWNpZGUgbm90IHRvIHdhaXQuIElmIGl0
IGRvZXMgdGhhdCB0aGVuIGl0IHdpbGwgYWxzbworICAgICAgICAgICAgLy8gZGVjaWRlIG5vdCB0
byByZWxlYXNlIHRoZSBsb2NrLiBJZiB0aGVyZSdzIGEgYnVnIGluIHRoZSB0aW1lIG1hdGgsIHRo
ZW4gdGhpcyBjb3VsZAorICAgICAgICAgICAgLy8gcmVzdWx0IGluIGEgZGVhZGxvY2suIEZsYXNo
aW5nIHRoZSBsb2NrIG1lYW5zIHRoYXQgYXQgd29yc3QgaXQncyBqdXN0IGEgQ1BVLWVhdGluZwor
ICAgICAgICAgICAgLy8gc3Bpbi4KKyAgICAgICAgICAgIG1lLT5wYXJraW5nTG9jay51bmxvY2so
KTsKKyAgICAgICAgICAgIG1lLT5wYXJraW5nTG9jay5sb2NrKCk7CiAgICAgICAgIH0KICAgICAg
ICAgQVNTRVJUKCFtZS0+YWRkcmVzcyB8fCBtZS0+YWRkcmVzcyA9PSBhZGRyZXNzKTsKICAgICAg
ICAgZGlkR2V0RGVxdWV1ZWQgPSAhbWUtPmFkZHJlc3M7CkBAIC02NDAsMTQgKzYzNywxNCBAQCBO
RVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAKICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBubyBtYXR0ZXIgd2hhdCwgbWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBv
aW50LgogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIo
bWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5n
TG9jayk7CiAgICAgICAgIGlmICghZGlkRGVxdWV1ZSkgewogICAgICAgICAgICAgLy8gSWYgd2Ug
ZGlkIG5vdCBkZXF1ZXVlIG91cnNlbHZlcywgdGhlbiBzb21lb25lIGVsc2UgZGlkLiBUaGV5IHdp
bGwgc2V0IG91ciBhZGRyZXNzIHRvCiAgICAgICAgICAgICAvLyBudWxsLiBXZSBkb24ndCB3YW50
IHRvIHByb2NlZWQgdW50aWwgdGhleSBkbyB0aGlzLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhleSBt
YXkgc2V0CiAgICAgICAgICAgICAvLyBvdXIgYWRkcmVzcyB0byBudWxsIGluIHNvbWUgZGlzdGFu
dCBmdXR1cmUgd2hlbiB3ZSdyZSBhbHJlYWR5IHRyeWluZyB0byB3YWl0IGZvcgogICAgICAgICAg
ICAgLy8gb3RoZXIgdGhpbmdzLgogICAgICAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzKQotICAg
ICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAg
ICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KG1lLT5wYXJraW5nTG9jayk7CiAgICAg
ICAgIH0KICAgICAgICAgbWUtPmFkZHJlc3MgPSBudWxscHRyOwogICAgIH0KQEAgLTY5NSwxMSAr
NjkyLDExIEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGEKICAgICBB
U1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAg
ICAgIHRocmVhZERhdGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgICAgICB0aHJlYWREYXRhLT50
b2tlbiA9IDA7CiAgICAgfQotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5
X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzQxLDExICs3MzgsMTEgQEAgTkVWRVJfSU5MSU5FIHZv
aWQgUGFya2luZ0xvdDo6dW5wYXJrT25lSQogICAgIEFTU0VSVCh0aHJlYWREYXRhLT5hZGRyZXNz
KTsKICAgICAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9j
a2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9
IG51bGxwdHI7CiAgICAgfQogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWREYXRhIG1h
eSBkaWUuIEdvb2QgdGhpbmcgd2UgaGF2ZSBhIFJlZlB0cjw+IG9uIGl0LgotICAgIHRocmVhZERh
dGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtp
bmdDb25kaXRpb24uc2lnbmFsKCk7CiB9CiAKIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5n
TG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VudCkKQEAg
LTc3OSwxMCArNzc2LDEwIEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBh
cmsKICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBh
cmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwg
UmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQo
dGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAg
ICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAg
ICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgdGhy
ZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICBpZiAodmVy
Ym9zZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHJldmlzaW9uIDIwODIzNCkKKysrIFNvdXJjZS9X
VEYvd3RmL1BhcmtpbmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAj
aWZuZGVmIFdURl9QYXJraW5nTG90X2gKICNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAogCi0jaW5j
bHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0F0b21p
Y3MuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFt
ZXNwYWNlIFdURiB7CiAKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAg
UGFya2luZ0xvdChjb25zdCBQYXJraW5nTG90JikgPSBkZWxldGU7CiAKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2sgQ2xvY2s7CisgICAgdHlwZWRlZiBXYWxs
VGltZSBUaW1lOwogICAgIAogICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLiBUaGUK
ICAgICAvLyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24g
cmV0dXJucyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3ICs2OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3Qg
VmFsaWRhdGlvbkZ1bmN0b3ImIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IEJlZm9yZVNsZWVw
RnVuY3RvciYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQp
CisgICAgICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKICAgICB7
CiAgICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgICAgICAgICBhZGRy
ZXNzLApAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlID09IGV4cGVjdGVkOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFtdICgpIHsgfSwK
LSAgICAgICAgICAgIENsb2NrOjp0aW1lX3BvaW50OjptYXgoKSk7CisgICAgICAgICAgICBUaW1l
OjppbmZpbml0eSgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdpdmVuIHRv
IHlvdSBhbnl0aW1lIHlvdSB1bnBhcmtPbmUoKS4KQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAgICBjb25zdCBTY29wZWRMYW1i
ZGE8Ym9vbCgpPiYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
KT4mIGJlZm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KTsKKyAg
ICAgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KTsKICAgICAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAg
Y29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jl
c3VsdCk+JiBjYWxsYmFjayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNvbmRzLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGlt
ZS5oIgorI2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5o
IgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxU
aW1lLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvciso
V2FsbFRpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisK
K01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3IrKE1vbm90b25pY1RpbWUgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSBTZWNvbmRzOjpvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKworV2FsbFRp
bWUgU2Vjb25kczo6b3BlcmF0b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBXYWxsVGltZTo6d2l0aFJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBv
Y2goKS52YWx1ZSgpKTsKK30KKworTW9ub3RvbmljVGltZSBTZWNvbmRzOjpvcGVyYXRvci0oTW9u
b3RvbmljVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6d2l0
aFJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsK
K30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFNlY29uZHM6Om9wZXJhdG9yLShjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBvdGhl
ci53aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpOworfQorCit2b2lkIFNlY29uZHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSwgIiBzZWMiKTsKK30KKwordm9pZCBT
ZWNvbmRzOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTW9ub3RvbmljVGltZTsKK2NsYXNzIFByaW50
U3RyZWFtOworY2xhc3MgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOworY2xhc3MgV2FsbFRpbWU7
CisKK2NsYXNzIFNlY29uZHMgeworcHVibGljOgorICAgIFNlY29uZHMoKSB7IH0KKyAgICAKKyAg
ICBleHBsaWNpdCBTZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorICAgIAorICAgIGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorICAgIGRvdWJsZSBtaWxsaXNlY29uZHMoKSBjb25zdCB7IHJldHVybiBzZWNvbmRz
KCkgKiAxMDAwOyB9CisgICAgZG91YmxlIG1pY3Jvc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1p
bGxpc2Vjb25kcygpICogMTAwMDsgfQorICAgIGRvdWJsZSBuYW5vc2Vjb25kcygpIGNvbnN0IHsg
cmV0dXJuIG1pY3Jvc2Vjb25kcygpICogMTAwMDsgfQorICAgIAorICAgIHN0YXRpYyBTZWNvbmRz
IGZyb21NaWxsaXNlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNl
Y29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNlY29uZHMgZnJv
bU1pY3Jvc2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gZnJvbU1p
bGxpc2Vjb25kcyh2YWx1ZSAvIDEwMDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU2Vjb25k
cyBmcm9tTmFub3NlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZy
b21NaWNyb3NlY29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIAorICAgIFNl
Y29uZHMgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU2Vjb25kcyh2YWx1ZSgpICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIFNl
Y29uZHMgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU2Vjb25kcyh2YWx1ZSgpIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIFNl
Y29uZHMgb3BlcmF0b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKC12
YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gSXQgbWFrZXMgc2Vuc2UgdG8gY29uc2lkZXIg
c2NhbGluZyBhIGR1cmF0aW9uLCBsaWtlLCAiSSB3YW50IHRvIHdhaXQgNSB0aW1lcyBhcyBsb25n
IGFzCisgICAgLy8gbGFzdCB0aW1lISIuCisgICAgU2Vjb25kcyBvcGVyYXRvciooZG91YmxlIHNj
YWxhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgKiBzY2Fs
YXIpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLyhkb3VibGUgc2NhbGFyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAvIHNjYWxhcik7Cisg
ICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7
CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAg
IFNlY29uZHMmIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJh
dG9yKj0oZG91YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlz
ICogc2NhbGFyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci89KGRvdWJsZSBz
Y2FsYXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAvIHNjYWxhcjsKKyAg
ICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIG9wZXJhdG9yKyhXYWxs
VGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgb3BlcmF0
b3IrKE1vbm90b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBvcGVyYXRv
ci0oV2FsbFRpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1l
IG9wZXJhdG9yLShNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oU2Vjb25kcyBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShTZWNvbmRzIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcjwoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj4oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9
KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBv
dGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oU2Vjb25kcyBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFs
dWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisK
K30gLy8gbmFtZXNwYWUgV1RGCisKK3VzaW5nIFdURjo6U2Vjb25kczsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaCIKKworI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIK
KyNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93KENsb2NrVHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgor
ICAgICAgICByZXR1cm4gV2FsbFRpbWU6Om5vdygpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25v
dG9uaWM6CisgICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlKCk7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGU6Om5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdAoreworICAgIHJldHVybiBub3co
Y2xvY2tUeXBlKCkpOworfQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Ondh
bGxUaW1lKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBl
OjpXYWxsKTsKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdEb3VibGUobV92YWx1ZSk7Cit9
CisKK01vbm90b25pY1RpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjptb25vdG9uaWNUaW1l
KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpNb25v
dG9uaWMpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3RG91YmxlKG1fdmFsdWUp
OworfQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5
cGU6OldhbGw6CisgICAgICAgIHJldHVybiB3YWxsVGltZSgpOworICAgIGNhc2UgQ2xvY2tUeXBl
OjpNb25vdG9uaWM6CisgICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCkuYXBwcm94aW1hdGVX
YWxsVGltZSgpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBXYWxsVGltZSgpOworfQorCitNb25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fdHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4gd2Fs
bFRpbWUoKS5hcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKTsKKyAgICBjYXNlIENsb2NrVHlwZTo6
TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgpOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7
Cit9CisKK1NlY29uZHMgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvci0oY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVl
IC0gb3RoZXIubV92YWx1ZSk7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4g
bV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlOjpvcGVyYXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICBy
ZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlOjpvcGVyYXRvcjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7
CisgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yPj0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIu
bV90eXBlKTsKKyAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworfQorCit2b2lk
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChtX3R5cGUsICIoIiwgbV92YWx1ZSwgIiBzZWMpIik7Cit9CisKK3Zv
aWQgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgTG9jayBm
YWtlTG9jazsKKyAgICBDb25kaXRpb24gZmFrZUNvbmRpdGlvbjsKKyAgICBMb2NrSG9sZGVyIGZh
a2VMb2NrZXIoZmFrZUxvY2spOworICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VMb2Nr
LCAqdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlIHsKK3B1YmxpYzoKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoKSB7IH0KKyAg
ICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoV2FsbFRpbWUgdGltZSkKKyAgICAgICAg
OiBtX3ZhbHVlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKQorICAgICAgICAsIG1f
dHlwZShDbG9ja1R5cGU6OldhbGwpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUoTW9ub3RvbmljVGltZSB0aW1lKQorICAgICAgICA6IG1fdmFsdWUodGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpCisgICAgICAgICwgbV90eXBlKENsb2NrVHlw
ZTo6TW9ub3RvbmljKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSBmcm9tUmF3RG91YmxlKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQubV90eXBlID0gdHlwZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBzZWNvbmRz
U2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICBDbG9j
a1R5cGUgY2xvY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93KENsb2Nr
VHlwZSk7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSBub3dXaXRoU2FtZUNsb2NrKCkgY29uc3Q7CisgICAgCisgICAgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlIHdpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUoZG91YmxlIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZnJvbVJhd0Rv
dWJsZSh2YWx1ZSwgY2xvY2tUeXBlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIHRo
YXQgdGhlIHRpbWUgaXMgb2YgdGhlIHR5cGUgeW91IHdhbnQuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIFdhbGxUaW1lIHdhbGxUaW1lKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1v
bm90b25pY1RpbWUgbW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Q7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29u
c3Q7CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV92YWx1ZTsgfQorICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvciso
U2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2Nr
QW5kUmF3RG91YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUobV92YWx1ZSAt
IG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFu
ZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJh
aWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKC1tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7
CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAg
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAg
eworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgU2Vjb25kcyBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlCisgICAgICAgICAgICAmJiBtX3R5cGUgPT0gb3Ro
ZXIubV90eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgLy8gVG8gZG8gcmVsYXRpdmUgY29t
cGFyaXNvbnMsIHlvdSBtdXN0IGJlIHVzaW5nIHRpbWVzIHdpdGggdGhlIHNhbWUgY2xvY2sgdHlw
ZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKKyAgICBDbG9ja1R5cGUgbV90eXBlIHsgQ2xvY2tUeXBlOjpXYWxsIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL1dhbGxUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXYWxsVGltZS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIK
KyNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNp
bmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisK
K1dhbGxUaW1lIFdhbGxUaW1lOjpub3coKQoreworICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAgICBy
ZXN1bHQubV92YWx1ZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
TW9ub3RvbmljVGltZSBXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIE1vbm90b25pY1RpbWU6Om5vdygpOworfQor
Cit2b2lkIFdhbGxUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJXYWxsKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIFdhbGxUaW1lOjpz
bGVlcCgpIGNvbnN0Cit7CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVl
cCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9X
YWxsVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvV2FsbFRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRl
IDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTW9ub3RvbmljVGlt
ZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBUaGUgY3VycmVudCB0aW1lIGFjY29yZGluZyB0
byBhIHdhbGwgY2xvY2sgKGFrYSByZWFsIHRpbWUgY2xvY2spLiBUaGlzIHVzZXMgZmxvYXRpbmcg
cG9pbnQKKy8vIGludGVybmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBhYm91dCBpbmZpbml0
eSBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgYXJpc2UgaW4gbWF0aC4gSXQncworLy8gYWNjZXB0YWJs
ZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywgbmVnYXRpdmUgdGltZXMsIGFuZCBpbmZp
bml0ZSB0aW1lcywgc28gbG9uZyBhcyB0aGV5CisvLyBhcmUgcmVsYXRpdmUgdG8gdGhlIHNhbWUg
Y2xvY2suIFNwZWNpZmljYWxseSwgV2FsbFRpbWUgc2hvdWxkIGJlIHVzZWQgaW4gYWdyZWVtZW50
IHdpdGggdGhlCisvLyBwcmluY2lwbGUgdGhhdCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpIGlzIHRoZSBzYW1lIGFzIFdURjo6Y3VycmVudFRpbWUoKS4KK2NsYXNz
IFdhbGxUaW1lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ2xvY2tUeXBlIGNsb2NrVHlw
ZSA9IENsb2NrVHlwZTo6V2FsbDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4gU28s
IHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIFdhbGxUaW1l
KCkuCisgICAgV2FsbFRpbWUoKSB7IH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtu
b3cgZm9yIHN1cmUgdGhhdCB0aGUgZG91YmxlIHJlcHJlc2VudHMgdGltZSBhY2NvcmRpbmcgdG8K
KyAgICAvLyBXVEY6OmN1cnJlbnRUaW1lKCkuIEl0IG11c3QgYmUgaW4gc2Vjb25kcyBhbmQgaXQg
bXVzdCBiZSBmcm9tIHRoZSBzYW1lIHRpbWUgc291cmNlLgorICAgIHN0YXRpYyBXYWxsVGltZSBm
cm9tUmF3RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFdhbGxUaW1lIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXYWxsVGltZSBu
b3coKTsKKyAgICAKKyAgICBzdGF0aWMgV2FsbFRpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9t
UmF3RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7IH0KKyAg
ICAKKyAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25k
cyhtX3ZhbHVlKTsgfQorICAgIAorICAgIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBj
b25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNU
aW1lIGFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBX
YWxsVGltZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBmcm9tUmF3RG91YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAg
CisgICAgV2FsbFRpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAg
fQorICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0
ZWQgYXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0
aW9ucy4gU28sIHdlIGFsbG93IGl0LgorICAgIFdhbGxUaW1lIG9wZXJhdG9yLSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAg
IAorICAgIFdhbGxUaW1lJiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBXYWxsVGlt
ZSYgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlz
ID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oV2Fs
bFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVl
IC0gb3RoZXIubV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShXYWxs
VGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVy
Lm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShXYWxsVGltZSBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFdhbGxUaW1lIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPihXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcjw9KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj49KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUg
Pj0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNsZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAw
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXYWxsVGltZTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293673</attachid>
            <date>2016-11-02 10:46:49 -0700</date>
            <delta_ts>2016-11-03 12:35:16 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66126</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkocmV2aXNpb24gMjA4MjM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsOCBAQCBJQ1N0YXRzOjpJQ1N0YXRzKCkKICAgICAgICAgW3RoaXNdICgp
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvclNlY29uZHMobV9s
b2NrLCAxLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3Nob3VsZFN0b3A7IH0pOworICAg
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRGb3IoCisgICAgICAgICAgICAgICAgICAgIG1f
bG9jaywgU2Vjb25kcygxKSwgW3RoaXNdICgpIC0+IGJvb2wgeyByZXR1cm4gbV9zaG91bGRTdG9w
OyB9KTsKICAgICAgICAgICAgICAgICBpZiAobV9zaG91bGRTdG9wKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCShyZXZpc2lvbiAyMDgyMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAzLDggKzMwMyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRv
bWljc0Z1bmMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICB9CiAgICAgCi0gICAgZG91YmxlIHRpbWVvdXRJbk5hbm9zZWNvbmRzID0gdGltZW91dElu
TWlsbGlzZWNvbmRzICogMTAwMCAqIDEwMDA7Ci0KKyAgICBTZWNvbmRzIHRpbWVvdXQgPSBTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7CisgICAgCiAgICAg
Ly8gVGhpcyBjb3ZlcnMgdGhlIHByb3Bvc2VkIHJ1bGU6CiAgICAgLy8KICAgICAvLyA0LiBJZiB0
aW1lb3V0IGlzIG5vdCBwcm92aWRlZCBvciBpcyB1bmRlZmluZWQgdGhlbiBsZXQgdCBiZSAraW5m
LiBPdGhlcndpc2U6CkBAIC0zMTMsMzEgKzMxMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jCiAgICAgLy8KICAgICAvLyBleGVjLT5hcmd1bWVudCgzKSByZXR1
cm5zIHVuZGVmaW5lZCBpZiBpdCdzIG5vdCBwcm92aWRlZCBhbmQgVG9OdW1iZXIodW5kZWZpbmVk
KSByZXR1cm5zIE5hTiwKICAgICAvLyBzbyBOYU4gaXMgdGhlIG9ubHkgc3BlY2lhbCBjYXNlLgot
ICAgIGlmICh0aW1lb3V0SW5OYW5vc2Vjb25kcyA9PSB0aW1lb3V0SW5OYW5vc2Vjb25kcykKLSAg
ICAgICAgdGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om1heCgwLiwgdGltZW91dEluTmFub3Nl
Y29uZHMpOworICAgIGlmICh0aW1lb3V0ID09IHRpbWVvdXQpCisgICAgICAgIHRpbWVvdXQgPSBz
dGQ6Om1heChTZWNvbmRzKDApLCB0aW1lb3V0KTsKICAgICBlbHNlCi0gICAgICAgIHRpbWVvdXRJ
bk5hbm9zZWNvbmRzID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwot
ICAgIAotICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGlzIGEgcGlsZSBvZiBub25zZW5zZSwgYnV0
IGl0J3MgYWxsIG5lZWRlZCBiZWNhdXNlIG9mIGNvcm5lciBjYXNlcwotICAgIC8vIGluc2lkZSBz
dGQ6OmNocm9uby4KLSAgICAvLyBGSVhNRTogU3RvcCB1c2luZyBzdGQ6OmNocm9uby4KLSAgICAK
LSAgICBQYXJraW5nTG90OjpDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0OwotICAgIGlmICh0aW1l
b3V0SW5OYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6
OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgIGVsc2UgewotICAgICAgICBzdGQ6OmNocm9ubzo6bmFu
b3NlY29uZHMgcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aW1lb3V0SW5OYW5vc2Vjb25kcykpOwotICAg
ICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzOjp6ZXJv
KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6Om5vdygpOwotICAg
ICAgICBlbHNlIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBQYXJraW5nTG90OjpDbG9jazo6ZHVyYXRp
b246Om1heCgpKQotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1l
X3BvaW50OjptYXgoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQYXJraW5nTG90OjpD
bG9jazo6ZHVyYXRpb24gbXlSZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PFBhcmtpbmdMb3Q6OkNsb2NrOjpkdXJhdGlvbj4ocmVsYXRp
dmVUaW1lb3V0KTsKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCkgKyBteVJlbGF0aXZlVGltZW91dDsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgdGltZW91
dCA9IFNlY29uZHM6OmluZmluaXR5KCk7CiAgICAgCiAgICAgYm9vbCBkaWRQYXNzVmFsaWRhdGlv
biA9IGZhbHNlOwogICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcmVzdWx0ID0gUGFya2luZ0xv
dDo6cGFya0NvbmRpdGlvbmFsbHkoCkBAIC0zNDcsNyArMzI2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuYwogICAgICAgICAgICAgcmV0dXJuIGRpZFBhc3NWYWxp
ZGF0aW9uOwogICAgICAgICB9LAogICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgIHRpbWVvdXQp
OworICAgICAgICBNb25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVvdXQpOwogICAgIGNvbnN0IGNo
YXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQogICAgICAgICBy
ZXN1bHRTdHJpbmcgPSAibm90LWVxdWFsIjsKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4MjM0KQorKysgU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTYgQEAK
IAkJMEY0M0Q4RjIxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RjAxREI1QUREQzAw
MTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovOyB9OwogCQkwRjQ1NzA0MzFCRTVCNThGMDA2
MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLzsg
fTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDQ0MUJFODM0NDEwMDYy
QTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNjZCMjhBMURDOTdCQUIwMDRBMUQzRiAv
KiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi87IH07CisJ
CTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAv
KiBDbG9ja1R5cGUuaCAqLzsgfTsKKwkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwICovOyB9Owor
CQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODMxREM5N0JBQjAwNEEx
RDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLzsgfTsKKwkJMEY2NkIyOEUxREM5N0JBQjAwNEExRDNG
IC8qIFNlY29uZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovOyB9OworCQkw
RjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODUxREM5N0JBQjAwNEExRDNGIC8qIFNl
Y29uZHMuaCAqLzsgfTsKKwkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2QjI4NjFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOTExREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI5MjFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODgxREM5
N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLzsgfTsKKwkJMEY2NkIyOTMxREM5N0JBQjAw
NEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLzsgfTsK
IAkJMEY3MjVDQUMxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBQjFDNTA0NjE2MDBBRDk0M0Eg
LyogUmFuZ2VTZXQuaCAqLzsgfTsKIAkJMEY3QzVGQjYxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RC
aXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3QzVGQjUxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9Owog
CQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0
NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CkBAIC0zNzIsNiArMzgyLDE2IEBACiAJCTBGNDNE
OEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnViYmxlU29ydC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb2NrVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAv
KiBDbG9ja1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xvY2tUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQz
RiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1vbm90b25pY1RpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2
QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNb25vdG9uaWNUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY29uZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNvbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8q
IFdhbGxUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhbGxU
aW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODkxREM5N0JBQjAw
NEExRDNGIC8qIFdhbGxUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
bGxUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzI1Q0FCMUM1MDQ2MTYw
MEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
YW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdDNUZCNTFEODg1Q0Yy
MDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NjMsNiArODgzLDggQEAKIAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4
OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZGIC8q
IENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThBNDcyNkIxNTFBODI1QTAwNDEyM0ZGIC8q
IENoZWNrZWRCb29sZWFuLmggKi8sCisJCQkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENs
b2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovLAogCQkJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBDb21tYVByaW50ZXIuaCAq
LywKIAkJCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3Bw
ICovLAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5o
ICovLApAQCAtOTQ2LDYgKzk2OCw4IEBACiAJCQkJQThBNDcyQ0QxNTFBODI1QjAwNDEyM0ZGIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCUE4QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBN
ZXRhQWxsb2NhdG9yLmggKi8sCiAJCQkJQThBNDcyQ0YxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFB
bGxvY2F0b3JIYW5kbGUuaCAqLywKKwkJCQkwRjY2QjI4MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5jcHAgKi8sCisJCQkJMEY2NkIyODMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4RkQgLyogTmFrZWRQdHIu
aCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2ZXJEZXN0cm95ZWQuaCAq
LywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8sCkBAIC0xMDA3
LDYgKzEwMzEsOCBAQAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBh
aXJNYWMubW0gKi8sCiAJCQkJMUEzNTI0QUExRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggKi8s
CiAJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAorCQkJ
CTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCAqLywKKwkJCQkwRjY2QjI4
NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgyNUIw
MDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVCMDA0
MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1QjAw
NDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTA0Myw2ICsxMDY5LDggQEAKIAkJCQlBOEE0NzMz
NjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwICovLAogCQkJCUE4QTQ3
MzNFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oICovLAogCQkJCUE4
QTQ3MzNGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oICovLAorCQkJCTBGNjZC
Mjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICovLAor
CQkJCTBGNjZCMjg3MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aCAqLywKIAkJCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8s
CiAJCQkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLywKIAkJCQkx
NDlFRjE2MjE2QkJGRTBEMDAwQTQzMzEgLyogVHJpU3RhdGUuaCAqLywKQEAgLTEwNTQsNiArMTA4
Miw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJ
CUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0
NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCisJCQkJMEY2NkIyODgxREM5N0JB
QjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLywKKwkJCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuaCAqLywKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vh
a1B0ci5oICovLAogCQkJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmgg
Ki8sCiAJCQkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCAqLywKQEAg
LTEyNTksNyArMTI4OSw5IEBACiAJCQkJMEZCMTRFMTkxODBGQTIxODAwOUI2QjREIC8qIEJhZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUIxODEwRTFEQzAwOUI2QjREIC8qIEJhZ1RvSGFz
aE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODEzNDAxMzkxNUIwOTJGRDAwMUZGMEI4IC8qIEJh
c2U2NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEYxREM5N0JBQjAwNEExRDNGIC8qIFNl
Y29uZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0E5MTUxQTgyNUIwMDQxMjNGRiAvKiBi
aWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOTExREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDcz
QUIxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NTIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDczOEExNTFBODI1QjAwNDEyM0ZGIC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMzQwLDYgKzEzNzIsNyBAQAogCQkJCTkzQUM5MUE4MTg5NDJGQzQwMDI0NDkzOSAvKiBMQ2hh
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRl
Y29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MERBMDg1MTc5OUYwNEQwMDUyOUE5QiAvKiBM
aXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOTMxREM5N0JBQjAwNEExRDNGIC8q
IFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFMTE1MUE4MjVCMDA0MTIzRkYg
LyogTGlzdEhhc2hTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTE2NDZCMUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFMzE1MUE4MjVCMDA0MTIz
RkYgLyogTG9ja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzOTksNiArMTQzMiw3IEBACiAJCQkJ
MTRGM0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMzUyNEFCMUQ2M0EyRkYwMDMxNzI5QiAvKiBTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEQxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1Rp
bWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29w
ZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDk4QjAyMUMxNkE0RjkwMDA4Nzc5NyAv
KiBTZWN1cml0eVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNDY2LDYgKzE1MDAs
NyBAQAogCQkJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDQ2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRh
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI4QjFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTczRTAyNTE5RENCN0FCMDA1ODBENUMgLyogWFBD
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZFQjk1RTBEMTEgLyogSW5k
ZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM5MTZCOTc1RjAyRjRGN0U4QjRBQjEyRCAvKiBJ
bmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTgxLDYgKzE2MTYsNyBAQAogCQkJCUE4QTQ3
M0FBMTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQ1MTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4QTQ3MzhCMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRWZWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQ0VFMjIwMTFDRUE3NTUxMDAwQzIzOTYg
LyogQmxvY2tPYmpDRXhjZXB0aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FDMTUx
QTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDc0NjAxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9yRGVmYXVsdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTE2NDEsNiArMTY3Nyw5IEBACiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8q
IFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0MzE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjY2QjI4QTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdW
aWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQ1MThBMUYxNjkwMEQwRDZBMSAvKiBT
dHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNjUyLDYgKzE2OTEsNyBAQAogCQkJ
CUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEUxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhDMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgx
QzhGMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFDMTgxQzkxMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3ZpZGVyTGF0aW4xLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkzMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3Zp
ZGVyVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0
aWNUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVh
ZC5jcHAJKHJldmlzaW9uIDIwODIzNCkKKysrIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVh
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw5ICsxNjIsOCBAQCB2b2lkIEF1dG9tYXRpY1Ro
cmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0b3AobG9ja2VyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpXYWl0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNodXQgdGhlIHRocmVhZCBkb3duIGFmdGVyIG9uZSBzZWNvbmQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgdGltZW91dCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsg
MTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXdva2VuQnlOb3RpZnkgPQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5tX2NvbmRpdGlvbi53YWl0VW50aWxN
b25vdG9uaWNDbG9ja1NlY29uZHMoKm1fbG9jaywgdGltZW91dCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRGb3IoKm1fbG9jaywgU2Vj
b25kcygxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3b2tlbkJ5Tm90aWZ5KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkdvaW5nIHRvIHNsZWVwIVxuIik7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xvY2tUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENsb2NrVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxs
OgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3RvbmljIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwor
ZW51bSBjbGFzcyBDbG9ja1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tU
eXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MjM0KQorKysgU291cmNlL1dURi93dGYvQ29u
ZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2lmbmRlZiBXVEZf
Q29uZGl0aW9uX2gKICNkZWZpbmUgV1RGX0NvbmRpdGlvbl9oCiAKLSNpbmNsdWRlIDxjaHJvbm8+
CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgor
I2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiAKQEAgLTQ2LDcgKzQ2LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogLy8gVGhpcyBpcyBhIHN0
cnVjdCB3aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBi
ZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgogLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFi
bGVzLgogc3RydWN0IENvbmRpdGlvbkJhc2UgewotICAgIHR5cGVkZWYgUGFya2luZ0xvdDo6Q2xv
Y2sgQ2xvY2s7CisgICAgLy8gQ29uZGl0aW9uIHdpbGwgYWNjZXB0IGFueSBraW5kIG9mIHRpbWUg
YW5kIGNvbnZlcnQgaXQgaW50ZXJuYWxseSwgYnV0IHRoaXMgdHlwZWRlZiB0ZWxscworICAgIC8v
IHlvdSB3aGF0IGtpbmQgb2YgdGltZSBDb25kaXRpb24gd291bGQgYmUgYWJsZSB0byB1c2Ugd2l0
aG91dCBjb252ZXJzaW9ucy4gSG93ZXZlciwgaWYgeW91CisgICAgLy8gYXJlIHVubGlrZWx5IHRv
IGJlIGFmZmVjdGVkIGJ5IHRoZSBjb3N0IG9mIGNvbnZlcnNpb25zLCBpdCBpcyBiZXR0ZXIgdG8g
dXNlIE1vbm9yb25pY1RpbWUuCisgICAgdHlwZWRlZiBQYXJraW5nTG90OjpUaW1lIFRpbWU7CiAg
ICAgCiAgICAgLy8gV2FpdCBvbiBhIHBhcmtpbmcgcXVldWUgd2hpbGUgcmVsZWFzaW5nIHRoZSBn
aXZlbiBsb2NrLiBJdCB3aWxsIHVubG9jayB0aGUgbG9jayBqdXN0IGJlZm9yZQogICAgIC8vIHBh
cmtpbmcsIGFuZCByZWxvY2sgaXQgdXBvbiB3YWtldXAuIFJldHVybnMgdHJ1ZSBpZiB3ZSB3b2tl
IHVwIGR1ZSB0byBzb21lIGNhbGwgdG8KQEAgLTY0LDEwICs2NywxMCBAQCBzdHJ1Y3QgQ29uZGl0
aW9uQmFzZSB7CiAgICAgLy8gd2hpY2ggbWF5IG5vdCByZWxlYXNlIHRoZSBsb2NrIGZvciBwYXN0
IHRpbWVvdXQuIEJ1dCwgdGhpcyBiZWhhdmlvciBpcyBjb25zaXN0ZW50IHdpdGggT3Blbkdyb3Vw
CiAgICAgLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGltZWR3YWl0KCkuCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWwoTG9ja1R5cGUmIGxvY2ssIENsb2Nr
Ojp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgYm9vbCB3YWl0VW50aWwoTG9ja1R5cGUmIGxvY2ss
IGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKICAgICB7CiAgICAgICAg
IGJvb2wgcmVzdWx0OwotICAgICAgICBpZiAodGltZW91dCA8IENsb2NrOjpub3coKSkgeworICAg
ICAgICBpZiAodGltZW91dCA8IHRpbWVvdXQubm93V2l0aFNhbWVDbG9jaygpKSB7CiAgICAgICAg
ICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAg
IH0gZWxzZSB7CkBAIC04OSw3ICs5Miw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAv
LyBXYWl0IHVudGlsIHRoZSBnaXZlbiBwcmVkaWNhdGUgaXMgc2F0aXNmaWVkLiBSZXR1cm5zIHRy
dWUgaWYgaXQgaXMgc2F0aXNmaWVkIGluIHRoZSBlbmQuCiAgICAgLy8gTWF5IHJldHVybiBlYXJs
eSBkdWUgdG8gdGltZW91dC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgQ2xvY2s6OnRp
bWVfcG9pbnQgdGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgIGJvb2wgd2Fp
dFVudGlsKAorICAgICAgICBMb2NrVHlwZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJiB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCiAgICAgewogICAgICAg
ICB3aGlsZSAoIXByZWRpY2F0ZSgpKSB7CiAgICAgICAgICAgICBpZiAoIXdhaXRVbnRpbChsb2Nr
LCB0aW1lb3V0KSkKQEAgLTEwMCwxNyArMTA0LDIzIEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsK
IAogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJl
dHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0
dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCB0eXBlbmFtZSBEdXJhdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgYm9vbCB3YWl0Rm9yKAot
ICAgICAgICBMb2NrVHlwZSYgbG9jaywgY29uc3QgRHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVv
dXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKKyAgICAgICAgTG9ja1R5cGUmIGxvY2ssIFNl
Y29uZHMgcmVsYXRpdmVUaW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gd2FpdFVudGlsKGxvY2ssIGFic29sdXRlRnJvbVJlbGF0aXZlKHJlbGF0
aXZlVGltZW91dCksIHByZWRpY2F0ZSk7CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywg
TW9ub3RvbmljVGltZTo6bm93KCkgKyByZWxhdGl2ZVRpbWVvdXQsIHByZWRpY2F0ZSk7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgorICAgIGJvb2wgd2FpdEZv
cihMb2NrVHlwZSYgbG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQpCisgICAgeworICAgICAg
ICByZXR1cm4gd2FpdFVudGlsKGxvY2ssIE1vbm90b25pY1RpbWU6Om5vdygpICsgcmVsYXRpdmVU
aW1lb3V0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KICAgICB2
b2lkIHdhaXQoTG9ja1R5cGUmIGxvY2spCiAgICAgewotICAgICAgICB3YWl0VW50aWwobG9jaywg
Q2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpKTsKKyAgICAgICAgd2FpdFVudGlsKGxvY2ssIFRpbWU6
OmluZmluaXR5KCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPgpAQCAtMTIwLDUzICsxMzAsNiBAQCBzdHJ1Y3QgQ29uZGl0aW9uQmFz
ZSB7CiAgICAgICAgICAgICB3YWl0KGxvY2spOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExvY2tUeXBlLCB0eXBlbmFtZSBUaW1lVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2Nr
VHlwZSYgbG9jaywgY29uc3QgVGltZVR5cGUmIHRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAo
dGltZW91dCA9PSBUaW1lVHlwZTo6bWF4KCkpIHsKLSAgICAgICAgICAgIHdhaXQobG9jayk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gd2FpdEZv
ckltcGwobG9jaywgdGltZW91dCAtIFRpbWVUeXBlOjpjbG9jazo6bm93KCkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsV2FsbENs
b2NrU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIGFic29sdXRlVGltZW91dFNlY29uZHMp
Ci0gICAgewotICAgICAgICByZXR1cm4gd2FpdEZvclNlY29uZHNJbXBsKGxvY2ssIGFic29sdXRl
VGltZW91dFNlY29uZHMgLSBjdXJyZW50VGltZSgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbE1vbm90b25pY0Nsb2NrU2Vjb25k
cyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIGFic29sdXRlVGltZW91dFNlY29uZHMpCi0gICAgewot
ICAgICAgICByZXR1cm4gd2FpdEZvclNlY29uZHNJbXBsKGxvY2ssIGFic29sdXRlVGltZW91dFNl
Y29uZHMgLSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Ci0gICAgfQotICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wg
d2FpdEZvclNlY29uZHMoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNv
bmRzLCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCi0gICAgewotICAgICAgICBkb3VibGUgcmVs
YXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzICogKDEwMDAu
MCAqIDEwMDAuMCAqIDEwMDAuMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIShyZWxhdGl2ZVRp
bWVvdXROYW5vc2Vjb25kcyA+IDApKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgaW5z
dGEtdGltZW91dHMgYXMgd2VsbCBhcyBOYU4uCi0gICAgICAgICAgICBsb2NrLnVubG9jaygpOwot
ICAgICAgICAgICAgbG9jay5sb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiBzdGF0aWNf
Y2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIHRpbWVvdXQgaW4gbmFub3NlY29uZHMgY2Fubm90IGJlIGV4cHJl
c3NlZCB1c2luZyBhIDY0LWJpdCBpbnRlZ2VyLCB0aGVuIHdlCi0gICAgICAgICAgICAvLyBtaWdo
dCBhcyB3ZWxsIHdhaXQgZm9yZXZlci4KLSAgICAgICAgICAgIHdhaXQobG9jaywgcHJlZGljYXRl
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBhdXRvIHJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6bmFub3Nl
Y29uZHMoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMpKTsK
LQotICAgICAgICByZXR1cm4gd2FpdEZvcihsb2NrLCByZWxhdGl2ZVRpbWVvdXQsIHByZWRpY2F0
ZSk7Ci0gICAgfQotCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGV4dHJlbWVseSBm
YXN0IHdoZW4gbm9ib2R5IGlzIHdhaXRpbmcuIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHJ5IHRv
CiAgICAgLy8gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZC4gVGhpcyByZXR1cm5zIHRydWUgaWYg
c29tZW9uZSB3YXMgYWN0dWFsbHkgd29rZW4gdXAuCiAgICAgYm9vbCBub3RpZnlPbmUoKQpAQCAt
MjA3LDU4ICsxNzAsOCBAQCBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7CiAgICAgfQogICAgIAogcHJv
dGVjdGVkOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdEZv
clNlY29uZHNJbXBsKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgcmVsYXRpdmVUaW1lb3V0U2Vjb25k
cykKLSAgICB7Ci0gICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJl
bGF0aXZlVGltZW91dFNlY29uZHMgKiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4K
LSAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2
ZVRpbWVvdXROYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBp
biBuYW5vc2Vjb25kcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIs
IHRoZW4gd2UKLSAgICAgICAgICAgIC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAg
ICAgICAgICAgd2FpdChsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBhdXRvIHJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBz
dGQ6OmNocm9ubzo6bmFub3NlY29uZHMoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVsYXRpdmVUaW1l
b3V0TmFub3NlY29uZHMpKTsKLQotICAgICAgICByZXR1cm4gd2FpdEZvckltcGwobG9jaywgcmVs
YXRpdmVUaW1lb3V0KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5
cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZT4KLSAgICBib29sIHdhaXRGb3JJbXBsKExvY2tUeXBl
JiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0aXZlVGltZW91dCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRpdmUocmVsYXRpdmVU
aW1lb3V0KSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRHVyYXRpb25UeXBlPgot
ICAgIENsb2NrOjp0aW1lX3BvaW50IGFic29sdXRlRnJvbVJlbGF0aXZlKGNvbnN0IER1cmF0aW9u
VHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAgIHsKLSAgICAgICAgaWYgKHJlbGF0aXZlVGltZW91
dCA8IER1cmF0aW9uVHlwZTo6emVybygpKQotICAgICAgICAgICAgcmV0dXJuIENsb2NrOjp0aW1l
X3BvaW50OjptaW4oKTsKLQotICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0ID4gQ2xvY2s6OmR1
cmF0aW9uOjptYXgoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBoaWdobHkgdW5saWtlbHku
IEJ1dCBpZiBpdCBoYXBwZW5zLCB3ZSB3YW50IHRvIG5vdCBkbyBhbnl0aGluZyBkdW1iLiBTbGVl
cGluZwotICAgICAgICAgICAgLy8gd2l0aG91dCBhIHRpbWVvdXQgc2VlbXMgc2Vuc2libGUgd2hl
biB0aGUgdGltZW91dCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoYW4gd2hhdCBjYW4gYmUKLSAgICAg
ICAgICAgIC8vIGV4cHJlc3NlZCB1c2luZyBzdGVhZHlfY2xvY2suCi0gICAgICAgICAgICByZXR1
cm4gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBDbG9jazo6ZHVyYXRpb24gbXlSZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8Q2xvY2s6OmR1cmF0aW9uPihyZWxhdGl2ZVRpbWVvdXQpOwot
Ci0gICAgICAgIHJldHVybiBDbG9jazo6bm93KCkgKyBteVJlbGF0aXZlVGltZW91dDsKLSAgICB9
Ci0KICAgICBBdG9taWM8Ym9vbD4gbV9oYXNXYWl0ZXJzOwotfTsgICAgCit9OwogCiBjbGFzcyBD
b25kaXRpb24gOiBwdWJsaWMgQ29uZGl0aW9uQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29uZGl0aW9uKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHJldmlzaW9uIDIwODIz
NCkKKysrIFNvdXJjZS9XVEYvd3RmL0N1cnJlbnRUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQwLDcgKzM0MCw3IEBAIHZvaWQgc2xlZXAoZG91YmxlIHZhbHVlKQogICAgIExvY2sgZmFrZUxv
Y2s7CiAgICAgQ29uZGl0aW9uIGZha2VDb25kaXRpb247CiAgICAgTG9ja0hvbGRlciBmYWtlTG9j
a2VyKGZha2VMb2NrKTsKLSAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Nsb2Nr
U2Vjb25kcyhmYWtlTG9jaywgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyB2YWx1ZSk7
CisgICAgZmFrZUNvbmRpdGlvbi53YWl0Rm9yKGZha2VMb2NrLCBTZWNvbmRzKHZhbHVlKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTW9ub3RvbmljVGlt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9ub3RvbmljVGlt
ZS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5o
IgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxU
aW1lLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitNb25vdG9uaWNUaW1lIE1vbm90b25pY1RpbWU6
Om5vdygpCit7CisgICAgTW9ub3RvbmljVGltZSByZXN1bHQ7CisgICAgcmVzdWx0Lm1fdmFsdWUg
PSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXYWxsVGltZSBNb25vdG9uaWNUaW1lOjphcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIFdhbGxUaW1lOjpub3coKTsKK30KKwordm9pZCBN
b25vdG9uaWNUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJNb25vdG9uaWMoIiwgbV92YWx1ZSwgIiBzZWMpIik7Cit9CisKK3ZvaWQgTW9ub3Rvbmlj
VGltZTo6c2xlZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgqdGhp
cykuc2xlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvTW9ub3RvbmljVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90
b25pY1RpbWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Q2xvY2tUeXBlLmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIFdhbGxUaW1lOworY2xhc3MgUHJpbnRTdHJlYW07CisKKy8vIFRoZSBjdXJyZW50
IHRpbWUgYWNjb3JkaW5nIHRvIGEgbW9ub3RvbmljIGNsb2NrLiBNb25vdG9uaWMgY2xvY2tzIGRv
bid0IGdvIGJhY2t3YXJkcyBhbmQKKy8vIHBvc3NpYmx5IGRvbid0IGNvdW50IGRvd250aW1lLiBU
aGlzIHVzZXMgZmxvYXRpbmcgcG9pbnQgaW50ZXJuYWxseSBzbyB0aGF0IHlvdSBjYW4gcmVhc29u
IGFib3V0CisvLyBpbmZpbml0eSBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgYXJpc2UgaW4gbWF0aC4g
SXQncyBhY2NlcHRhYmxlIHRvIHVzZSB0aGlzIHRvIHdyYXAgTmFOIHRpbWVzLAorLy8gbmVnYXRp
dmUgdGltZXMsIGFuZCBpbmZpbml0ZSB0aW1lcywgc28gbG9uZyBhcyB0aGV5IGFyZSBhbGwgcmVs
YXRpdmUgdG8gdGhlIHNhbWUgY2xvY2suCisvLyBTcGVjaWZpY2FsbHksIE1vbm90b25pY1RpbWUg
c2hvdWxkIGJlIHVzZWQgaW4gYWdyZWVtZW50IHdpdGggdGhlIHByaW5jaXBsZSB0aGF0CisvLyBN
b25vdG9uaWNUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgaXMgdGhlIHNh
bWUgYXMKKy8vIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkuCitjbGFzcyBNb25v
dG9uaWNUaW1lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ2xvY2tUeXBlIGNsb2NrVHlw
ZSA9IENsb2NrVHlwZTo6TW9ub3RvbmljOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGVwb2No
LiBTbywgeC5zZWNvbmRzU2luY2VFcG9jaCgpIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB4IC0gTW9u
b3RvbmljVGltZSgpLgorICAgIE1vbm90b25pY1RpbWUoKSB7IH0KKyAgICAKKyAgICAvLyBDYWxs
IHRoaXMgaWYgeW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgZG91YmxlIHJlcHJlc2VudHMgdGlt
ZSBhY2NvcmRpbmcgdG8KKyAgICAvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
LiBJdCBtdXN0IGJlIGluIHNlY29uZHMgYW5kIGl0IG11c3QgYmUgZnJvbSB0aGUgc2FtZSB0aW1l
CisgICAgLy8gc291cmNlLgorICAgIHN0YXRpYyBNb25vdG9uaWNUaW1lIGZyb21SYXdEb3VibGUo
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgTW9ub3RvbmljVGltZSBub3co
KTsKKyAgICAKKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBpbmZpbml0eSgpIHsgcmV0dXJuIGZy
b21SYXdEb3VibGUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsgfQor
CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMo
bV92YWx1ZSk7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRlTW9ub3Rvbmlj
VGltZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdh
bGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgTW9u
b3RvbmljVGltZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBmcm9tUmF3RG91YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91YmxlKG1fdmFsdWUgLSBvdGhlci52YWx1ZSgp
KTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNjYWxhciBhbmQgc2NhbGFycyBjYW4g
YmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20gYWxnZWJyYWljCisgICAgLy8gdHJh
bnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRv
ci0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUoLW1fdmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhl
cikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQor
ICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAg
U2Vjb25kcyBvcGVyYXRvci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj09KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yIT0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I+KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8
PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE1v
bm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1vbm90b25pY1RpbWU7
CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAyMDgyMzQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9QYXJraW5nTG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBAQCBw
dWJsaWM6CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXI7CiAgICAgCi0g
ICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBw
YXJraW5nQ29uZGl0aW9uOworICAgIE11dGV4IHBhcmtpbmdMb2NrOworICAgIFRocmVhZENvbmRp
dGlvbiBwYXJraW5nQ29uZGl0aW9uOwogCiAgICAgY29uc3Qgdm9pZCogYWRkcmVzcyB7IG51bGxw
dHIgfTsKICAgICAKQEAgLTU2NCw3ICs1NjQsNyBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBQYXJrCiAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICBjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbCgpPiYgdmFsaWRhdGlvbiwKICAgICBjb25zdCBTY29wZWRMYW1iZGE8dm9p
ZCgpPiYgYmVmb3JlU2xlZXAsCi0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpCiB7CiAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwYXJraW5n
LlxuIikpOwpAQCAtNTkyLDIwICs1OTIsMTcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBh
cmtSZXN1bHQgUGFyawogICAgIAogICAgIGJvb2wgZGlkR2V0RGVxdWV1ZWQ7CiAgICAgewotICAg
ICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2luZ0xvY2sp
OwotICAgICAgICB3aGlsZSAobWUtPmFkZHJlc3MgJiYgQ2xvY2s6Om5vdygpIDwgdGltZW91dCkg
ewotICAgICAgICAgICAgLy8gRmFsbGluZyBiYWNrIHRvIHdhaXQoKSB3b3JrcyBhcm91bmQgYSBi
dWcgaW4gbGlic3RkYysrIGltcGxlbWVudGF0aW9uIG9mIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxl
LiBTZWU6Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDgwMjcKLSAgICAgICAgICAgIC8vIC0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6
aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTg5MzEKLSAgICAgICAgICAgIGlmICh0aW1lb3V0ID09IENs
b2NrOjp0aW1lX3BvaW50OjptYXgoKSkKLSAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRp
dGlvbi53YWl0KGxvY2tlcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWUt
PnBhcmtpbmdDb25kaXRpb24ud2FpdF91bnRpbChsb2NrZXIsIHRpbWVvdXQpOworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgd2hpbGUgKG1lLT5h
ZGRyZXNzICYmIHRpbWVvdXQubm93V2l0aFNhbWVDbG9jaygpIDwgdGltZW91dCkgeworICAgICAg
ICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24udGltZWRXYWl0KAorICAgICAgICAgICAgICAgIG1l
LT5wYXJraW5nTG9jaywgdGltZW91dC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQmVjYXVzZSBv
ZiB0aGUgYWJvdmUsIHdlIGRvIHRoaXMgdGhpbmcsIHdoaWNoIGlzIGhpbGFyaW91c2x5IGF3ZnVs
LCBidXQgZW5zdXJlcyB0aGF0IHRoZSB3b3JzdCBjYXNlIGlzCi0gICAgICAgICAgICAvLyBhIENQ
VS1lYXRpbmcgc3BpbiBidXQgbm90IGEgZGVhZGxvY2suCi0gICAgICAgICAgICBsb2NrZXIudW5s
b2NrKCk7Ci0gICAgICAgICAgICBsb2NrZXIubG9jaygpOworICAgICAgICAgICAgLy8gSXQncyBw
b3NzaWJsZSBmb3IgdGhlIE9TIHRvIGRlY2lkZSBub3QgdG8gd2FpdC4gSWYgaXQgZG9lcyB0aGF0
IHRoZW4gaXQgd2lsbCBhbHNvCisgICAgICAgICAgICAvLyBkZWNpZGUgbm90IHRvIHJlbGVhc2Ug
dGhlIGxvY2suIElmIHRoZXJlJ3MgYSBidWcgaW4gdGhlIHRpbWUgbWF0aCwgdGhlbiB0aGlzIGNv
dWxkCisgICAgICAgICAgICAvLyByZXN1bHQgaW4gYSBkZWFkbG9jay4gRmxhc2hpbmcgdGhlIGxv
Y2sgbWVhbnMgdGhhdCBhdCB3b3JzdCBpdCdzIGp1c3QgYSBDUFUtZWF0aW5nCisgICAgICAgICAg
ICAvLyBzcGluLgorICAgICAgICAgICAgbWUtPnBhcmtpbmdMb2NrLnVubG9jaygpOworICAgICAg
ICAgICAgbWUtPnBhcmtpbmdMb2NrLmxvY2soKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
IW1lLT5hZGRyZXNzIHx8IG1lLT5hZGRyZXNzID09IGFkZHJlc3MpOwogICAgICAgICBkaWRHZXRE
ZXF1ZXVlZCA9ICFtZS0+YWRkcmVzczsKQEAgLTY0MCwxNCArNjM3LDE0IEBAIE5FVkVSX0lOTElO
RSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5v
IG1hdHRlciB3aGF0LCBtZS0+YWRkcmVzcyBpcyBudWxsIGFmdGVyIHRoaXMgcG9pbnQuCiAgICAg
ewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2lu
Z0xvY2spOworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKICAg
ICAgICAgaWYgKCFkaWREZXF1ZXVlKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IGRl
cXVldWUgb3Vyc2VsdmVzLCB0aGVuIHNvbWVvbmUgZWxzZSBkaWQuIFRoZXkgd2lsbCBzZXQgb3Vy
IGFkZHJlc3MgdG8KICAgICAgICAgICAgIC8vIG51bGwuIFdlIGRvbid0IHdhbnQgdG8gcHJvY2Vl
ZCB1bnRpbCB0aGV5IGRvIHRoaXMsIGJlY2F1c2Ugb3RoZXJ3aXNlLCB0aGV5IG1heSBzZXQKICAg
ICAgICAgICAgIC8vIG91ciBhZGRyZXNzIHRvIG51bGwgaW4gc29tZSBkaXN0YW50IGZ1dHVyZSB3
aGVuIHdlJ3JlIGFscmVhZHkgdHJ5aW5nIHRvIHdhaXQgZm9yCiAgICAgICAgICAgICAvLyBvdGhl
ciB0aGluZ3MuCiAgICAgICAgICAgICB3aGlsZSAobWUtPmFkZHJlc3MpCi0gICAgICAgICAgICAg
ICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworICAgICAgICAgICAgICAgIG1l
LT5wYXJraW5nQ29uZGl0aW9uLndhaXQobWUtPnBhcmtpbmdMb2NrKTsKICAgICAgICAgfQogICAg
ICAgICBtZS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgfQpAQCAtNjk1LDExICs2OTIsMTEgQEAg
TkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCBQYQogICAgIEFTU0VSVCh0aHJl
YWREYXRhLT5hZGRyZXNzKTsKICAgICAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8
c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKICAgICAgICAgdGhyZWFk
RGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgICAgIHRocmVhZERhdGEtPnRva2VuID0gMDsK
ICAgICB9Ci0gICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7Cisg
ICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC03NDEsMTEgKzczOCwxMSBAQCBORVZFUl9JTkxJTkUgdm9pZCBQYXJraW5n
TG90Ojp1bnBhcmtPbmVJCiAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgIAog
ICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFk
RGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkRGF0
YS0+cGFya2luZ0xvY2spOwogICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsK
ICAgICB9CiAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZERhdGEgbWF5IGRpZS4gR29v
ZCB0aGluZyB3ZSBoYXZlIGEgUmVmUHRyPD4gb24gaXQuCi0gICAgdGhyZWFkRGF0YS0+cGFya2lu
Z0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlv
bi5zaWduYWwoKTsKIH0KIAogTkVWRVJfSU5MSU5FIHVuc2lnbmVkIFBhcmtpbmdMb3Q6OnVucGFy
a0NvdW50KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHVuc2lnbmVkIGNvdW50KQpAQCAtNzc5LDEwICs3
NzYsMTAgQEAgTkVWRVJfSU5MSU5FIHVuc2lnbmVkIFBhcmtpbmdMb3Q6OnVucGFyawogICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyAiLCBS
YXdQb2ludGVyKHRocmVhZERhdGEuZ2V0KCkpLCAiIHdpdGggYWRkcmVzcyAiLCBSYXdQb2ludGVy
KHRocmVhZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7CiAgICAgICAgIEFTU0VSVCh0aHJlYWREYXRh
LT5hZGRyZXNzKTsKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6
Om11dGV4PiBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKICAgICAgICAgICAgIHRo
cmVhZERhdGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIHRocmVhZERh
dGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICB0aHJlYWREYXRhLT5w
YXJraW5nQ29uZGl0aW9uLnNpZ25hbCgpOwogICAgIH0KIAogICAgIGlmICh2ZXJib3NlKQpJbmRl
eDogU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuaAkocmV2aXNpb24gMjA4MjM0KQorKysgU291cmNlL1dURi93dGYvUGFy
a2luZ0xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpZm5kZWYgV1RG
X1BhcmtpbmdMb3RfaAogI2RlZmluZSBXVEZfUGFya2luZ0xvdF9oCiAKLSNpbmNsdWRlIDxjaHJv
bm8+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtMzksNyArMzksMTUgQEAgY2xhc3MgUGFya2luZ0xvdCB7CiAgICAgUGFya2luZ0xv
dChjb25zdCBQYXJraW5nTG90JikgPSBkZWxldGU7CiAKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHN0
ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2sgQ2xvY2s7CisgICAgLy8gUGFya2luZ0xvdCB3aWxsIGFj
Y2VwdCBhbnkga2luZCBvZiB0aW1lIGFuZCBjb252ZXJ0IGl0IGludGVybmFsbHksIGJ1dCB0aGlz
IHR5cGVkZWYgdGVsbHMKKyAgICAvLyB5b3Ugd2hhdCBraW5kIG9mIHRpbWUgUGFya2luZ0xvdCB3
b3VsZCBiZSBhYmxlIHRvIHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBJdCdzIHNhZCB0aGF0Cisg
ICAgLy8gdGhpcyBpcyBXYWxsVGltZSBub3QgTW9ub3RvbmljVGltZSwgYnV0IHRoYXQncyBqdXN0
IGhvdyBPUyB3YWl0IGZ1bmN0aW9ucyB3b3JrLiBIb3dldmVyLAorICAgIC8vIGJlY2F1c2UgUGFy
a2luZ0xvdCBldmFsdWF0ZXMgd2hldGhlciBpdCBzaG91bGQgd2FpdCBieSBjaGVja2luZyBpZiB5
b3VyIHRpbWUgaGFzIHBhc3NlZAorICAgIC8vIHVzaW5nIHdoYXRldmVyIGNsb2NrIHlvdSB1c2Vk
LCBzcGVjaWZ5aW5nIHRpbWVvdXRzIGluIE1vbm90b25pY1RpbWUgaXMgc2VtYW50aWNhbGx5IGJl
dHRlci4KKyAgICAvLyBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIgc2V0cyBoaXMgY29tcHV0ZXIn
cyBjbG9jayBiYWNrIGR1cmluZyB0aGUgdGltZSB0aGF0IHlvdSB3YW50ZWQgdG8KKyAgICAvLyB3
YWl0IGZvciBvbmUgc2Vjb25kLCBhbmQgeW91IHNwZWNpZmllZCB0aGUgdGltZW91dCB1c2luZyB0
aGUgTW9ub3RvbmljVGltZSwgdGhlbiBQYXJraW5nTG90CisgICAgLy8gd2lsbCBiZSBzbWFydCBl
bm91Z2ggdG8ga25vdyB0aGF0IHlvdXIgb25lIHNlY29uZCBoYXMgZWxhcHNlZC4KKyAgICB0eXBl
ZGVmIFdhbGxUaW1lIFRpbWU7CiAgICAgCiAgICAgLy8gUGFya3MgdGhlIHRocmVhZCBpbiBhIHF1
ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51
bGwuIFRoZQogICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVkcyBpZiB0aGUgdmFsaWRhdGlvbiBm
dW5jdGlvbiByZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZC4KQEAgLTY4
LDcgKzc2LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAg
ICBjb25zdCBWYWxpZGF0aW9uRnVuY3RvciYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgQmVm
b3JlU2xlZXBGdW5jdG9yJiBiZWZvcmVTbGVlcCwKLSAgICAgICAgQ2xvY2s6OnRpbWVfcG9pbnQg
dGltZW91dCkKKyAgICAgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHBhcmtDb25kaXRpb25hbGx5SW1wbCgKICAgICAgICAg
ICAgIGFkZHJlc3MsCkBAIC04OSw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWQ7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgW10g
KCkgeyB9LAotICAgICAgICAgICAgQ2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpKTsKKyAgICAgICAg
ICAgIFRpbWU6OmluZmluaXR5KCkpOwogICAgIH0KIAogICAgIC8vIFVucGFya2luZyBzdGF0dXMg
Z2l2ZW4gdG8geW91IGFueXRpbWUgeW91IHVucGFya09uZSgpLgpAQCAtMTU4LDcgKzE2Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgICAgIGNvbnN0IFNj
b3BlZExhbWJkYTxib29sKCk+JiB2YWxpZGF0aW9uLAogICAgICAgICBjb25zdCBTY29wZWRMYW1i
ZGE8dm9pZCgpPiYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVv
dXQpOworICAgICAgICBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpOwog
ICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1bnBhcmtPbmVJbXBsKAog
ICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBTY29wZWRMYW1iZGE8aW50cHRyX3Qo
VW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNrKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlY29uZHMuaCIKKworI2luY2x1ZGUgIkN1
cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1ZGUgIlByaW50
U3RyZWFtLmgiCisjaW5jbHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisjaW5jbHVk
ZSAiV2FsbFRpbWUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dhbGxUaW1lIFNlY29uZHM6Om9w
ZXJhdG9yKyhXYWxsVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhp
czsKK30KKworTW9ub3RvbmljVGltZSBTZWNvbmRzOjpvcGVyYXRvcisoTW9ub3RvbmljVGltZSBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKworVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIFNlY29uZHM6Om9wZXJhdG9yKyhjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBvdGhlciArICp0aGlzOworfQor
CitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvci0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3RG91YmxlKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQorCitNb25vdG9uaWNUaW1lIFNlY29uZHM6Om9wZXJh
dG9yLShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBNb25vdG9uaWNU
aW1lOjpmcm9tUmF3RG91YmxlKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkpOworfQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25kczo6b3BlcmF0b3It
KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG90aGVyLndpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUodmFsdWUoKSAtIG90aGVyLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Cit9CisKK3ZvaWQgU2Vjb25kczo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlLCAiIHNlYyIpOworfQor
Cit2b2lkIFNlY29uZHM6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBXVEY6OnNsZWVwKG1fdmFsdWUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvU2Vjb25k
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9uaWNUaW1lOworY2xh
c3MgUHJpbnRTdHJlYW07CitjbGFzcyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7CitjbGFzcyBX
YWxsVGltZTsKKworY2xhc3MgU2Vjb25kcyB7CitwdWJsaWM6CisgICAgU2Vjb25kcygpIHsgfQor
ICAgIAorICAgIGV4cGxpY2l0IFNlY29uZHMoZG91YmxlIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgZG91YmxlIHNlY29uZHMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisgICAgZG91YmxlIG1pbGxpc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJu
IHNlY29uZHMoKSAqIDEwMDA7IH0KKyAgICBkb3VibGUgbWljcm9zZWNvbmRzKCkgY29uc3QgeyBy
ZXR1cm4gbWlsbGlzZWNvbmRzKCkgKiAxMDAwOyB9CisgICAgZG91YmxlIG5hbm9zZWNvbmRzKCkg
Y29uc3QgeyByZXR1cm4gbWljcm9zZWNvbmRzKCkgKiAxMDAwOyB9CisgICAgCisgICAgc3RhdGlj
IFNlY29uZHMgZnJvbU1pbGxpc2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gU2Vjb25kcyh2YWx1ZSAvIDEwMDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU2Vj
b25kcyBmcm9tTWljcm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmcm9tTWlsbGlzZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBTZWNvbmRzIGZyb21OYW5vc2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gZnJvbU1pY3Jvc2Vjb25kcyh2YWx1ZSAvIDEwMDApOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgU2Vjb25kcyBpbmZpbml0eSgpCisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyhz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9Cisg
ICAgCisgICAgU2Vjb25kcyBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFNlY29uZHMoLXZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCBtYWtlcyBzZW5zZSB0
byBjb25zaWRlciBzY2FsaW5nIGEgZHVyYXRpb24sIGxpa2UsICJJIHdhbnQgdG8gd2FpdCA1IHRp
bWVzIGFzIGxvbmcgYXMKKyAgICAvLyBsYXN0IHRpbWUhIi4KKyAgICBTZWNvbmRzIG9wZXJhdG9y
Kihkb3VibGUgc2NhbGFyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFs
dWUoKSAqIHNjYWxhcik7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3IvKGRvdWJs
ZSBzY2FsYXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpIC8g
c2NhbGFyKTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyByZWFzb25hYmxlIHRvIHRoaW5rIGFi
b3V0IHJhdGlvcyBiZXR3ZWVuIFNlY29uZHMuCisgICAgZG91YmxlIG9wZXJhdG9yLyhTZWNvbmRz
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkgLyBvdGhlci52YWx1
ZSgpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAg
ICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
JiBvcGVyYXRvcio9KGRvdWJsZSBzY2FsYXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyAqIHNjYWxhcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyYgb3BlcmF0b3IvPShk
b3VibGUgc2NhbGFyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLyBzY2Fs
YXI7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBvcGVyYXRv
cisoV2FsbFRpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1l
IG9wZXJhdG9yKyhNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKyhjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUg
b3BlcmF0b3ItKFdhbGxUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3Rv
bmljVGltZSBvcGVyYXRvci0oTW9ub3RvbmljVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KFNlY29u
ZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oU2Vjb25kcyBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I+KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I8PShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KFNl
Y29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhl
ci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2xlZXAoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07
Cit9OworCit9IC8vIG5hbWVzcGFlIFdURgorCit1c2luZyBXVEY6OlNlY29uZHM7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgiCisKKyNpbmNsdWRlICJDb25kaXRpb24uaCIKKyNpbmNsdWRlICJM
b2NrLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5vdyhDbG9j
a1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6
V2FsbDoKKyAgICAgICAgcmV0dXJuIFdhbGxUaW1lOjpub3coKTsKKyAgICBjYXNlIENsb2NrVHlw
ZTo6TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSgpOworfQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlOjpub3dXaXRoU2FtZUNsb2NrKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbm93KGNsb2NrVHlwZSgpKTsKK30KKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlOjp3YWxsVGltZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENs
b2NrVHlwZTo6V2FsbCk7CisgICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3RG91YmxlKG1fdmFs
dWUpOworfQorCitNb25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bW9ub3Rv
bmljVGltZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlw
ZTo6TW9ub3RvbmljKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSht
X3ZhbHVlKTsKK30KKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjphcHByb3hp
bWF0ZVdhbGxUaW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
Q2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUoKTsKKyAgICBjYXNlIENs
b2NrVHlwZTo6TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgpLmFwcHJv
eGltYXRlV2FsbFRpbWUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gV2FsbFRpbWUoKTsKK30KKworTW9ub3RvbmljVGltZSBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2FsbDoKKyAgICAgICAgcmV0
dXJuIHdhbGxUaW1lKCkuYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCk7CisgICAgY2FzZSBDbG9j
a1R5cGU6Ok1vbm90b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3Rvbmlj
VGltZSgpOworfQorCitTZWNvbmRzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3It
KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVM
RUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIFNlY29uZHMo
bV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOworfQorCitib29sIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZTo6b3BlcmF0b3I8KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAg
cmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTo6b3BlcmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7
CisgICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5t
X3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcj49KGNvbnN0IFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09
IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIubV92YWx1ZTsKK30K
Kwordm9pZCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiKCIsIG1fdmFsdWUsICIgc2VjKSIpOwor
fQorCit2b2lkIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXAoKSBjb25zdAoreworICAg
IExvY2sgZmFrZUxvY2s7CisgICAgQ29uZGl0aW9uIGZha2VDb25kaXRpb247CisgICAgTG9ja0hv
bGRlciBmYWtlTG9ja2VyKGZha2VMb2NrKTsKKyAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbChm
YWtlTG9jaywgKnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK2NsYXNzIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSB7CitwdWJsaWM6CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCkg
eyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKFdhbGxUaW1lIHRpbWUpCisg
ICAgICAgIDogbV92YWx1ZSh0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkKKyAgICAg
ICAgLCBtX3R5cGUoQ2xvY2tUeXBlOjpXYWxsKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlKE1vbm90b25pY1RpbWUgdGltZSkKKyAgICAgICAgOiBtX3Zh
bHVlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKQorICAgICAgICAsIG1fdHlwZShD
bG9ja1R5cGU6Ok1vbm90b25pYykKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUgZnJvbVJhd0RvdWJsZShkb3VibGUgdmFsdWUsIENsb2NrVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lm1fdHlwZSA9
IHR5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFNlY29uZHMg
c2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBTZWNvbmRzKG1fdmFsdWUpOyB9Cisg
ICAgQ2xvY2tUeXBlIGNsb2NrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG5v
dyhDbG9ja1R5cGUpOworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUgbm93V2l0aFNhbWVDbG9jaygpIGNvbnN0OworICAgIAorICAgIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSB3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKGRvdWJsZSB2YWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmZy
b21SYXdEb3VibGUodmFsdWUsIGNsb2NrVHlwZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXNz
ZXJ0cyB0aGF0IHRoZSB0aW1lIGlzIG9mIHRoZSB0eXBlIHlvdSB3YW50LgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBXYWxsVGltZSB3YWxsVGltZSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBNb25vdG9uaWNUaW1lIG1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0OworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRlTW9ub3RvbmljVGlt
ZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3Bl
cmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2l0aFNh
bWVDbG9ja0FuZFJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAg
IAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKG1f
dmFsdWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNj
YWxhciBhbmQgc2NhbGFycyBjYW4gYmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20g
YWxnZWJyYWljCisgICAgLy8gdHJhbnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAg
IAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAg
ICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9Cisg
ICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFNlY29uZHMgb3BlcmF0b3ItKGNvbnN0IFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZQorICAgICAgICAgICAgJiYgbV90eXBl
ID09IG90aGVyLm1fdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIC8vIFRvIGRvIHJlbGF0
aXZlIGNvbXBhcmlzb25zLCB5b3UgbXVzdCBiZSB1c2luZyB0aW1lcyB3aXRoIHRoZSBzYW1lIGNs
b2NrIHR5cGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIG9wZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
ZG91YmxlIG1fdmFsdWUgeyAwIH07CisgICAgQ2xvY2tUeXBlIG1fdHlwZSB7IENsb2NrVHlwZTo6
V2FsbCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlOwpJbmRleDogU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRU
aW1lLmgiCisjaW5jbHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFt
LmgiCisjaW5jbHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKK25hbWVzcGFjZSBX
VEYgeworCitXYWxsVGltZSBXYWxsVGltZTo6bm93KCkKK3sKKyAgICBXYWxsVGltZSByZXN1bHQ7
CisgICAgcmVzdWx0Lm1fdmFsdWUgPSBjdXJyZW50VGltZSgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK01vbm90b25pY1RpbWUgV2FsbFRpbWU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBNb25vdG9uaWNUaW1lOjpub3co
KTsKK30KKwordm9pZCBXYWxsVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiV2FsbCgiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBXYWxs
VGltZTo6c2xlZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgqdGhp
cykuc2xlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvV2FsbFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+Cisj
aW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1vbm90
b25pY1RpbWU7CitjbGFzcyBQcmludFN0cmVhbTsKKworLy8gVGhlIGN1cnJlbnQgdGltZSBhY2Nv
cmRpbmcgdG8gYSB3YWxsIGNsb2NrIChha2EgcmVhbCB0aW1lIGNsb2NrKS4gVGhpcyB1c2VzIGZs
b2F0aW5nIHBvaW50CisvLyBpbnRlcm5hbGx5IHNvIHRoYXQgeW91IGNhbiByZWFzb24gYWJvdXQg
aW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0J3MKKy8vIGFj
Y2VwdGFibGUgdG8gdXNlIHRoaXMgdG8gd3JhcCBOYU4gdGltZXMsIG5lZ2F0aXZlIHRpbWVzLCBh
bmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleQorLy8gYXJlIHJlbGF0aXZlIHRvIHRo
ZSBzYW1lIGNsb2NrLiBTcGVjaWZpY2FsbHksIFdhbGxUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFn
cmVlbWVudCB3aXRoIHRoZQorLy8gcHJpbmNpcGxlIHRoYXQgV2FsbFRpbWU6Om5vdygpLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSBpcyB0aGUgc2FtZSBhcyBXVEY6OmN1cnJlbnRUaW1lKCku
CitjbGFzcyBXYWxsVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBj
bG9ja1R5cGUgPSBDbG9ja1R5cGU6OldhbGw7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgZXBv
Y2guIFNvLCB4LnNlY29uZHNTaW5jZUVwb2NoKCkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHggLSBX
YWxsVGltZSgpLgorICAgIFdhbGxUaW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlm
IHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUgYWNjb3Jk
aW5nIHRvCisgICAgLy8gV1RGOjpjdXJyZW50VGltZSgpLiBJdCBtdXN0IGJlIGluIHNlY29uZHMg
YW5kIGl0IG11c3QgYmUgZnJvbSB0aGUgc2FtZSB0aW1lIHNvdXJjZS4KKyAgICBzdGF0aWMgV2Fs
bFRpbWUgZnJvbVJhd0RvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBXYWxsVGlt
ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2Fs
bFRpbWUgbm93KCk7CisgICAgCisgICAgc3RhdGljIFdhbGxUaW1lIGluZmluaXR5KCkgeyByZXR1
cm4gZnJvbVJhd0RvdWJsZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkp
OyB9CisgICAgCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJu
IFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICAKKyAgICBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxU
aW1lKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9u
b3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAg
CisgICAgV2FsbFRpbWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAg
fQorICAgIAorICAgIFdhbGxUaW1lIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBi
ZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFu
c2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBXYWxsVGltZSBvcGVyYXRvci0oKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUoLW1fdmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBXYWxsVGltZSYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAg
V2FsbFRpbWUmIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0
b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMo
bV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oV2FsbFRp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChXYWxsVGltZSBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I8PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I+PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3Zh
bHVlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2FsbFRp
bWU7CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293790</attachid>
            <date>2016-11-03 12:35:16 -0700</date>
            <delta_ts>2016-11-03 21:08:36 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66104</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkocmV2aXNpb24gMjA4MzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsOCBAQCBJQ1N0YXRzOjpJQ1N0YXRzKCkKICAgICAgICAgW3RoaXNdICgp
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvclNlY29uZHMobV9s
b2NrLCAxLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3Nob3VsZFN0b3A7IH0pOworICAg
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRGb3IoCisgICAgICAgICAgICAgICAgICAgIG1f
bG9jaywgU2Vjb25kcygxKSwgW3RoaXNdICgpIC0+IGJvb2wgeyByZXR1cm4gbV9zaG91bGRTdG9w
OyB9KTsKICAgICAgICAgICAgICAgICBpZiAobV9zaG91bGRTdG9wKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCShyZXZpc2lvbiAyMDgzMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA0LDggKzMwNCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRv
bWljc0Z1bmMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICB9CiAgICAgCi0gICAgZG91YmxlIHRpbWVvdXRJbk5hbm9zZWNvbmRzID0gdGltZW91dElu
TWlsbGlzZWNvbmRzICogMTAwMCAqIDEwMDA7Ci0KKyAgICBTZWNvbmRzIHRpbWVvdXQgPSBTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7CisgICAgCiAgICAg
Ly8gVGhpcyBjb3ZlcnMgdGhlIHByb3Bvc2VkIHJ1bGU6CiAgICAgLy8KICAgICAvLyA0LiBJZiB0
aW1lb3V0IGlzIG5vdCBwcm92aWRlZCBvciBpcyB1bmRlZmluZWQgdGhlbiBsZXQgdCBiZSAraW5m
LiBPdGhlcndpc2U6CkBAIC0zMTQsMzEgKzMxNCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jCiAgICAgLy8KICAgICAvLyBleGVjLT5hcmd1bWVudCgzKSByZXR1
cm5zIHVuZGVmaW5lZCBpZiBpdCdzIG5vdCBwcm92aWRlZCBhbmQgVG9OdW1iZXIodW5kZWZpbmVk
KSByZXR1cm5zIE5hTiwKICAgICAvLyBzbyBOYU4gaXMgdGhlIG9ubHkgc3BlY2lhbCBjYXNlLgot
ICAgIGlmICh0aW1lb3V0SW5OYW5vc2Vjb25kcyA9PSB0aW1lb3V0SW5OYW5vc2Vjb25kcykKLSAg
ICAgICAgdGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om1heCgwLiwgdGltZW91dEluTmFub3Nl
Y29uZHMpOworICAgIGlmICh0aW1lb3V0ID09IHRpbWVvdXQpCisgICAgICAgIHRpbWVvdXQgPSBz
dGQ6Om1heChTZWNvbmRzKDApLCB0aW1lb3V0KTsKICAgICBlbHNlCi0gICAgICAgIHRpbWVvdXRJ
bk5hbm9zZWNvbmRzID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwot
ICAgIAotICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGlzIGEgcGlsZSBvZiBub25zZW5zZSwgYnV0
IGl0J3MgYWxsIG5lZWRlZCBiZWNhdXNlIG9mIGNvcm5lciBjYXNlcwotICAgIC8vIGluc2lkZSBz
dGQ6OmNocm9uby4KLSAgICAvLyBGSVhNRTogU3RvcCB1c2luZyBzdGQ6OmNocm9uby4KLSAgICAK
LSAgICBQYXJraW5nTG90OjpDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0OwotICAgIGlmICh0aW1l
b3V0SW5OYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6
OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgIGVsc2UgewotICAgICAgICBzdGQ6OmNocm9ubzo6bmFu
b3NlY29uZHMgcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aW1lb3V0SW5OYW5vc2Vjb25kcykpOwotICAg
ICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzOjp6ZXJv
KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6Om5vdygpOwotICAg
ICAgICBlbHNlIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBQYXJraW5nTG90OjpDbG9jazo6ZHVyYXRp
b246Om1heCgpKQotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1l
X3BvaW50OjptYXgoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQYXJraW5nTG90OjpD
bG9jazo6ZHVyYXRpb24gbXlSZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PFBhcmtpbmdMb3Q6OkNsb2NrOjpkdXJhdGlvbj4ocmVsYXRp
dmVUaW1lb3V0KTsKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCkgKyBteVJlbGF0aXZlVGltZW91dDsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgdGltZW91
dCA9IFNlY29uZHM6OmluZmluaXR5KCk7CiAgICAgCiAgICAgYm9vbCBkaWRQYXNzVmFsaWRhdGlv
biA9IGZhbHNlOwogICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcmVzdWx0OwpAQCAtMzUxLDcg
KzMzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAg
ICAgICAgICAgICByZXR1cm4gZGlkUGFzc1ZhbGlkYXRpb247CiAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgW10gKCkgeyB9LAotICAgICAgICAgICAgdGltZW91dCk7CisgICAgICAgICAgICBN
b25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVvdXQpOwogICAgIH0KICAgICBjb25zdCBjaGFyKiBy
ZXN1bHRTdHJpbmc7CiAgICAgaWYgKCFkaWRQYXNzVmFsaWRhdGlvbikKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4MzM4KQorKysgU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksMTYgQEAKIAkJMEY0M0Q4RjIxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1Ro
cmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovOyB9OwogCQkwRjQ1
NzA0MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERv
bWluYXRvcnMuaCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3
MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgKi87IH07CisJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZCMjgxMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLzsgfTsKKwkJMEY2NkIyOEMxREM5N0JBQjAw
NEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1Rp
bWUuY3BwICovOyB9OworCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGlt
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIy
ODMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLzsgfTsKKwkJMEY2NkIyOEUx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMu
Y3BwICovOyB9OworCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODUxREM5N0JB
QjAwNEExRDNGIC8qIFNlY29uZHMuaCAqLzsgfTsKKwkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NjFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOTExREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oICovOyB9OworCQkwRjY2QjI5MjFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLzsgfTsKKwkJMEY2
NkIyOTMxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyogV2Fs
bFRpbWUuaCAqLzsgfTsKIAkJMEY3MjVDQUMxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBQjFD
NTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLzsgfTsKIAkJMEY3QzVGQjYxRDg4NUNGMjAw
NDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjUxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0
b3IuY3BwICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CkBAIC0zNzIsNiArMzgy
LDE2IEBACiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21p
bmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWluYXRvcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8q
IEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnViYmxlU29y
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFE
M0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgxMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2xvY2tUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgy
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vbm90b25pY1RpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb25vdG9uaWNUaW1lLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY29uZHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyog
U2Vjb25kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNvbmRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODgxREM5
N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhbGxUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODkxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhbGxUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjdDNUZCNTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjMsNiArODgzLDggQEAKIAkJCQlFQjk1
RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJQThBNDcyNkExNTFB
ODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThBNDcyNkIxNTFB
ODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCisJCQkJMEY2NkIyODAxREM5N0JB
QjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIyODExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5oICovLAogCQkJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBD
b21tYVByaW50ZXIuaCAqLywKIAkJCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGls
YXRpb25UaHJlYWQuY3BwICovLAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oICovLApAQCAtOTQ2LDYgKzk2OCw4IEBACiAJCQkJQThBNDcyQ0QxNTFB
ODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCUE4QTQ3MkNFMTUxQTgy
NUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCiAJCQkJQThBNDcyQ0YxNTFBODI1QjAw
NDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLywKKwkJCQkwRjY2QjI4MjFEQzk3QkFC
MDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi8sCisJCQkJMEY2NkIyODMxREM5N0JBQjAw
NEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4
RkQgLyogTmFrZWRQdHIuaCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2
ZXJEZXN0cm95ZWQuaCAqLywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2Nr
LmggKi8sCkBAIC0xMDA3LDYgKzEwMzEsOCBAQAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0
NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJMUEzNTI0QUExRDYzQTJGRjAwMzE3MjlC
IC8qIFNjb3BlLmggKi8sCiAJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExh
bWJkYS5oICovLAorCQkJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCAq
LywKKwkJCQkwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICovLAogCQkJCUE4
QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCQlBOEE0
NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThB
NDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTA0Myw2ICsxMDY5LDgg
QEAKIAkJCQlBOEE0NzMzNjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3Bw
ICovLAogCQkJCUE4QTQ3MzNFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRl
ZC5oICovLAogCQkJCUE4QTQ3MzNGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5o
ICovLAorCQkJCTBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuY3BwICovLAorCQkJCTBGNjZCMjg3MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUuaCAqLywKIAkJCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi8sCiAJCQkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJT
ZXQuaCAqLywKIAkJCQkxNDlFRjE2MjE2QkJGRTBEMDAwQTQzMzEgLyogVHJpU3RhdGUuaCAqLywK
QEAgLTEwNTQsNiArMTA4Miw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZl
Y3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMu
aCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCisJCQkJ
MEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLywKKwkJCQkwRjY2QjI4
OTFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLywKIAkJCQk5NzRDRkM4RDE2QTRGMzI3
MDA2RDU0MDQgLyogV2Vha1B0ci5oICovLAogCQkJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAv
KiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRM
b2NrLmNwcCAqLywKQEAgLTEyNTksNyArMTI4OSw5IEBACiAJCQkJMEZCMTRFMTkxODBGQTIxODAw
OUI2QjREIC8qIEJhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUIxODEwRTFEQzAwOUI2
QjREIC8qIEJhZ1RvSGFzaE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODEzNDAxMzkxNUIwOTJG
RDAwMUZGMEI4IC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEYxREM5N0JB
QjAwNEExRDNGIC8qIFNlY29uZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0E5MTUxQTgy
NUIwMDQxMjNGRiAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOTEx
REM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDczQUIxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0NTIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOEExNTFBODI1QjAwNDEyM0ZGIC8qIEJpdG1hcC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMzQwLDYgKzEzNzIsNyBAQAogCQkJCTkzQUM5MUE4MTg5NDJGQzQw
MDI0NDkzOSAvKiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0MjAw
QzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MERBMDg1MTc5OUYw
NEQwMDUyOUE5QiAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOTMxREM5
N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFMTE1
MUE4MjVCMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTE2
NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNF
MzE1MUE4MjVCMDA0MTIzRkYgLyogTG9ja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzOTksNiAr
MTQzMiw3IEBACiAJCQkJMTRGM0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRo
bWV0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBT
Y2hlZHVsZVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzUyNEFCMUQ2M0EyRkYwMDMxNzI5
QiAvKiBTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEQxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NEIxMUJEQUNEMzkw
MDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDk4QjAyMUMx
NkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
MUYxNTFBODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNDY2LDYgKzE1MDAsNyBAQAogCQkJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3Jr
UXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ2MTUxQTgyNUIwMDQxMjNGRiAvKiBX
VEZTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI4QjFEQzk3QkFCMDA0
QTFEM0YgLyogQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTczRTAyNTE5RENCN0FC
MDA1ODBENUMgLyogWFBDU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZF
Qjk1RTBEMTEgLyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM5MTZCOTc1RjAyRjRG
N0U4QjRBQjEyRCAvKiBJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTgxLDYgKzE2MTYs
NyBAQAogCQkJCUE4QTQ3M0FBMTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uY2MgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ1MTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzhCMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRWZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQ0VFMjIwMTFD
RUE3NTUxMDAwQzIzOTYgLyogQmxvY2tPYmpDRXhjZXB0aW9ucy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3M0FDMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmNjIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThBNDc0NjAxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9yRGVmYXVsdC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTE2NDEsNiArMTY3Nyw5IEBACiAJCQkJQTVCQTE1RjMxODI0
MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3
MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY2QjI4QTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0
b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMy
MzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQ1MThBMUYx
NjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNjUyLDYg
KzE2OTEsNyBAQAogCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRBMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGNjZCMjhDMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFDMTgxQzhGMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkxMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3Zp
ZGVyTGF0aW4xLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkzMUQzMDdBQjgwMEY1RkEx
NiAvKiBVVGV4dFByb3ZpZGVyVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAJKHJldmlzaW9uIDIwODMzOCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw5ICsxODAsOCBAQCB2
b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0b3AobG9ja2VyKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpXYWl0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNodXQgdGhlIHRocmVhZCBkb3duIGFmdGVyIG9uZSBzZWNvbmQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZW91dCA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXdva2VuQnlO
b3RpZnkgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5tX2NvbmRp
dGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMoKm1fbG9jaywgdGltZW91dCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRG
b3IoKm1fbG9jaywgU2Vjb25kcygxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3
b2tlbkJ5Tm90aWZ5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlz
KSwgIjogR29pbmcgdG8gc2xlZXAhXG4iKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ2xvY2tUeXBlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsb2NrVHlwZS5oIgorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQ2xvY2tUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAgICAgIG91dC5wcmludCgi
V2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90b25pYzoK
KyAgICAgICAgb3V0LnByaW50KCJNb25vdG9uaWMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ2xvY2tUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
Q2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitlbnVtIGNsYXNzIENsb2NrVHlwZSB7
CisgICAgV2FsbCwKKyAgICBNb25vdG9uaWMKK307CisKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBDbG9ja1R5cGUpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwordXNpbmcgV1RGOjpDbG9ja1R5cGU7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCShyZXZp
c2lvbiAyMDgzMzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBX
VEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFs
PgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAg
QEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1
Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6
ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9u
QmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5nTG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25k
aXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQgb2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5h
bGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxzCisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1l
IENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRvIHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dl
dmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5saWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNv
c3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgTW9ub3JvbmljVGltZS4KKyAg
ICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUgVGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEg
cGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5s
b2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1
cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0
bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGlj
aCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sgZm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJl
aGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBPcGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9u
IGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBi
b29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkK
KyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAg
IGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygpKSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGlt
ZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsKICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzky
LDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVu
IHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQg
aW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wg
d2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25z
dCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgYm9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tU
eXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0
IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkp
IHsKICAgICAgICAgICAgIGlmICghd2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3
ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0
aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNh
dGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8vIE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVv
dXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlw
ZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdhaXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2Nr
LCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJl
ZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYgbG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQs
IGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50
aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRpdmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRl
KTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSAr
IHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9vbCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNv
bmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9j
aywgTW9ub3RvbmljVGltZTo6bm93KCkgKyByZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9j
aykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRpbChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4
KCkpOworICAgICAgICB3YWl0VW50aWwobG9jaywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0x
MjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQo
bG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1l
IFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1l
VHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjpt
YXgoKSkgewotICAgICAgICAgICAgd2FpdChsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0g
VGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBs
b2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVy
biB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJl
bnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAg
IGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3Vi
bGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9y
U2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlw
ZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGltZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHBy
ZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25k
cyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMgKiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFz
IE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2so
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGlt
ZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGlu
dGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAgIC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVy
LgotICAgICAgICAgICAgd2FpdChsb2NrLCBwcmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0
ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2
NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0
Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBO
b3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2Fp
dGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5n
IHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3
b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9uZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVj
dCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUm
IGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91
YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAq
ICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjApOwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVs
YXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAwKSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5k
bGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwgYXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxv
Y2soKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4g
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkp
IHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBi
ZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQgaW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAg
Ly8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1
dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25k
cyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0g
ICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0K
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25U
eXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9u
VHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChs
b2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShyZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlvblR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQg
YWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3QgRHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQp
Ci0gICAgewotICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJv
KCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAg
ICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBDbG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdl
IHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3
aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5zaWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9u
IGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBiZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVz
aW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAgICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6
bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJl
bGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxD
bG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGltZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2Nr
Ojpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBt
X2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAKIGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25k
aXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDog
U291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0N1cnJlbnRUaW1lLmNwcAkocmV2aXNpb24gMjA4MzM4KQorKysgU291cmNlL1dURi93dGYv
Q3VycmVudFRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBz
bGVlcChkb3VibGUgdmFsdWUpCiAgICAgTG9jayBmYWtlTG9jazsKICAgICBDb25kaXRpb24gZmFr
ZUNvbmRpdGlvbjsKICAgICBMb2NrSG9sZGVyIGZha2VMb2NrZXIoZmFrZUxvY2spOwotICAgIGZh
a2VDb25kaXRpb24ud2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKGZha2VMb2NrLCBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIHZhbHVlKTsKKyAgICBmYWtlQ29uZGl0aW9uLndh
aXRGb3IoZmFrZUxvY2ssIFNlY29uZHModmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RG
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisKKyNpbmNsdWRlICJDdXJy
ZW50VGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgiCisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworbmFtZXNwYWNlIFdU
RiB7CisKK01vbm90b25pY1RpbWUgTW9ub3RvbmljVGltZTo6bm93KCkKK3sKKyAgICBNb25vdG9u
aWNUaW1lIHJlc3VsdDsKKyAgICByZXN1bHQubV92YWx1ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dhbGxUaW1lIE1vbm90b25pY1Rp
bWU6OmFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAqdGhpcyAtIG5v
dygpICsgV2FsbFRpbWU6Om5vdygpOworfQorCit2b2lkIE1vbm90b25pY1RpbWU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk1vbm90b25pYygiLCBtX3Zh
bHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBNb25vdG9uaWNUaW1lOjpzbGVlcCgpIGNvbnN0Cit7
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRl
IDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV2FsbFRpbWU7Citj
bGFzcyBQcmludFN0cmVhbTsKKworLy8gVGhlIGN1cnJlbnQgdGltZSBhY2NvcmRpbmcgdG8gYSBt
b25vdG9uaWMgY2xvY2suIE1vbm90b25pYyBjbG9ja3MgZG9uJ3QgZ28gYmFja3dhcmRzIGFuZAor
Ly8gcG9zc2libHkgZG9uJ3QgY291bnQgZG93bnRpbWUuIFRoaXMgdXNlcyBmbG9hdGluZyBwb2lu
dCBpbnRlcm5hbGx5IHNvIHRoYXQgeW91IGNhbiByZWFzb24gYWJvdXQKKy8vIGluZmluaXR5IGFu
ZCBvdGhlciB0aGluZ3MgdGhhdCBhcmlzZSBpbiBtYXRoLiBJdCdzIGFjY2VwdGFibGUgdG8gdXNl
IHRoaXMgdG8gd3JhcCBOYU4gdGltZXMsCisvLyBuZWdhdGl2ZSB0aW1lcywgYW5kIGluZmluaXRl
IHRpbWVzLCBzbyBsb25nIGFzIHRoZXkgYXJlIGFsbCByZWxhdGl2ZSB0byB0aGUgc2FtZSBjbG9j
ay4KKy8vIFNwZWNpZmljYWxseSwgTW9ub3RvbmljVGltZSBzaG91bGQgYmUgdXNlZCBpbiBhZ3Jl
ZW1lbnQgd2l0aCB0aGUgcHJpbmNpcGxlIHRoYXQKKy8vIE1vbm90b25pY1RpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSBpcyB0aGUgc2FtZSBhcworLy8gV1RGOjptb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4KK2NsYXNzIE1vbm90b25pY1RpbWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCBDbG9ja1R5cGUgY2xvY2tUeXBlID0gQ2xvY2tUeXBlOjpNb25vdG9u
aWM7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgZXBvY2guIFNvLCB4LnNlY29uZHNTaW5jZUVw
b2NoKCkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHggLSBNb25vdG9uaWNUaW1lKCkuCisgICAgTW9u
b3RvbmljVGltZSgpIHsgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyBmb3Ig
c3VyZSB0aGF0IHRoZSBkb3VibGUgcmVwcmVzZW50cyB0aW1lIGFjY29yZGluZyB0bworICAgIC8v
IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkuIEl0IG11c3QgYmUgaW4gc2Vjb25k
cyBhbmQgaXQgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIHRpbWUKKyAgICAvLyBzb3VyY2UuCisgICAg
c3RhdGljIE1vbm90b25pY1RpbWUgZnJvbVJhd0RvdWJsZShkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICBNb25vdG9uaWNUaW1lIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2
YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBNb25vdG9uaWNUaW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBN
b25vdG9uaWNUaW1lIGluZmluaXR5KCkgeyByZXR1cm4gZnJvbVJhd0RvdWJsZShzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisKKyAgICBTZWNvbmRzIHNlY29uZHNT
aW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlKTsgfQorICAgIAorICAg
IE1vbm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QgeyByZXR1cm4g
KnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxs
VGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKyhT
ZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUo
bV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1l
IG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZy
b21SYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAv
LyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291
bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBh
bGxvdyBpdC4KKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIE1v
bm90b25pY1RpbWUgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgTW9ub3RvbmljVGlt
ZSBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLShNb25v
dG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMobV92
YWx1ZSAtIG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
TW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
ID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShNb25v
dG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoTW9ub3Rvbmlj
VGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIu
bV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oTW9ub3RvbmljVGltZSBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KE1vbm90b25pY1RpbWUgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oTW9ub3RvbmljVGltZSBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAg
fQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6TW9ub3RvbmljVGltZTsKKwpJbmRleDogU291cmNlL1dURi93
dGYvUGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xv
dC5jcHAJKHJldmlzaW9uIDIwODMzOCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKIAogICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllcjsKICAgICAKLSAgICBzdGQ6Om11dGV4IHBhcmtpbmdM
b2NrOwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247CisgICAg
TXV0ZXggcGFya2luZ0xvY2s7CisgICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247
CiAKICAgICBjb25zdCB2b2lkKiBhZGRyZXNzIHsgbnVsbHB0ciB9OwogICAgIApAQCAtNTY0LDcg
KzU2NCw3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsKICAgICBj
b25zdCB2b2lkKiBhZGRyZXNzLAogICAgIGNvbnN0IFNjb3BlZExhbWJkYTxib29sKCk+JiB2YWxp
ZGF0aW9uLAogICAgIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKCk+JiBiZWZvcmVTbGVlcCwKLSAg
ICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KQorICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSYgdGltZW91dCkKIHsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHBhcmtpbmcuXG4iKSk7CkBAIC01OTIsMjAgKzU5
MiwxNyBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAgICAgCiAg
ICAgYm9vbCBkaWRHZXREZXF1ZXVlZDsKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8
c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7Ci0gICAgICAgIHdoaWxlIChtZS0+
YWRkcmVzcyAmJiBDbG9jazo6bm93KCkgPCB0aW1lb3V0KSB7Ci0gICAgICAgICAgICAvLyBGYWxs
aW5nIGJhY2sgdG8gd2FpdCgpIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiBsaWJzdGRjKysgaW1wbGVt
ZW50YXRpb24gb2Ygc3RkOjpjb25kaXRpb25fdmFyaWFibGUuIFNlZToKLSAgICAgICAgICAgIC8v
IC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODAyNwotICAgICAg
ICAgICAgLy8gLSBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01
ODkzMQotICAgICAgICAgICAgaWYgKHRpbWVvdXQgPT0gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgp
KQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0
X3VudGlsKGxvY2tlciwgdGltZW91dCk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtZS0+
cGFya2luZ0xvY2spOworICAgICAgICB3aGlsZSAobWUtPmFkZHJlc3MgJiYgdGltZW91dC5ub3dX
aXRoU2FtZUNsb2NrKCkgPCB0aW1lb3V0KSB7CisgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRp
dGlvbi50aW1lZFdhaXQoCisgICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdMb2NrLCB0aW1lb3V0
LmFwcHJveGltYXRlV2FsbFRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBCZWNhdXNlIG9mIHRoZSBhYm92ZSwgd2UgZG8gdGhp
cyB0aGluZywgd2hpY2ggaXMgaGlsYXJpb3VzbHkgYXdmdWwsIGJ1dCBlbnN1cmVzIHRoYXQgdGhl
IHdvcnN0IGNhc2UgaXMKLSAgICAgICAgICAgIC8vIGEgQ1BVLWVhdGluZyBzcGluIGJ1dCBub3Qg
YSBkZWFkbG9jay4KLSAgICAgICAgICAgIGxvY2tlci51bmxvY2soKTsKLSAgICAgICAgICAgIGxv
Y2tlci5sb2NrKCk7CisgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciB0aGUgT1MgdG8g
ZGVjaWRlIG5vdCB0byB3YWl0LiBJZiBpdCBkb2VzIHRoYXQgdGhlbiBpdCB3aWxsIGFsc28KKyAg
ICAgICAgICAgIC8vIGRlY2lkZSBub3QgdG8gcmVsZWFzZSB0aGUgbG9jay4gSWYgdGhlcmUncyBh
IGJ1ZyBpbiB0aGUgdGltZSBtYXRoLCB0aGVuIHRoaXMgY291bGQKKyAgICAgICAgICAgIC8vIHJl
c3VsdCBpbiBhIGRlYWRsb2NrLiBGbGFzaGluZyB0aGUgbG9jayBtZWFucyB0aGF0IGF0IHdvcnN0
IGl0J3MganVzdCBhIENQVS1lYXRpbmcKKyAgICAgICAgICAgIC8vIHNwaW4uCisgICAgICAgICAg
ICBtZS0+cGFya2luZ0xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2su
bG9jaygpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVCghbWUtPmFkZHJlc3MgfHwgbWUtPmFk
ZHJlc3MgPT0gYWRkcmVzcyk7CiAgICAgICAgIGRpZEdldERlcXVldWVkID0gIW1lLT5hZGRyZXNz
OwpAQCAtNjQwLDE0ICs2MzcsMTQgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1
bHQgUGFyawogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm8gbWF0dGVyIHdoYXQsIG1lLT5hZGRy
ZXNzIGlzIG51bGwgYWZ0ZXIgdGhpcyBwb2ludC4KICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtZS0+cGFya2luZ0xvY2spOwogICAgICAgICBpZiAoIWRpZERlcXVldWUp
IHsKICAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3QgZGVxdWV1ZSBvdXJzZWx2ZXMsIHRoZW4g
c29tZW9uZSBlbHNlIGRpZC4gVGhleSB3aWxsIHNldCBvdXIgYWRkcmVzcyB0bwogICAgICAgICAg
ICAgLy8gbnVsbC4gV2UgZG9uJ3Qgd2FudCB0byBwcm9jZWVkIHVudGlsIHRoZXkgZG8gdGhpcywg
YmVjYXVzZSBvdGhlcndpc2UsIHRoZXkgbWF5IHNldAogICAgICAgICAgICAgLy8gb3VyIGFkZHJl
c3MgdG8gbnVsbCBpbiBzb21lIGRpc3RhbnQgZnV0dXJlIHdoZW4gd2UncmUgYWxyZWFkeSB0cnlp
bmcgdG8gd2FpdCBmb3IKICAgICAgICAgICAgIC8vIG90aGVyIHRoaW5ncy4KICAgICAgICAgICAg
IHdoaWxlIChtZS0+YWRkcmVzcykKLSAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlv
bi53YWl0KGxvY2tlcik7CisgICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2Fp
dChtZS0+cGFya2luZ0xvY2spOwogICAgICAgICB9CiAgICAgICAgIG1lLT5hZGRyZXNzID0gbnVs
bHB0cjsKICAgICB9CkBAIC02OTUsMTEgKzY5MiwxMSBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IFBhCiAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAg
IAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhy
ZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
RGF0YS0+cGFya2luZ0xvY2spOwogICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0gbnVsbHB0
cjsKICAgICAgICAgdGhyZWFkRGF0YS0+dG9rZW4gPSAwOwogICAgIH0KLSAgICB0aHJlYWREYXRh
LT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICB0aHJlYWREYXRhLT5wYXJraW5n
Q29uZGl0aW9uLnNpZ25hbCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0MSwxMSAr
NzM4LDExIEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya09uZUkKICAgICBB
U1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAg
ICAgIHRocmVhZERhdGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgIH0KICAgICAvLyBBdCB0aGlz
IHBvaW50LCB0aGUgdGhyZWFkRGF0YSBtYXkgZGllLiBHb29kIHRoaW5nIHdlIGhhdmUgYSBSZWZQ
dHI8PiBvbiBpdC4KLSAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUo
KTsKKyAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLnNpZ25hbCgpOwogfQogCiBORVZF
Ul9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRk
cmVzcywgdW5zaWduZWQgY291bnQpCkBAIC03NzksMTAgKzc3NiwxMCBAQCBORVZFUl9JTkxJTkUg
dW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrCiAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS5n
ZXQoKSksICIgd2l0aCBhZGRyZXNzICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyks
ICJcbiIpKTsKICAgICAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgICAgICB7
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRE
YXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFk
RGF0YS0+cGFya2luZ0xvY2spOwogICAgICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51
bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5u
b3RpZnlfb25lKCk7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFs
KCk7CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJr
aW5nTG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCShyZXZp
c2lvbiAyMDgzMzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2lmbmRlZiBXVEZfUGFya2luZ0xvdF9oCiAjZGVmaW5l
IFdURl9QYXJraW5nTG90X2gKIAotI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlv
bmFsPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJk
YS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zOSw3ICszOSwxNSBA
QCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBQYXJraW5nTG90KGNvbnN0IFBhcmtpbmdMb3QmKSA9
IGRlbGV0ZTsKIAogcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
ayBDbG9jazsKKyAgICAvLyBQYXJraW5nTG90IHdpbGwgYWNjZXB0IGFueSBraW5kIG9mIHRpbWUg
YW5kIGNvbnZlcnQgaXQgaW50ZXJuYWxseSwgYnV0IHRoaXMgdHlwZWRlZiB0ZWxscworICAgIC8v
IHlvdSB3aGF0IGtpbmQgb2YgdGltZSBQYXJraW5nTG90IHdvdWxkIGJlIGFibGUgdG8gdXNlIHdp
dGhvdXQgY29udmVyc2lvbnMuIEl0J3Mgc2FkIHRoYXQKKyAgICAvLyB0aGlzIGlzIFdhbGxUaW1l
IG5vdCBNb25vdG9uaWNUaW1lLCBidXQgdGhhdCdzIGp1c3QgaG93IE9TIHdhaXQgZnVuY3Rpb25z
IHdvcmsuIEhvd2V2ZXIsCisgICAgLy8gYmVjYXVzZSBQYXJraW5nTG90IGV2YWx1YXRlcyB3aGV0
aGVyIGl0IHNob3VsZCB3YWl0IGJ5IGNoZWNraW5nIGlmIHlvdXIgdGltZSBoYXMgcGFzc2VkCisg
ICAgLy8gdXNpbmcgd2hhdGV2ZXIgY2xvY2sgeW91IHVzZWQsIHNwZWNpZnlpbmcgdGltZW91dHMg
aW4gTW9ub3RvbmljVGltZSBpcyBzZW1hbnRpY2FsbHkgYmV0dGVyLgorICAgIC8vIEZvciBleGFt
cGxlLCBpZiB0aGUgdXNlciBzZXRzIGhpcyBjb21wdXRlcidzIGNsb2NrIGJhY2sgZHVyaW5nIHRo
ZSB0aW1lIHRoYXQgeW91IHdhbnRlZCB0bworICAgIC8vIHdhaXQgZm9yIG9uZSBzZWNvbmQsIGFu
ZCB5b3Ugc3BlY2lmaWVkIHRoZSB0aW1lb3V0IHVzaW5nIHRoZSBNb25vdG9uaWNUaW1lLCB0aGVu
IFBhcmtpbmdMb3QKKyAgICAvLyB3aWxsIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgeW91
ciBvbmUgc2Vjb25kIGhhcyBlbGFwc2VkLgorICAgIHR5cGVkZWYgV2FsbFRpbWUgVGltZTsKICAg
ICAKICAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCiAgICAgLy8gcGFya2lu
ZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3
aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgpAQCAtNjgsNyArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgICAgIGNvbnN0IFZhbGlkYXRpb25GdW5j
dG9yJiB2YWxpZGF0aW9uLAogICAgICAgICBjb25zdCBCZWZvcmVTbGVlcEZ1bmN0b3ImIGJlZm9y
ZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KQorICAgICAgICBjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpCiAgICAgewogICAgICAgICByZXR1
cm4gcGFya0NvbmRpdGlvbmFsbHlJbXBsKAogICAgICAgICAgICAgYWRkcmVzcywKQEAgLTg5LDcg
Kzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3Rl
ZDsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICBD
bG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICAgICAgVGltZTo6aW5maW5pdHkoKSk7
CiAgICAgfQogCiAgICAgLy8gVW5wYXJraW5nIHN0YXR1cyBnaXZlbiB0byB5b3UgYW55dGltZSB5
b3UgdW5wYXJrT25lKCkuCkBAIC0xNTgsNyArMTY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29u
c3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2woKT4mIHZh
bGlkYXRpb24sCiAgICAgICAgIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKCk+JiBiZWZvcmVTbGVl
cCwKLSAgICAgICAgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCk7CisgICAgICAgIGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFk
ZHJlc3MsIGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJh
Y2spOwpJbmRleDogU291cmNlL1dURi93dGYvU2Vjb25kcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU2Vjb25kcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
U2Vjb25kcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2Vjb25kcy5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRl
ICJNb25vdG9uaWNUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJXYWxsVGltZS5oIgorCituYW1l
c3BhY2UgV1RGIHsKKworV2FsbFRpbWUgU2Vjb25kczo6b3BlcmF0b3IrKFdhbGxUaW1lIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBvdGhlciArICp0aGlzOworfQorCitNb25vdG9uaWNUaW1l
IFNlY29uZHM6Om9wZXJhdG9yKyhNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiBvdGhlciArICp0aGlzOworfQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25k
czo6b3BlcmF0b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1dhbGxUaW1lIFNlY29uZHM6Om9w
ZXJhdG9yLShXYWxsVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZy
b21SYXdEb3VibGUodmFsdWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7
Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3ItKE1vbm90b25pY1RpbWUgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdEb3VibGUodmFs
dWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Cit9CisKK1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSBTZWNvbmRzOjpvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIud2l0aFNhbWVDbG9j
a0FuZFJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KTsKK30KKwordm9pZCBTZWNvbmRzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fdmFsdWUsICIgc2VjIik7Cit9CisKK3ZvaWQgU2Vjb25kczo6c2xlZXAo
KSBjb25zdAoreworICAgIFdURjo6c2xlZXAobV92YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU2Vjb25kcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1Nl
Y29uZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIE1vbm90b25pY1RpbWU7CitjbGFzcyBQcmludFN0cmVhbTsKK2NsYXNz
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTsKK2NsYXNzIFdhbGxUaW1lOworCitjbGFzcyBTZWNv
bmRzIHsKK3B1YmxpYzoKKyAgICBTZWNvbmRzKCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgU2Vj
b25kcyhkb3VibGUgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAg
ICAKKyAgICBkb3VibGUgc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBk
b3VibGUgbWlsbGlzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gc2Vjb25kcygpICogMTAwMDsgfQor
ICAgIGRvdWJsZSBtaWNyb3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWxsaXNlY29uZHMoKSAq
IDEwMDA7IH0KKyAgICBkb3VibGUgbmFub3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWNyb3Nl
Y29uZHMoKSAqIDEwMDA7IH0KKyAgICAKKyAgICBzdGF0aWMgU2Vjb25kcyBmcm9tTWlsbGlzZWNv
bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlIC8g
MTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTZWNvbmRzIGZyb21NaWNyb3NlY29uZHMo
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21NaWxsaXNlY29uZHModmFs
dWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNlY29uZHMgZnJvbU5hbm9zZWNv
bmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tTWljcm9zZWNvbmRz
KHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTZWNvbmRzIGluZmluaXR5
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKSk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJh
dG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMo
dmFsdWUoKSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJh
dG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMo
dmFsdWUoKSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJh
dG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUoKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIEl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxpbmcgYSBk
dXJhdGlvbiwgbGlrZSwgIkkgd2FudCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcworICAgIC8v
IGxhc3QgdGltZSEiLgorICAgIFNlY29uZHMgb3BlcmF0b3IqKGRvdWJsZSBzY2FsYXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpICogc2NhbGFyKTsKKyAgICB9
CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci8oZG91YmxlIHNjYWxhcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgLyBzY2FsYXIpOworICAgIH0KKyAgICAK
KyAgICAvLyBJdCdzIHJlYXNvbmFibGUgdG8gdGhpbmsgYWJvdXQgcmF0aW9zIGJldHdlZW4gU2Vj
b25kcy4KKyAgICBkb3VibGUgb3BlcmF0b3IvKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUoKSAvIG90aGVyLnZhbHVlKCk7CisgICAgfQorICAgIAorICAg
IFNlY29uZHMmIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJh
dG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlz
IC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKj0oZG91YmxlIHNj
YWxhcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICogc2NhbGFyOworICAg
IH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci89KGRvdWJsZSBzY2FsYXIpCisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAvIHNjYWxhcjsKKyAgICB9CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIG9wZXJhdG9yKyhXYWxsVGltZSkgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKE1vbm90b25pY1Rp
bWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUgb3BlcmF0b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAg
IAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBvcGVyYXRvci0oV2FsbFRpbWUpIGNv
bnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLShNb25v
dG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlIG9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25z
dDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhPShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcjwoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oU2Vj
b25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIu
bV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAg
IAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWUg
V1RGCisKK3VzaW5nIFdURjo6U2Vjb25kczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKwor
I2luY2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRlICJQcmlu
dFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93KENsb2NrVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4g
V2FsbFRpbWU6Om5vdygpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAg
IHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCk7Cit9
CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
d1dpdGhTYW1lQ2xvY2soKSBjb25zdAoreworICAgIHJldHVybiBub3coY2xvY2tUeXBlKCkpOwor
fQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OndhbGxUaW1lKCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpXYWxsKTsKKyAgICBy
ZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdEb3VibGUobV92YWx1ZSk7Cit9CisKK01vbm90b25pY1Rp
bWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjptb25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpNb25vdG9uaWMpOworICAgIHJl
dHVybiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3RG91YmxlKG1fdmFsdWUpOworfQorCitXYWxsVGlt
ZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdAor
eworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAg
ICAgIHJldHVybiB3YWxsVGltZSgpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Cisg
ICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCkuYXBwcm94aW1hdGVXYWxsVGltZSgpOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXYWxsVGlt
ZSgpOworfQorCitNb25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6YXBwcm94
aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
IGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUoKS5hcHByb3hp
bWF0ZU1vbm90b25pY1RpbWUoKTsKKyAgICBjYXNlIENsb2NrVHlwZTo6TW9ub3RvbmljOgorICAg
ICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7Cit9CisKK1NlY29uZHMg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0g
b3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1
ZSk7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcjwoY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVy
Lm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcj4o
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gbV92YWx1ZSA+
IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVy
YXRvcjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1f
dmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om9wZXJhdG9yPj0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICBy
ZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworfQorCit2b2lkIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX3R5cGUsICIoIiwgbV92YWx1ZSwgIiBzZWMpIik7Cit9CisKK3ZvaWQgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgTG9jayBmYWtlTG9jazsKKyAgICBD
b25kaXRpb24gZmFrZUNvbmRpdGlvbjsKKyAgICBMb2NrSG9sZGVyIGZha2VMb2NrZXIoZmFrZUxv
Y2spOworICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VMb2NrLCAqdGhpcyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1l
Lmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBQcmludFN0cmVhbTsKKworY2xhc3MgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHsKK3B1Ymxp
YzoKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoKSB7IH0KKyAgICAKKyAgICBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUoV2FsbFRpbWUgdGltZSkKKyAgICAgICAgOiBtX3ZhbHVlKHRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKQorICAgICAgICAsIG1fdHlwZShDbG9ja1R5cGU6
OldhbGwpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUo
TW9ub3RvbmljVGltZSB0aW1lKQorICAgICAgICA6IG1fdmFsdWUodGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpCisgICAgICAgICwgbV90eXBlKENsb2NrVHlwZTo6TW9ub3RvbmljKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBm
cm9tUmF3RG91YmxlKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1
ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQubV90eXBlID0gdHlwZTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNv
bnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICBDbG9ja1R5cGUgY2xvY2tUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93KENsb2NrVHlwZSk7CisgICAgCisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBub3dXaXRoU2Ft
ZUNsb2NrKCkgY29uc3Q7CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHdpdGhT
YW1lQ2xvY2tBbmRSYXdEb3VibGUoZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZnJvbVJhd0RvdWJsZSh2YWx1ZSwgY2xv
Y2tUeXBlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIHRoYXQgdGhlIHRpbWUgaXMg
b2YgdGhlIHR5cGUgeW91IHdhbnQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIHdh
bGxUaW1lKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgbW9u
b3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGlt
ZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1v
bm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAg
IAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKG1f
dmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkp
OworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBi
ZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFu
c2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUgb3BlcmF0b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2Nr
QW5kUmF3RG91YmxlKC1tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1
cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgU2Vjb25kcyBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikg
Y29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBv
dGhlci5tX3ZhbHVlCisgICAgICAgICAgICAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisgICAgCisgICAgLy8gVG8gZG8gcmVsYXRpdmUgY29tcGFyaXNvbnMsIHlvdSBt
dXN0IGJlIHVzaW5nIHRpbWVzIHdpdGggdGhlIHNhbWUgY2xvY2sgdHlwZS4KKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsK
KyAgICBDbG9ja1R5cGUgbV90eXBlIHsgQ2xvY2tUeXBlOjpXYWxsIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvV2FsbFRpbWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXYWxsVGltZS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJNb25v
dG9uaWNUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dhbGxUaW1lIFdhbGxU
aW1lOjpub3coKQoreworICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAgICByZXN1bHQubV92YWx1ZSA9
IGN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTW9ub3RvbmljVGltZSBX
YWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KnRoaXMgLSBub3coKSArIE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCit2b2lkIFdhbGxUaW1l
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJXYWxsKCIs
IG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIFdhbGxUaW1lOjpzbGVlcCgpIGNvbnN0Cit7
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvV2FsbFRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTW9ub3RvbmljVGltZTsKK2NsYXNzIFByaW50
U3RyZWFtOworCisvLyBUaGUgY3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIHdhbGwgY2xvY2sg
KGFrYSByZWFsIHRpbWUgY2xvY2spLiBUaGlzIHVzZXMgZmxvYXRpbmcgcG9pbnQKKy8vIGludGVy
bmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBhYm91dCBpbmZpbml0eSBhbmQgb3RoZXIgdGhp
bmdzIHRoYXQgYXJpc2UgaW4gbWF0aC4gSXQncworLy8gYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0
byB3cmFwIE5hTiB0aW1lcywgbmVnYXRpdmUgdGltZXMsIGFuZCBpbmZpbml0ZSB0aW1lcywgc28g
bG9uZyBhcyB0aGV5CisvLyBhcmUgcmVsYXRpdmUgdG8gdGhlIHNhbWUgY2xvY2suIFNwZWNpZmlj
YWxseSwgV2FsbFRpbWUgc2hvdWxkIGJlIHVzZWQgaW4gYWdyZWVtZW50IHdpdGggdGhlCisvLyBw
cmluY2lwbGUgdGhhdCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
IGlzIHRoZSBzYW1lIGFzIFdURjo6Y3VycmVudFRpbWUoKS4KK2NsYXNzIFdhbGxUaW1lIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ2xvY2tUeXBlIGNsb2NrVHlwZSA9IENsb2NrVHlwZTo6
V2FsbDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4gU28sIHguc2Vjb25kc1NpbmNl
RXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIFdhbGxUaW1lKCkuCisgICAgV2FsbFRp
bWUoKSB7IH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgZm9yIHN1cmUgdGhh
dCB0aGUgZG91YmxlIHJlcHJlc2VudHMgdGltZSBhY2NvcmRpbmcgdG8KKyAgICAvLyBXVEY6OmN1
cnJlbnRUaW1lKCkuIEl0IG11c3QgYmUgaW4gc2Vjb25kcyBhbmQgaXQgbXVzdCBiZSBmcm9tIHRo
ZSBzYW1lIHRpbWUgc291cmNlLgorICAgIHN0YXRpYyBXYWxsVGltZSBmcm9tUmF3RG91YmxlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXYWxsVGltZSBub3coKTsKKyAgICAKKyAg
ICBzdGF0aWMgV2FsbFRpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9tUmF3RG91YmxlKHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7IH0KKyAgICAKKyAgICBTZWNvbmRz
IHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlKTsgfQor
ICAgIAorICAgIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdCB7IHJldHVybiAq
dGhpczsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRl
TW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBXYWxsVGltZSBvcGVyYXRv
cisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91
YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgV2FsbFRpbWUg
b3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJv
bVJhd0RvdWJsZShtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIC8v
IFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQgYXMgdGhpcyBjb3Vs
ZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0aW9ucy4gU28sIHdlIGFs
bG93IGl0LgorICAgIFdhbGxUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZnJvbVJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIFdhbGxUaW1l
JiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBXYWxsVGltZSYgb3BlcmF0b3ItPShT
ZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhl
cjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oV2FsbFRpbWUgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1
ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShXYWxsVGltZSBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I8KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPihXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KFdh
bGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KFdhbGxUaW1lIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIubV92YWx1
ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXYWxsVGltZTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293853</attachid>
            <date>2016-11-03 21:08:36 -0700</date>
            <delta_ts>2016-11-04 09:49:05 -0700</delta_ts>
            <desc>close to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106666</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkocmV2aXNpb24gMjA4MzU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsOCBAQCBJQ1N0YXRzOjpJQ1N0YXRzKCkKICAgICAgICAgW3RoaXNdICgp
IHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvclNlY29uZHMobV9s
b2NrLCAxLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3Nob3VsZFN0b3A7IH0pOworICAg
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRGb3IoCisgICAgICAgICAgICAgICAgICAgIG1f
bG9jaywgU2Vjb25kcygxKSwgW3RoaXNdICgpIC0+IGJvb2wgeyByZXR1cm4gbV9zaG91bGRTdG9w
OyB9KTsKICAgICAgICAgICAgICAgICBpZiAobV9zaG91bGRTdG9wKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA0LDggKzMwNCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRv
bWljc0Z1bmMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICB9CiAgICAgCi0gICAgZG91YmxlIHRpbWVvdXRJbk5hbm9zZWNvbmRzID0gdGltZW91dElu
TWlsbGlzZWNvbmRzICogMTAwMCAqIDEwMDA7Ci0KKyAgICBTZWNvbmRzIHRpbWVvdXQgPSBTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7CisgICAgCiAgICAg
Ly8gVGhpcyBjb3ZlcnMgdGhlIHByb3Bvc2VkIHJ1bGU6CiAgICAgLy8KICAgICAvLyA0LiBJZiB0
aW1lb3V0IGlzIG5vdCBwcm92aWRlZCBvciBpcyB1bmRlZmluZWQgdGhlbiBsZXQgdCBiZSAraW5m
LiBPdGhlcndpc2U6CkBAIC0zMTQsMzEgKzMxNCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jCiAgICAgLy8KICAgICAvLyBleGVjLT5hcmd1bWVudCgzKSByZXR1
cm5zIHVuZGVmaW5lZCBpZiBpdCdzIG5vdCBwcm92aWRlZCBhbmQgVG9OdW1iZXIodW5kZWZpbmVk
KSByZXR1cm5zIE5hTiwKICAgICAvLyBzbyBOYU4gaXMgdGhlIG9ubHkgc3BlY2lhbCBjYXNlLgot
ICAgIGlmICh0aW1lb3V0SW5OYW5vc2Vjb25kcyA9PSB0aW1lb3V0SW5OYW5vc2Vjb25kcykKLSAg
ICAgICAgdGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om1heCgwLiwgdGltZW91dEluTmFub3Nl
Y29uZHMpOworICAgIGlmICh0aW1lb3V0ID09IHRpbWVvdXQpCisgICAgICAgIHRpbWVvdXQgPSBz
dGQ6Om1heChTZWNvbmRzKDApLCB0aW1lb3V0KTsKICAgICBlbHNlCi0gICAgICAgIHRpbWVvdXRJ
bk5hbm9zZWNvbmRzID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwot
ICAgIAotICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGlzIGEgcGlsZSBvZiBub25zZW5zZSwgYnV0
IGl0J3MgYWxsIG5lZWRlZCBiZWNhdXNlIG9mIGNvcm5lciBjYXNlcwotICAgIC8vIGluc2lkZSBz
dGQ6OmNocm9uby4KLSAgICAvLyBGSVhNRTogU3RvcCB1c2luZyBzdGQ6OmNocm9uby4KLSAgICAK
LSAgICBQYXJraW5nTG90OjpDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0OwotICAgIGlmICh0aW1l
b3V0SW5OYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6
OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgIGVsc2UgewotICAgICAgICBzdGQ6OmNocm9ubzo6bmFu
b3NlY29uZHMgcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aW1lb3V0SW5OYW5vc2Vjb25kcykpOwotICAg
ICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzOjp6ZXJv
KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6Om5vdygpOwotICAg
ICAgICBlbHNlIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBQYXJraW5nTG90OjpDbG9jazo6ZHVyYXRp
b246Om1heCgpKQotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1l
X3BvaW50OjptYXgoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQYXJraW5nTG90OjpD
bG9jazo6ZHVyYXRpb24gbXlSZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PFBhcmtpbmdMb3Q6OkNsb2NrOjpkdXJhdGlvbj4ocmVsYXRp
dmVUaW1lb3V0KTsKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCkgKyBteVJlbGF0aXZlVGltZW91dDsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgdGltZW91
dCA9IFNlY29uZHM6OmluZmluaXR5KCk7CiAgICAgCiAgICAgYm9vbCBkaWRQYXNzVmFsaWRhdGlv
biA9IGZhbHNlOwogICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcmVzdWx0OwpAQCAtMzUxLDcg
KzMzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAg
ICAgICAgICAgICByZXR1cm4gZGlkUGFzc1ZhbGlkYXRpb247CiAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgW10gKCkgeyB9LAotICAgICAgICAgICAgdGltZW91dCk7CisgICAgICAgICAgICBN
b25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVvdXQpOwogICAgIH0KICAgICBjb25zdCBjaGFyKiBy
ZXN1bHRTdHJpbmc7CiAgICAgaWYgKCFkaWRQYXNzVmFsaWRhdGlvbikKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4MzU4KQorKysgU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksMTYgQEAKIAkJMEY0M0Q4RjIxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1Ro
cmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovOyB9OwogCQkwRjQ1
NzA0MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERv
bWluYXRvcnMuaCAqLzsgfTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3
MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CisJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgKi87IH07CisJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZCMjgxMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLzsgfTsKKwkJMEY2NkIyOEMxREM5N0JBQjAw
NEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1Rp
bWUuY3BwICovOyB9OworCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGlt
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIy
ODMxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLzsgfTsKKwkJMEY2NkIyOEUx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMu
Y3BwICovOyB9OworCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODUxREM5N0JB
QjAwNEExRDNGIC8qIFNlY29uZHMuaCAqLzsgfTsKKwkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NjFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOTExREM5N0JBQjAwNEExRDNG
IC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oICovOyB9OworCQkwRjY2QjI5MjFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLzsgfTsKKwkJMEY2
NkIyOTMxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyogV2Fs
bFRpbWUuaCAqLzsgfTsKIAkJMEY3MjVDQUMxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNBQjFD
NTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLzsgfTsKIAkJMEY3QzVGQjYxRDg4NUNGMjAw
NDRGNUUyIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3QzVGQjUxRDg4NUNGMjAwNDRGNUUyIC8qIEZhc3RCaXRWZWN0
b3IuY3BwICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CkBAIC0zNzIsNiArMzgy
LDE2IEBACiAJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21p
bmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWluYXRvcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8q
IEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnViYmxlU29y
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFE
M0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgxMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2xvY2tUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgy
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vbm90b25pY1RpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb25vdG9uaWNUaW1lLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY29uZHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyog
U2Vjb25kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNvbmRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODgxREM5
N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdhbGxUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODkxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhbGxUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSYW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjdDNUZCNTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjMsNiArODgzLDggQEAKIAkJCQlFQjk1
RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJQThBNDcyNkExNTFB
ODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThBNDcyNkIxNTFB
ODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCisJCQkJMEY2NkIyODAxREM5N0JB
QjAwNEExRDNGIC8qIENsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIyODExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5oICovLAogCQkJCTBGQzRFREU1MTY5NjE0OTYwMEY2NTA0MSAvKiBD
b21tYVByaW50ZXIuaCAqLywKIAkJCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGls
YXRpb25UaHJlYWQuY3BwICovLAogCQkJCTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oICovLApAQCAtOTQ2LDYgKzk2OCw4IEBACiAJCQkJQThBNDcyQ0QxNTFB
ODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCUE4QTQ3MkNFMTUxQTgy
NUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCiAJCQkJQThBNDcyQ0YxNTFBODI1QjAw
NDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLywKKwkJCQkwRjY2QjI4MjFEQzk3QkFC
MDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi8sCisJCQkJMEY2NkIyODMxREM5N0JBQjAw
NEExRDNGIC8qIE1vbm90b25pY1RpbWUuaCAqLywKIAkJCQlGRTgyMjUzMDFCMkExRTVCMDBCQTY4
RkQgLyogTmFrZWRQdHIuaCAqLywKIAkJCQkxQTNGNkJFNjE3NEFEQTIxMDBCMkVFQTcgLyogTmV2
ZXJEZXN0cm95ZWQuaCAqLywKIAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2Nr
LmggKi8sCkBAIC0xMDA3LDYgKzEwMzEsOCBAQAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0
NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJMUEzNTI0QUExRDYzQTJGRjAwMzE3MjlC
IC8qIFNjb3BlLmggKi8sCiAJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExh
bWJkYS5oICovLAorCQkJCTBGNjZCMjg0MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCAq
LywKKwkJCQkwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICovLAogCQkJCUE4
QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCQlBOEE0
NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThB
NDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTA0Myw2ICsxMDY5LDgg
QEAKIAkJCQlBOEE0NzMzNjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3Bw
ICovLAogCQkJCUE4QTQ3MzNFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRl
ZC5oICovLAogCQkJCUE4QTQ3MzNGMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5o
ICovLAorCQkJCTBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuY3BwICovLAorCQkJCTBGNjZCMjg3MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUuaCAqLywKIAkJCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi8sCiAJCQkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJT
ZXQuaCAqLywKIAkJCQkxNDlFRjE2MjE2QkJGRTBEMDAwQTQzMzEgLyogVHJpU3RhdGUuaCAqLywK
QEAgLTEwNTQsNiArMTA4Miw4IEBACiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZl
Y3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMu
aCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCisJCQkJ
MEY2NkIyODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLywKKwkJCQkwRjY2QjI4
OTFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLywKIAkJCQk5NzRDRkM4RDE2QTRGMzI3
MDA2RDU0MDQgLyogV2Vha1B0ci5oICovLAogCQkJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAv
KiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRM
b2NrLmNwcCAqLywKQEAgLTEyNTksNyArMTI4OSw5IEBACiAJCQkJMEZCMTRFMTkxODBGQTIxODAw
OUI2QjREIC8qIEJhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUIxODEwRTFEQzAwOUI2
QjREIC8qIEJhZ1RvSGFzaE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODEzNDAxMzkxNUIwOTJG
RDAwMUZGMEI4IC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEYxREM5N0JB
QjAwNEExRDNGIC8qIFNlY29uZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0E5MTUxQTgy
NUIwMDQxMjNGRiAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOTEx
REM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDczQUIxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0NTIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOEExNTFBODI1QjAwNDEyM0ZGIC8qIEJpdG1hcC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMzQwLDYgKzEzNzIsNyBAQAogCQkJCTkzQUM5MUE4MTg5NDJGQzQw
MDI0NDkzOSAvKiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0MjAw
QzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MERBMDg1MTc5OUYw
NEQwMDUyOUE5QiAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOTMxREM5
N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFMTE1
MUE4MjVCMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTE2
NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNF
MzE1MUE4MjVCMDA0MTIzRkYgLyogTG9ja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzOTksNiAr
MTQzMiw3IEBACiAJCQkJMTRGM0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRo
bWV0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBT
Y2hlZHVsZVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzUyNEFCMUQ2M0EyRkYwMDMxNzI5
QiAvKiBTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NkIyOEQxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NEIxMUJEQUNEMzkw
MDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDk4QjAyMUMx
NkE0RjkwMDA4Nzc5NyAvKiBTZWN1cml0eVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
MUYxNTFBODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNDY2LDYgKzE1MDAsNyBAQAogCQkJCUU0QTBBRDNBMUE5NjI0NTUwMDUzNkRGNiAvKiBXb3Jr
UXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ2MTUxQTgyNUIwMDQxMjNGRiAvKiBX
VEZTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI4QjFEQzk3QkFCMDA0
QTFEM0YgLyogQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTczRTAyNTE5RENCN0FC
MDA1ODBENUMgLyogWFBDU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDOEIwRTFBMUUwMUE0ODZF
Qjk1RTBEMTEgLyogSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM5MTZCOTc1RjAyRjRG
N0U4QjRBQjEyRCAvKiBJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTgxLDYgKzE2MTYs
NyBAQAogCQkJCUE4QTQ3M0FBMTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uY2MgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ1MTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzhCMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRWZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQ0VFMjIwMTFD
RUE3NTUxMDAwQzIzOTYgLyogQmxvY2tPYmpDRXhjZXB0aW9ucy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3M0FDMTUxQTgyNUIwMDQxMjNGRiAvKiBjYWNoZWQtcG93ZXJzLmNjIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThBNDc0NjAxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9yRGVmYXVsdC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTE2NDEsNiArMTY3Nyw5IEBACiAJCQkJQTVCQTE1RjMxODI0
MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3
MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY2QjI4QTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0
b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMy
MzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQ1MThBMUYx
NjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNjUyLDYg
KzE2OTEsNyBAQAogCQkJCUE4QTQ3NDQ4MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRBMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGNjZCMjhDMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFDMTgxQzhGMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkxMUQzMDdBQjgwMEY1RkExNiAvKiBVVGV4dFByb3Zp
ZGVyTGF0aW4xLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzkzMUQzMDdBQjgwMEY1RkEx
NiAvKiBVVGV4dFByb3ZpZGVyVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw5ICsxODAsOCBAQCB2
b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9ja0hvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0b3AobG9ja2VyKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpXYWl0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNodXQgdGhlIHRocmVhZCBkb3duIGFmdGVyIG9uZSBzZWNvbmQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZW91dCA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXdva2VuQnlO
b3RpZnkgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5tX2NvbmRp
dGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMoKm1fbG9jaywgdGltZW91dCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRG
b3IoKm1fbG9jaywgU2Vjb25kcygxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3
b2tlbkJ5Tm90aWZ5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlz
KSwgIjogR29pbmcgdG8gc2xlZXAhXG4iKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ2xvY2tUeXBlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsb2NrVHlwZS5oIgorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQ2xvY2tUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAgICAgIG91dC5wcmludCgi
V2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90b25pYzoK
KyAgICAgICAgb3V0LnByaW50KCJNb25vdG9uaWMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ2xvY2tUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
Q2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitlbnVtIGNsYXNzIENsb2NrVHlwZSB7
CisgICAgV2FsbCwKKyAgICBNb25vdG9uaWMKK307CisKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBDbG9ja1R5cGUpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwordXNpbmcgV1RGOjpDbG9ja1R5cGU7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBX
VEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFs
PgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAg
QEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1
Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6
ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9u
QmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5nTG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25k
aXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQgb2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5h
bGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxzCisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1l
IENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRvIHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dl
dmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5saWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNv
c3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgTW9ub3JvbmljVGltZS4KKyAg
ICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUgVGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEg
cGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5s
b2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1
cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0
bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGlj
aCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sgZm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJl
aGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBPcGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9u
IGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBi
b29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkK
KyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAg
IGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygpKSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGlt
ZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsKICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzky
LDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVu
IHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQg
aW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wg
d2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25z
dCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgYm9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tU
eXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0
IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkp
IHsKICAgICAgICAgICAgIGlmICghd2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3
ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0
aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNh
dGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8vIE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVv
dXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlw
ZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdhaXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2Nr
LCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJl
ZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYgbG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQs
IGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50
aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRpdmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRl
KTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSAr
IHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9vbCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNv
bmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9j
aywgTW9ub3RvbmljVGltZTo6bm93KCkgKyByZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9j
aykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRpbChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4
KCkpOworICAgICAgICB3YWl0VW50aWwobG9jaywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0x
MjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQo
bG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1l
IFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1l
VHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjpt
YXgoKSkgewotICAgICAgICAgICAgd2FpdChsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0g
VGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBs
b2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVy
biB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJl
bnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAg
IGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3Vi
bGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9y
U2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlw
ZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGltZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHBy
ZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25k
cyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMgKiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFz
IE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2so
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGlt
ZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGlu
dGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAgIC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVy
LgotICAgICAgICAgICAgd2FpdChsb2NrLCBwcmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0
ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2
NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0
Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBO
b3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2Fp
dGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5n
IHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3
b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9uZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVj
dCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUm
IGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91
YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAq
ICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjApOwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVs
YXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAwKSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5k
bGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwgYXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxv
Y2soKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4g
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkp
IHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBi
ZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQgaW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAg
Ly8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1
dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25k
cyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0g
ICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0K
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25U
eXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9u
VHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChs
b2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShyZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlvblR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQg
YWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3QgRHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQp
Ci0gICAgewotICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJv
KCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAg
ICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBDbG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdl
IHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3
aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5zaWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9u
IGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBiZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVz
aW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAgICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6
bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJl
bGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxD
bG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGltZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2Nr
Ojpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBt
X2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAKIGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25k
aXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDog
U291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dU
Ri93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBA
IERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8RGF0YVR5cGU+Ojp3YWkKICAgICAgICAgaWYgKGZv
dW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGltZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMo
bV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVldWUudGFrZUZpcnN0KCk7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ3Vy
cmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50
VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIHNsZWVwKGRv
dWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2NrOwogICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0
aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tlcihmYWtlTG9jayk7Ci0gICAgZmFrZUNvbmRp
dGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMoZmFrZUxvY2ssIG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOworICAgIGZha2VDb25kaXRpb24ud2FpdEZvcihm
YWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9N
ZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtNjUsNyArNjYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlKCk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxEYXRhVHlwZT4gdHJ5R2V0TWVzc2FnZUlnbm9yaW5nS2lsbGVkKCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBl
PiB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2FpdFJlc3Vs
dCYsIFByZWRpY2F0ZSYmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPERhdGFUeXBlPiB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2Fn
ZVF1ZXVlV2FpdFJlc3VsdCYsIFByZWRpY2F0ZSYmLCBXYWxsVGltZSBhYnNvbHV0ZVRpbWUpOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KICAgICAgICAgdm9pZCByZW1v
dmVJZihQcmVkaWNhdGUmJik7CkBAIC03Niw4ICs3Nyw2IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICAvLyBUaGUgcmVzdWx0IG9mIGlzRW1wdHkoKSBpcyBvbmx5IHZhbGlkIGlmIG5vIG90aGVy
IHRocmVhZCBpcyBtYW5pcHVsYXRpbmcgdGhlIHF1ZXVlIGF0IHRoZSBzYW1lIHRpbWUuCiAgICAg
ICAgIGJvb2wgaXNFbXB0eSgpOwogCi0gICAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdGVUaW1l
KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsgfQotCiAgICAg
cHJpdmF0ZToKICAgICAgICAgbXV0YWJsZSBMb2NrIG1fbXV0ZXg7CiAgICAgICAgIENvbmRpdGlv
biBtX2NvbmRpdGlvbjsKQEAgLTEzMCwxNCArMTI5LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
IGlubGluZSBhdXRvIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OndhaXRGb3JNZXNzYWdlKCkgLT4g
c3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAgICAgTWVzc2FnZVF1ZXVlV2Fp
dFJlc3VsdCBleGl0UmVhc29uOyAKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiBy
ZXN1bHQgPSB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10o
Y29uc3QgRGF0YVR5cGUmKSB7IHJldHVybiB0cnVlOyB9LCBpbmZpbml0ZVRpbWUoKSk7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4gcmVzdWx0ID0gd2FpdEZvck1lc3NhZ2VGaWx0
ZXJlZFdpdGhUaW1lb3V0KGV4aXRSZWFzb24sIFtdKGNvbnN0IERhdGFUeXBlJikgeyByZXR1cm4g
dHJ1ZTsgfSwgV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgICAgICBBU1NFUlQoZXhpdFJlYXNv
biA9PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkIHx8IGV4aXRSZWFzb24gPT0gTWVzc2FnZVF1ZXVl
TWVzc2FnZVJlY2VpdmVkKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNh
dGU+Ci0gICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2FpdEZvck1lc3Nh
Z2VGaWx0ZXJlZFdpdGhUaW1lb3V0KE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQmIHJlc3VsdCwgUHJl
ZGljYXRlJiYgcHJlZGljYXRlLCBkb3VibGUgYWJzb2x1dGVUaW1lKSAtPiBzdGQ6OnVuaXF1ZV9w
dHI8RGF0YVR5cGU+CisgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2Fp
dEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0KE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQmIHJl
c3VsdCwgUHJlZGljYXRlJiYgcHJlZGljYXRlLCBXYWxsVGltZSBhYnNvbHV0ZVRpbWUpIC0+IHN0
ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9jayht
X211dGV4KTsKICAgICAgICAgYm9vbCB0aW1lZE91dCA9IGZhbHNlOwpAQCAtMTUxLDEwICsxNTAs
MTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBpZiAoZm91bmQgIT0gbV9xdWV1ZS5l
bmQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgdGltZWRPdXQgPSAh
bV9jb25kaXRpb24ud2FpdFVudGlsV2FsbENsb2NrU2Vjb25kcyhtX211dGV4LCBhYnNvbHV0ZVRp
bWUpOworICAgICAgICAgICAgdGltZWRPdXQgPSAhbV9jb25kaXRpb24ud2FpdFVudGlsKG1fbXV0
ZXgsIGFic29sdXRlVGltZSk7CiAgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQoIXRpbWVkT3V0
IHx8IGFic29sdXRlVGltZSAhPSBpbmZpbml0ZVRpbWUoKSk7CisgICAgICAgIEFTU0VSVCghdGlt
ZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IFdhbGxUaW1lOjppbmZpbml0eSgpKTsKIAogICAgICAg
ICBpZiAobV9raWxsZWQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IE1lc3NhZ2VRdWV1ZVRlcm1p
bmF0ZWQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisKKyNpbmNsdWRl
ICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworbmFtZXNw
YWNlIFdURiB7CisKK01vbm90b25pY1RpbWUgTW9ub3RvbmljVGltZTo6bm93KCkKK3sKKyAgICBN
b25vdG9uaWNUaW1lIHJlc3VsdDsKKyAgICByZXN1bHQubV92YWx1ZSA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dhbGxUaW1lIE1vbm90
b25pY1RpbWU6OmFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAqdGhp
cyAtIG5vdygpICsgV2FsbFRpbWU6Om5vdygpOworfQorCit2b2lkIE1vbm90b25pY1RpbWU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk1vbm90b25pYygi
LCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBNb25vdG9uaWNUaW1lOjpzbGVlcCgpIGNv
bnN0Cit7CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNU
aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNp
bmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV2FsbFRp
bWU7CitjbGFzcyBQcmludFN0cmVhbTsKKworLy8gVGhlIGN1cnJlbnQgdGltZSBhY2NvcmRpbmcg
dG8gYSBtb25vdG9uaWMgY2xvY2suIE1vbm90b25pYyBjbG9ja3MgZG9uJ3QgZ28gYmFja3dhcmRz
IGFuZAorLy8gcG9zc2libHkgZG9uJ3QgY291bnQgZG93bnRpbWUuIFRoaXMgdXNlcyBmbG9hdGlu
ZyBwb2ludCBpbnRlcm5hbGx5IHNvIHRoYXQgeW91IGNhbiByZWFzb24gYWJvdXQKKy8vIGluZmlu
aXR5IGFuZCBvdGhlciB0aGluZ3MgdGhhdCBhcmlzZSBpbiBtYXRoLiBJdCdzIGFjY2VwdGFibGUg
dG8gdXNlIHRoaXMgdG8gd3JhcCBOYU4gdGltZXMsCisvLyBuZWdhdGl2ZSB0aW1lcywgYW5kIGlu
ZmluaXRlIHRpbWVzLCBzbyBsb25nIGFzIHRoZXkgYXJlIGFsbCByZWxhdGl2ZSB0byB0aGUgc2Ft
ZSBjbG9jay4KKy8vIFNwZWNpZmljYWxseSwgTW9ub3RvbmljVGltZSBzaG91bGQgYmUgdXNlZCBp
biBhZ3JlZW1lbnQgd2l0aCB0aGUgcHJpbmNpcGxlIHRoYXQKKy8vIE1vbm90b25pY1RpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSBpcyB0aGUgc2FtZSBhcworLy8gV1RGOjpt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4KK2NsYXNzIE1vbm90b25pY1RpbWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBDbG9ja1R5cGUgY2xvY2tUeXBlID0gQ2xvY2tUeXBlOjpN
b25vdG9uaWM7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgZXBvY2guIFNvLCB4LnNlY29uZHNT
aW5jZUVwb2NoKCkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHggLSBNb25vdG9uaWNUaW1lKCkuCisg
ICAgTW9ub3RvbmljVGltZSgpIHsgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25v
dyBmb3Igc3VyZSB0aGF0IHRoZSBkb3VibGUgcmVwcmVzZW50cyB0aW1lIGFjY29yZGluZyB0bwor
ICAgIC8vIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkuIEl0IG11c3QgYmUgaW4g
c2Vjb25kcyBhbmQgaXQgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIHRpbWUKKyAgICAvLyBzb3VyY2Uu
CisgICAgc3RhdGljIE1vbm90b25pY1RpbWUgZnJvbVJhd0RvdWJsZShkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICBNb25vdG9uaWNUaW1lIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBNb25vdG9uaWNUaW1lIG5vdygpOworICAgIAorICAgIHN0
YXRpYyBNb25vdG9uaWNUaW1lIGluZmluaXR5KCkgeyByZXR1cm4gZnJvbVJhd0RvdWJsZShzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisKKyAgICBTZWNvbmRzIHNl
Y29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlKTsgfQorICAg
IAorICAgIE1vbm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QgeyBy
ZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgYXBwcm94aW1h
dGVXYWxsVGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJh
dG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdE
b3VibGUobV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBNb25vdG9u
aWNUaW1lIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZyb21SYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAK
KyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRo
aXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNv
LCB3ZSBhbGxvdyBpdC4KKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAgIAor
ICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgTW9ub3Rv
bmljVGltZSBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9y
LShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29u
ZHMobV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPT0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoTW9u
b3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwg
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oTW9ub3Rvbmlj
VGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIu
bV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KE1vbm90b25pY1RpbWUg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oTW9ub3RvbmljVGltZSBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TW9ub3RvbmljVGltZTsKKwpJbmRleDogU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFy
a2luZ0xvdC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdM
b3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKIAogICAgIFRo
cmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllcjsKICAgICAKLSAgICBzdGQ6Om11dGV4IHBh
cmtpbmdMb2NrOwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247
CisgICAgTXV0ZXggcGFya2luZ0xvY2s7CisgICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25k
aXRpb247CiAKICAgICBjb25zdCB2b2lkKiBhZGRyZXNzIHsgbnVsbHB0ciB9OwogICAgIApAQCAt
NTY0LDcgKzU2NCw3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsK
ICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgIGNvbnN0IFNjb3BlZExhbWJkYTxib29sKCk+
JiB2YWxpZGF0aW9uLAogICAgIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKCk+JiBiZWZvcmVTbGVl
cCwKLSAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KQorICAgIGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKIHsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHBhcmtpbmcuXG4iKSk7CkBAIC01OTIs
MjAgKzU5MiwxNyBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAg
ICAgCiAgICAgYm9vbCBkaWRHZXREZXF1ZXVlZDsKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7Ci0gICAgICAgIHdoaWxl
IChtZS0+YWRkcmVzcyAmJiBDbG9jazo6bm93KCkgPCB0aW1lb3V0KSB7Ci0gICAgICAgICAgICAv
LyBGYWxsaW5nIGJhY2sgdG8gd2FpdCgpIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiBsaWJzdGRjKysg
aW1wbGVtZW50YXRpb24gb2Ygc3RkOjpjb25kaXRpb25fdmFyaWFibGUuIFNlZToKLSAgICAgICAg
ICAgIC8vIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODAyNwot
ICAgICAgICAgICAgLy8gLSBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNn
aT9pZD01ODkzMQotICAgICAgICAgICAgaWYgKHRpbWVvdXQgPT0gQ2xvY2s6OnRpbWVfcG9pbnQ6
Om1heCgpKQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2Vy
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlv
bi53YWl0X3VudGlsKGxvY2tlciwgdGltZW91dCk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtZS0+cGFya2luZ0xvY2spOworICAgICAgICB3aGlsZSAobWUtPmFkZHJlc3MgJiYgdGltZW91
dC5ub3dXaXRoU2FtZUNsb2NrKCkgPCB0aW1lb3V0KSB7CisgICAgICAgICAgICBtZS0+cGFya2lu
Z0NvbmRpdGlvbi50aW1lZFdhaXQoCisgICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdMb2NrLCB0
aW1lb3V0LmFwcHJveGltYXRlV2FsbFRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCZWNhdXNlIG9mIHRoZSBhYm92ZSwgd2Ug
ZG8gdGhpcyB0aGluZywgd2hpY2ggaXMgaGlsYXJpb3VzbHkgYXdmdWwsIGJ1dCBlbnN1cmVzIHRo
YXQgdGhlIHdvcnN0IGNhc2UgaXMKLSAgICAgICAgICAgIC8vIGEgQ1BVLWVhdGluZyBzcGluIGJ1
dCBub3QgYSBkZWFkbG9jay4KLSAgICAgICAgICAgIGxvY2tlci51bmxvY2soKTsKLSAgICAgICAg
ICAgIGxvY2tlci5sb2NrKCk7CisgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciB0aGUg
T1MgdG8gZGVjaWRlIG5vdCB0byB3YWl0LiBJZiBpdCBkb2VzIHRoYXQgdGhlbiBpdCB3aWxsIGFs
c28KKyAgICAgICAgICAgIC8vIGRlY2lkZSBub3QgdG8gcmVsZWFzZSB0aGUgbG9jay4gSWYgdGhl
cmUncyBhIGJ1ZyBpbiB0aGUgdGltZSBtYXRoLCB0aGVuIHRoaXMgY291bGQKKyAgICAgICAgICAg
IC8vIHJlc3VsdCBpbiBhIGRlYWRsb2NrLiBGbGFzaGluZyB0aGUgbG9jayBtZWFucyB0aGF0IGF0
IHdvcnN0IGl0J3MganVzdCBhIENQVS1lYXRpbmcKKyAgICAgICAgICAgIC8vIHNwaW4uCisgICAg
ICAgICAgICBtZS0+cGFya2luZ0xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBtZS0+cGFya2lu
Z0xvY2subG9jaygpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVCghbWUtPmFkZHJlc3MgfHwg
bWUtPmFkZHJlc3MgPT0gYWRkcmVzcyk7CiAgICAgICAgIGRpZEdldERlcXVldWVkID0gIW1lLT5h
ZGRyZXNzOwpAQCAtNjQwLDE0ICs2MzcsMTQgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBh
cmtSZXN1bHQgUGFyawogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm8gbWF0dGVyIHdoYXQsIG1l
LT5hZGRyZXNzIGlzIG51bGwgYWZ0ZXIgdGhpcyBwb2ludC4KICAgICB7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtZS0+cGFya2luZ0xvY2spOwogICAgICAgICBpZiAoIWRpZERl
cXVldWUpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3QgZGVxdWV1ZSBvdXJzZWx2ZXMs
IHRoZW4gc29tZW9uZSBlbHNlIGRpZC4gVGhleSB3aWxsIHNldCBvdXIgYWRkcmVzcyB0bwogICAg
ICAgICAgICAgLy8gbnVsbC4gV2UgZG9uJ3Qgd2FudCB0byBwcm9jZWVkIHVudGlsIHRoZXkgZG8g
dGhpcywgYmVjYXVzZSBvdGhlcndpc2UsIHRoZXkgbWF5IHNldAogICAgICAgICAgICAgLy8gb3Vy
IGFkZHJlc3MgdG8gbnVsbCBpbiBzb21lIGRpc3RhbnQgZnV0dXJlIHdoZW4gd2UncmUgYWxyZWFk
eSB0cnlpbmcgdG8gd2FpdCBmb3IKICAgICAgICAgICAgIC8vIG90aGVyIHRoaW5ncy4KICAgICAg
ICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcykKLSAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0Nv
bmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRp
b24ud2FpdChtZS0+cGFya2luZ0xvY2spOwogICAgICAgICB9CiAgICAgICAgIG1lLT5hZGRyZXNz
ID0gbnVsbHB0cjsKICAgICB9CkBAIC02OTUsMTEgKzY5MiwxMSBAQCBORVZFUl9JTkxJTkUgUGFy
a2luZ0xvdDo6VW5wYXJrUmVzdWx0IFBhCiAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3Mp
OwogICAgIAogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
ZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOwogICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0g
bnVsbHB0cjsKICAgICAgICAgdGhyZWFkRGF0YS0+dG9rZW4gPSAwOwogICAgIH0KLSAgICB0aHJl
YWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICB0aHJlYWREYXRhLT5w
YXJraW5nQ29uZGl0aW9uLnNpZ25hbCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0
MSwxMSArNzM4LDExIEBAIE5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya09uZUkK
ICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgCiAgICAgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9j
ayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7
CiAgICAgICAgIHRocmVhZERhdGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgIH0KICAgICAvLyBB
dCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkRGF0YSBtYXkgZGllLiBHb29kIHRoaW5nIHdlIGhhdmUg
YSBSZWZQdHI8PiBvbiBpdC4KLSAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlm
eV9vbmUoKTsKKyAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLnNpZ25hbCgpOwogfQog
CiBORVZFUl9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrQ291bnQoY29uc3Qgdm9p
ZCogYWRkcmVzcywgdW5zaWduZWQgY291bnQpCkBAIC03NzksMTAgKzc3NiwxMCBAQCBORVZFUl9J
TkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6dW5wYXJrCiAgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nICIsIFJhd1BvaW50ZXIodGhyZWFk
RGF0YS5nZXQoKSksICIgd2l0aCBhZGRyZXNzICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRk
cmVzcyksICJcbiIpKTsKICAgICAgICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0
aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
dGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOwogICAgICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVz
cyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRp
dGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24u
c2lnbmFsKCk7CiAgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QYXJraW5nTG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5o
CShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBAQAogI2lmbmRlZiBXVEZfUGFya2luZ0xvdF9oCiAj
ZGVmaW5lIFdURl9QYXJraW5nTG90X2gKIAotI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxm
dW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3Bl
ZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zOSw3ICsz
OSwxNSBAQCBjbGFzcyBQYXJraW5nTG90IHsKICAgICBQYXJraW5nTG90KGNvbnN0IFBhcmtpbmdM
b3QmKSA9IGRlbGV0ZTsKIAogcHVibGljOgotICAgIHR5cGVkZWYgc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jayBDbG9jazsKKyAgICAvLyBQYXJraW5nTG90IHdpbGwgYWNjZXB0IGFueSBraW5kIG9m
IHRpbWUgYW5kIGNvbnZlcnQgaXQgaW50ZXJuYWxseSwgYnV0IHRoaXMgdHlwZWRlZiB0ZWxscwor
ICAgIC8vIHlvdSB3aGF0IGtpbmQgb2YgdGltZSBQYXJraW5nTG90IHdvdWxkIGJlIGFibGUgdG8g
dXNlIHdpdGhvdXQgY29udmVyc2lvbnMuIEl0J3Mgc2FkIHRoYXQKKyAgICAvLyB0aGlzIGlzIFdh
bGxUaW1lIG5vdCBNb25vdG9uaWNUaW1lLCBidXQgdGhhdCdzIGp1c3QgaG93IE9TIHdhaXQgZnVu
Y3Rpb25zIHdvcmsuIEhvd2V2ZXIsCisgICAgLy8gYmVjYXVzZSBQYXJraW5nTG90IGV2YWx1YXRl
cyB3aGV0aGVyIGl0IHNob3VsZCB3YWl0IGJ5IGNoZWNraW5nIGlmIHlvdXIgdGltZSBoYXMgcGFz
c2VkCisgICAgLy8gdXNpbmcgd2hhdGV2ZXIgY2xvY2sgeW91IHVzZWQsIHNwZWNpZnlpbmcgdGlt
ZW91dHMgaW4gTW9ub3RvbmljVGltZSBpcyBzZW1hbnRpY2FsbHkgYmV0dGVyLgorICAgIC8vIEZv
ciBleGFtcGxlLCBpZiB0aGUgdXNlciBzZXRzIGhpcyBjb21wdXRlcidzIGNsb2NrIGJhY2sgZHVy
aW5nIHRoZSB0aW1lIHRoYXQgeW91IHdhbnRlZCB0bworICAgIC8vIHdhaXQgZm9yIG9uZSBzZWNv
bmQsIGFuZCB5b3Ugc3BlY2lmaWVkIHRoZSB0aW1lb3V0IHVzaW5nIHRoZSBNb25vdG9uaWNUaW1l
LCB0aGVuIFBhcmtpbmdMb3QKKyAgICAvLyB3aWxsIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRo
YXQgeW91ciBvbmUgc2Vjb25kIGhhcyBlbGFwc2VkLgorICAgIHR5cGVkZWYgV2FsbFRpbWUgVGlt
ZTsKICAgICAKICAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3
aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCiAgICAgLy8g
cGFya2luZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMg
dHJ1ZSB3aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgpAQCAtNjgsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgICAgIGNvbnN0IFZhbGlkYXRp
b25GdW5jdG9yJiB2YWxpZGF0aW9uLAogICAgICAgICBjb25zdCBCZWZvcmVTbGVlcEZ1bmN0b3Im
IGJlZm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KQorICAgICAg
ICBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpCiAgICAgewogICAgICAg
ICByZXR1cm4gcGFya0NvbmRpdGlvbmFsbHlJbXBsKAogICAgICAgICAgICAgYWRkcmVzcywKQEAg
LTg5LDcgKzk3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBl
eHBlY3RlZDsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAg
ICAgICBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICAgICAgVGltZTo6aW5maW5p
dHkoKSk7CiAgICAgfQogCiAgICAgLy8gVW5wYXJraW5nIHN0YXR1cyBnaXZlbiB0byB5b3UgYW55
dGltZSB5b3UgdW5wYXJrT25lKCkuCkBAIC0xNTgsNyArMTY2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2wo
KT4mIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKCk+JiBiZWZv
cmVTbGVlcCwKLSAgICAgICAgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCk7CisgICAgICAgIGNv
bnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCk7CiAgICAgCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVucGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZv
aWQqIGFkZHJlc3MsIGNvbnN0IFNjb3BlZExhbWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYg
Y2FsbGJhY2spOwpJbmRleDogU291cmNlL1dURi93dGYvU2Vjb25kcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU2Vjb25kcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dU
Ri93dGYvU2Vjb25kcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2Vjb25kcy5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNp
bmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNs
dWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJXYWxsVGltZS5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworV2FsbFRpbWUgU2Vjb25kczo6b3BlcmF0b3IrKFdhbGxUaW1l
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBvdGhlciArICp0aGlzOworfQorCitNb25vdG9u
aWNUaW1lIFNlY29uZHM6Om9wZXJhdG9yKyhNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorewor
ICAgIHJldHVybiBvdGhlciArICp0aGlzOworfQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUg
U2Vjb25kczo6b3BlcmF0b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1dhbGxUaW1lIFNlY29u
ZHM6Om9wZXJhdG9yLShXYWxsVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gV2FsbFRp
bWU6OmZyb21SYXdEb3VibGUodmFsdWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCkudmFs
dWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3ItKE1vbm90b25pY1Rp
bWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdEb3Vi
bGUodmFsdWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Cit9CisKK1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBTZWNvbmRzOjpvcGVyYXRvci0oY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIud2l0aFNh
bWVDbG9ja0FuZFJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpKTsKK30KKwordm9pZCBTZWNvbmRzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUsICIgc2VjIik7Cit9CisKK3ZvaWQgU2Vjb25kczo6
c2xlZXAoKSBjb25zdAoreworICAgIFdURjo6c2xlZXAobV92YWx1ZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU2Vjb25kcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYv
d3RmL1NlY29uZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIE1vbm90b25pY1RpbWU7CitjbGFzcyBQcmludFN0cmVhbTsK
K2NsYXNzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTsKK2NsYXNzIFdhbGxUaW1lOworCitjbGFz
cyBTZWNvbmRzIHsKK3B1YmxpYzoKKyAgICBTZWNvbmRzKCkgeyB9CisgICAgCisgICAgZXhwbGlj
aXQgU2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKyAgICAKKyAgICBkb3VibGUgc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KyAgICBkb3VibGUgbWlsbGlzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gc2Vjb25kcygpICogMTAw
MDsgfQorICAgIGRvdWJsZSBtaWNyb3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWxsaXNlY29u
ZHMoKSAqIDEwMDA7IH0KKyAgICBkb3VibGUgbmFub3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBt
aWNyb3NlY29uZHMoKSAqIDEwMDA7IH0KKyAgICAKKyAgICBzdGF0aWMgU2Vjb25kcyBmcm9tTWls
bGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZh
bHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTZWNvbmRzIGZyb21NaWNyb3Nl
Y29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21NaWxsaXNlY29u
ZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNlY29uZHMgZnJvbU5h
bm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tTWljcm9z
ZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTZWNvbmRzIGlu
ZmluaXR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRz
IG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNl
Y29uZHModmFsdWUoKSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
IG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNl
Y29uZHModmFsdWUoKSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
IG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUo
KSk7CisgICAgfQorICAgIAorICAgIC8vIEl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxp
bmcgYSBkdXJhdGlvbiwgbGlrZSwgIkkgd2FudCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcwor
ICAgIC8vIGxhc3QgdGltZSEiLgorICAgIFNlY29uZHMgb3BlcmF0b3IqKGRvdWJsZSBzY2FsYXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpICogc2NhbGFyKTsK
KyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci8oZG91YmxlIHNjYWxhcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgLyBzY2FsYXIpOworICAgIH0K
KyAgICAKKyAgICAvLyBJdCdzIHJlYXNvbmFibGUgdG8gdGhpbmsgYWJvdXQgcmF0aW9zIGJldHdl
ZW4gU2Vjb25kcy4KKyAgICBkb3VibGUgb3BlcmF0b3IvKFNlY29uZHMgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUoKSAvIG90aGVyLnZhbHVlKCk7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMmIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMm
IG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKj0oZG91
YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICogc2NhbGFy
OworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci89KGRvdWJsZSBzY2FsYXIpCisg
ICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAvIHNjYWxhcjsKKyAgICB9CisgICAg
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIG9wZXJhdG9yKyhXYWxsVGltZSkgY29u
c3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKE1vbm90
b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgb3BlcmF0b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0
OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBvcGVyYXRvci0oV2FsbFRp
bWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9y
LShNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUm
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcjwoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj4oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAg
fQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFt
ZXNwYWUgV1RGCisKK3VzaW5nIFdURjo6U2Vjb25kczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aCIKKworI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRl
ICJQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93KENsb2NrVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBy
ZXR1cm4gV2FsbFRpbWU6Om5vdygpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Cisg
ICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
KCk7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdAoreworICAgIHJldHVybiBub3coY2xvY2tUeXBl
KCkpOworfQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OndhbGxUaW1lKCkg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpXYWxsKTsK
KyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdEb3VibGUobV92YWx1ZSk7Cit9CisKK01vbm90
b25pY1RpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjptb25vdG9uaWNUaW1lKCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpNb25vdG9uaWMpOwor
ICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3RG91YmxlKG1fdmFsdWUpOworfQorCitX
YWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2FsbFRpbWUoKSBj
b25zdAoreworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6
CisgICAgICAgIHJldHVybiB3YWxsVGltZSgpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9u
aWM6CisgICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCkuYXBwcm94aW1hdGVXYWxsVGltZSgp
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBX
YWxsVGltZSgpOworfQorCitNb25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6
YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUoKS5h
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKTsKKyAgICBjYXNlIENsb2NrVHlwZTo6TW9ub3Rvbmlj
OgorICAgICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgpOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lKCk7Cit9CisKK1Nl
Y29uZHMgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvci0oY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5
cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIu
bV92YWx1ZSk7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcjwo
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gbV92YWx1ZSA8
IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVy
YXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICByZXR1cm4gbV92
YWx1ZSA+IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
OjpvcGVyYXRvcjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0
dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGU6Om9wZXJhdG9yPj0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhl
cikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsK
KyAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworfQorCit2b2lkIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX3R5cGUsICIoIiwgbV92YWx1ZSwgIiBzZWMpIik7Cit9CisKK3ZvaWQgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgTG9jayBmYWtlTG9jazsK
KyAgICBDb25kaXRpb24gZmFrZUNvbmRpdGlvbjsKKyAgICBMb2NrSG9sZGVyIGZha2VMb2NrZXIo
ZmFrZUxvY2spOworICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VMb2NrLCAqdGhpcyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKworY2xhc3MgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHsK
K3B1YmxpYzoKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoKSB7IH0KKyAgICAKKyAgICBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoV2FsbFRpbWUgdGltZSkKKyAgICAgICAgOiBtX3ZhbHVl
KHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKQorICAgICAgICAsIG1fdHlwZShDbG9j
a1R5cGU6OldhbGwpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUoTW9ub3RvbmljVGltZSB0aW1lKQorICAgICAgICA6IG1fdmFsdWUodGltZS5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpCisgICAgICAgICwgbV90eXBlKENsb2NrVHlwZTo6TW9ub3Rv
bmljKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSBmcm9tUmF3RG91YmxlKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQubV90eXBlID0gdHlwZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9j
aCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICBDbG9ja1R5cGUgY2xv
Y2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93KENsb2NrVHlwZSk7Cisg
ICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBub3dX
aXRoU2FtZUNsb2NrKCkgY29uc3Q7CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
IHdpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUoZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZnJvbVJhd0RvdWJsZSh2YWx1
ZSwgY2xvY2tUeXBlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3NlcnRzIHRoYXQgdGhlIHRp
bWUgaXMgb2YgdGhlIHR5cGUgeW91IHdhbnQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxU
aW1lIHdhbGxUaW1lKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1Rp
bWUgbW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
YWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIE1vbm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAg
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsg
fQorICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvcisoU2Vjb25kcyBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2NrQW5kUmF3RG91
YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZh
bHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJz
IGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAv
LyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgb3BlcmF0b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2Ft
ZUNsb2NrQW5kUmF3RG91YmxlKC1tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgU2Vjb25kcyBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1
ZSA9PSBvdGhlci5tX3ZhbHVlCisgICAgICAgICAgICAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBl
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgLy8gVG8gZG8gcmVsYXRpdmUgY29tcGFyaXNvbnMs
IHlvdSBtdXN0IGJlIHVzaW5nIHRpbWVzIHdpdGggdGhlIHNhbWUgY2xvY2sgdHlwZS4KKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIG9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29u
c3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7
IDAgfTsKKyAgICBDbG9ja1R5cGUgbV90eXBlIHsgQ2xvY2tUeXBlOjpXYWxsIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvV2FsbFRpbWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dh
bGxUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXYWxsVGltZS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRl
ICJNb25vdG9uaWNUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dhbGxUaW1l
IFdhbGxUaW1lOjpub3coKQoreworICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAgICByZXN1bHQubV92
YWx1ZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTW9ub3Rvbmlj
VGltZSBXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKnRoaXMgLSBub3coKSArIE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCit2b2lkIFdh
bGxUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJX
YWxsKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIFdhbGxUaW1lOjpzbGVlcCgpIGNv
bnN0Cit7CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dURi93dGYvV2FsbFRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vj
b25kcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTW9ub3RvbmljVGltZTsKK2NsYXNz
IFByaW50U3RyZWFtOworCisvLyBUaGUgY3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIHdhbGwg
Y2xvY2sgKGFrYSByZWFsIHRpbWUgY2xvY2spLiBUaGlzIHVzZXMgZmxvYXRpbmcgcG9pbnQKKy8v
IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBhYm91dCBpbmZpbml0eSBhbmQgb3Ro
ZXIgdGhpbmdzIHRoYXQgYXJpc2UgaW4gbWF0aC4gSXQncworLy8gYWNjZXB0YWJsZSB0byB1c2Ug
dGhpcyB0byB3cmFwIE5hTiB0aW1lcywgbmVnYXRpdmUgdGltZXMsIGFuZCBpbmZpbml0ZSB0aW1l
cywgc28gbG9uZyBhcyB0aGV5CisvLyBhcmUgcmVsYXRpdmUgdG8gdGhlIHNhbWUgY2xvY2suIFNw
ZWNpZmljYWxseSwgV2FsbFRpbWUgc2hvdWxkIGJlIHVzZWQgaW4gYWdyZWVtZW50IHdpdGggdGhl
CisvLyBwcmluY2lwbGUgdGhhdCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpIGlzIHRoZSBzYW1lIGFzIFdURjo6Y3VycmVudFRpbWUoKS4KK2NsYXNzIFdhbGxUaW1l
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ2xvY2tUeXBlIGNsb2NrVHlwZSA9IENsb2Nr
VHlwZTo6V2FsbDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4gU28sIHguc2Vjb25k
c1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIFdhbGxUaW1lKCkuCisgICAg
V2FsbFRpbWUoKSB7IH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgZm9yIHN1
cmUgdGhhdCB0aGUgZG91YmxlIHJlcHJlc2VudHMgdGltZSBhY2NvcmRpbmcgdG8KKyAgICAvLyBX
VEY6OmN1cnJlbnRUaW1lKCkuIEl0IG11c3QgYmUgaW4gc2Vjb25kcyBhbmQgaXQgbXVzdCBiZSBm
cm9tIHRoZSBzYW1lIHRpbWUgc291cmNlLgorICAgIHN0YXRpYyBXYWxsVGltZSBmcm9tUmF3RG91
YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXYWxsVGltZSBub3coKTsKKyAg
ICAKKyAgICBzdGF0aWMgV2FsbFRpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9tUmF3RG91Ymxl
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7IH0KKyAgICAKKyAgICBT
ZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25kcyhtX3ZhbHVl
KTsgfQorICAgIAorICAgIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdCB7IHJl
dHVybiAqdGhpczsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIGFwcHJv
eGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBXYWxsVGltZSBv
cGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9t
UmF3RG91YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgV2Fs
bFRpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAor
ICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQgYXMgdGhp
cyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0aW9ucy4gU28s
IHdlIGFsbG93IGl0LgorICAgIFdhbGxUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIFdh
bGxUaW1lJiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBXYWxsVGltZSYgb3BlcmF0
b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMg
LSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oV2FsbFRpbWUgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIu
bV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShXYWxsVGltZSBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShXYWxsVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yPihXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cjw9KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUg
PD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KFdhbGxU
aW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIu
bV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNs
ZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXYWxsVGltZTsKKwpJbmRleDogU291
cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmNwcAkocmV2aXNpb24gMjA4MzU4
KQorKysgU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMyArNDUsMTQgQEAgdm9pZCBCaW5hcnlTZW1hcGhvcmU6OnNpZ25hbCgp
CiAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7CiB9CiAKLWJvb2wgQmluYXJ5U2VtYXBob3JlOjp3
YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCitib29sIEJpbmFyeVNlbWFwaG9yZTo6d2FpdChUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUgYWJzb2x1dGVUaW1lKQogewogICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX211dGV4KTsKIAogICAgIGJvb2wgdGltZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAo
IW1faXNTZXQpIHsKLSAgICAgICAgdGltZWRPdXQgPSAhbV9jb25kaXRpb24udGltZWRXYWl0KG1f
bXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLnRp
bWVkV2FpdCgKKyAgICAgICAgICAgIG1fbXV0ZXgsIGFic29sdXRlVGltZS5hcHByb3hpbWF0ZVdh
bGxUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKICAgICAgICAgaWYgKHRpbWVk
T3V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBCaW5hcnlTZW1hcGhvcmVfaAogCiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpA
QCAtMzksNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5CaW5hcnlT
ZW1hcGhvcmUoKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNpZ25hbCgpOwotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIHdhaXQoZG91YmxlIGFic29sdXRlVGltZSk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgd2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUpOwog
CiBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjA4MzU4KQor
KysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBUaHJlYWRh
YmxlQmxvYlJlZ2lzdHIKICAgICAgICAgICAgIHJlc3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5i
bG9iU2l6ZSh1cmwpOwogICAgICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgICAgICB9
KTsKLSAgICAgICAgc2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
YXgoKSk7CisgICAgICAgIHNlbWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdFNpemU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAkocmV2aXNpb24gMjA4MzU4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWFpblRocmVhZFNoYXJlZFRpbWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBNYWluVGhyZWFkU2hh
cmVkVGltZXImIHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChk
b3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0RmlyZUludGVydmFsKFNlY29uZHMpIG92ZXJy
aWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92
ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHJldmlz
aW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcg
KzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CiAKICAgICAvLyBUaGUgZmlyZSBpbnRlcnZhbCBpcyBp
biBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vbm90b25pYyBjbG9jayB0aW1lLgot
ICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoZG91YmxlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIHsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgVGhyZWFkVGltZXJzOjp1cGRhdGVTaGFyZWRUaW1lcigp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IAogICAgICAgICBtX3BlbmRpbmdT
aGFyZWRUaW1lckZpcmVUaW1lID0gbmV4dEZpcmVUaW1lOwotICAgICAgICBtX3NoYXJlZFRpbWVy
LT5zZXRGaXJlSW50ZXJ2YWwoc3RkOjptYXgobmV4dEZpcmVUaW1lIC0gY3VycmVudE1vbm90b25p
Y1RpbWUsIDAuMCkpOworICAgICAgICBtX3NoYXJlZFRpbWVyLT5zZXRGaXJlSW50ZXJ2YWwoU2Vj
b25kcyhzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJyZW50TW9ub3RvbmljVGltZSwgMC4wKSkp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvTWFpblRocmVh
ZFNoYXJlZFRpbWVyQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MywxMSArOTMsMTEgQEAgdm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6
OmludmFsaWRhdGUoKQogICAgIHNoYXJlZFRpbWVyID0gbnVsbHB0cjsKIH0KIAotdm9pZCBNYWlu
VGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCit2b2lk
IE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwp
CiB7CiAgICAgQVNTRVJUKG1fZmlyZWRGdW5jdGlvbik7CiAKLSAgICBDRkFic29sdXRlVGltZSBm
aXJlRGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWw7CisgICAgQ0ZB
YnNvbHV0ZVRpbWUgZmlyZURhdGUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGludGVy
dmFsLnZhbHVlKCk7CiAgICAgaWYgKCFzaGFyZWRUaW1lcikgewogICAgICAgICBzaGFyZWRUaW1l
ciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKG51bGxwdHIsIGZpcmVEYXRlLCBrQ0ZUaW1lSW50ZXJ2
YWxEaXN0YW50RnV0dXJlLCAwLCAwLCB0aW1lckZpcmVkLCBudWxscHRyKTsKICNpZiBQTEFURk9S
TShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJl
ZFRpbWVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
TWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1lckVmbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDEwICs1MywxMCBAQCB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c3RvcCgpCiAgICAgfQogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUlu
dGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRG
aXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBzdG9wKCk7Ci0gICAgc2hhcmVk
VGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRlcnZhbCwgdGltZXJFdmVudCwgbnVsbHB0
cik7CisgICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRlcnZhbC52YWx1
ZSgpLCB0aW1lckV2ZW50LCBudWxscHRyKTsKIH0KIAogdm9pZCBNYWluVGhyZWFkU2hhcmVkVGlt
ZXI6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9NYWlu
VGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1l
ckdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpNYWluVGhyZWFkU2hhcmVkVAogICAgIG1fdGltZXIuc2V0UHJpb3JpdHkoR19Q
UklPUklUWV9ISUdIX0lETEUgKyAyMCk7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVy
OjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhyZWFkU2hhcmVk
VGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIEFTU0VSVCht
X2ZpcmVkRnVuY3Rpb24pOwotICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGludGVydmFsKTsKKyAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbC52YWx1ZSgpKTsKIH0KIAogdm9pZCBNYWlu
VGhyZWFkU2hhcmVkVGltZXI6OnN0b3AoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAJKHJldmlzaW9u
IDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVk
VGltZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTIgKzEyMSwxMiBAQCBzdGF0aWMg
dm9pZCBOVEFQSSBxdWV1ZVRpbWVyUHJvYyhQVk9JRCwgCiAgICAgICAgIFBvc3RNZXNzYWdlKHRp
bWVyV2luZG93SGFuZGxlLCB0aW1lckZpcmVkTWVzc2FnZSwgMCwgMCk7CiB9CiAKLXZvaWQgTWFp
blRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9p
ZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFs
U2Vjb25kcykKIHsKICAgICBBU1NFUlQobV9maXJlZEZ1bmN0aW9uKTsKIAorICAgIGRvdWJsZSBp
bnRlcnZhbCA9IGludGVydmFsSW5TZWNvbmRzLm1pbGxpc2Vjb25kcygpOwogICAgIHVuc2lnbmVk
IGludGVydmFsSW5NUzsKLSAgICBpbnRlcnZhbCAqPSAxMDAwOwogICAgIGlmIChpbnRlcnZhbCA+
IFVTRVJfVElNRVJfTUFYSU1VTSkKICAgICAgICAgaW50ZXJ2YWxJbk1TID0gVVNFUl9USU1FUl9N
QVhJTVVNOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVu
TG9vcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5M
b29wLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTYgKzQ5LDE2IEBAIGNsYXNzIFdv
cmtlclNoYXJlZFRpbWVyIGZpbmFsIDogcHVibGljIFMKIHB1YmxpYzoKICAgICAvLyBTaGFyZWRU
aW1lciBpbnRlcmZhY2UuCiAgICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiYmIGZ1bmN0aW9uKSBvdmVycmlkZSB7IG1fc2hhcmVkVGltZXJGdW5jdGlvbiA9IFdU
Rk1vdmUoZnVuY3Rpb24pOyB9Ci0gICAgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVy
dmFsKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gaW50ZXJ2YWwgKyBjdXJyZW50VGltZSgp
OyB9Ci0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGUgeyBtX25leHRGaXJlVGltZSA9IDA7IH0KKyAg
ICB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKSBvdmVycmlkZSB7IG1fbmV4
dEZpcmVUaW1lID0gaW50ZXJ2YWwgKyBXYWxsVGltZTo6bm93KCk7IH0KKyAgICB2b2lkIHN0b3Ao
KSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gV2FsbFRpbWUoKTsgfQogCiAgICAgYm9vbCBp
c0FjdGl2ZSgpIHsgcmV0dXJuIG1fc2hhcmVkVGltZXJGdW5jdGlvbiAmJiBtX25leHRGaXJlVGlt
ZTsgfQotICAgIGRvdWJsZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9Cisg
ICAgV2FsbFRpbWUgZmlyZVRpbWUoKSB7IHJldHVybiBtX25leHRGaXJlVGltZTsgfQogICAgIHZv
aWQgZmlyZSgpIHsgbV9zaGFyZWRUaW1lckZ1bmN0aW9uKCk7IH0KIAogcHJpdmF0ZToKICAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9zaGFyZWRUaW1lckZ1bmN0aW9uOwotICAgIGRvdWJsZSBt
X25leHRGaXJlVGltZSB7IDAgfTsKKyAgICBXYWxsVGltZSBtX25leHRGaXJlVGltZTsKIH07CiAK
IGNsYXNzIE1vZGVQcmVkaWNhdGUgewpAQCAtMTU3LDE1ICsxNTcsMTYgQEAgTWVzc2FnZVF1ZXVl
V2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydQogICAgICAgICBnX21haW5fY29udGV4dF9pdGVy
YXRpb24obWFpbkNvbnRleHQsIEZBTFNFKTsKICNlbmRpZgogCi0gICAgZG91YmxlIGRlYWRsaW5l
ID0gTWVzc2FnZVF1ZXVlPFRhc2s+OjppbmZpbml0ZVRpbWUoKTsKKyAgICBXYWxsVGltZSBkZWFk
bGluZSA9IFdhbGxUaW1lOjppbmZpbml0eSgpOwogCiAjaWYgVVNFKENGKQogICAgIENGQWJzb2x1
dGVUaW1lIG5leHRDRlJ1bkxvb3BUaW1lckZpcmVEYXRlID0gQ0ZSdW5Mb29wR2V0TmV4dFRpbWVy
RmlyZURhdGUoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwog
ICAgIGRvdWJsZSB0aW1lVW50aWxOZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMgPSBuZXh0Q0ZS
dW5Mb29wVGltZXJGaXJlRGF0ZSAtIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAgIGRl
YWRsaW5lID0gY3VycmVudFRpbWUoKSArIHN0ZDo6bWF4KDAuMCwgdGltZVVudGlsTmV4dENGUnVu
TG9vcFRpbWVySW5TZWNvbmRzKTsKKyAgICBkZWFkbGluZSA9IFdhbGxUaW1lOjpub3coKSArIHN0
ZDo6bWF4KAorICAgICAgICBTZWNvbmRzKDApLCBTZWNvbmRzKHRpbWVVbnRpbE5leHRDRlJ1bkxv
b3BUaW1lckluU2Vjb25kcykpOwogI2VuZGlmCiAKLSAgICBkb3VibGUgYWJzb2x1dGVUaW1lID0g
MC4wOworICAgIFdhbGxUaW1lIGFic29sdXRlVGltZTsKICAgICBpZiAod2FpdE1vZGUgPT0gV2Fp
dEZvck1lc3NhZ2UpIHsKICAgICAgICAgaWYgKHByZWRpY2F0ZS5pc0RlZmF1bHRNb2RlKCkgJiYg
bV9zaGFyZWRUaW1lci0+aXNBY3RpdmUoKSkKICAgICAgICAgICAgIGFic29sdXRlVGltZSA9IHN0
ZDo6bWluKGRlYWRsaW5lLCBtX3NoYXJlZFRpbWVyLT5maXJlVGltZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDIwODM1OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fd2FpdEZvclN5bmNSZXBs
eVNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9CiAKLSAgICBib29sIHdhaXQoZG91YmxlIGFic29s
dXRlVGltZSkKKyAgICBib29sIHdhaXQoVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGFic29sdXRl
VGltZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dhaXRGb3JTeW5jUmVwbHlTZW1hcGhvcmUu
d2FpdChhYnNvbHV0ZVRpbWUpOwogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCBib29sIENvbm5l
Y3Rpb246OnNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlCiAgICAgICAgIGF1dG8gd3JhcHBlZE1lc3Nh
Z2UgPSBjcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIoIklQQyIsICJXcmFwcGVkQXN5bmNNZXNzYWdl
Rm9yVGVzdGluZyIsIGVuY29kZXItPmRlc3RpbmF0aW9uSUQoKSwgc3luY1JlcXVlc3RJRCk7CiAg
ICAgICAgIHdyYXBwZWRNZXNzYWdlLT5zZXRGdWxseVN5bmNocm9ub3VzTW9kZUZvclRlc3Rpbmco
KTsKICAgICAgICAgd3JhcHBlZE1lc3NhZ2UtPndyYXBGb3JUZXN0aW5nKFdURk1vdmUoZW5jb2Rl
cikpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oc2VuZFN5bmNNZXNzYWdlKHN5
bmNSZXF1ZXN0SUQsIFdURk1vdmUod3JhcHBlZE1lc3NhZ2UpLCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzOjptYXgoKSwgeyB9KSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihz
ZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZSh3cmFwcGVkTWVzc2FnZSksIFNl
Y29uZHM6OmluZmluaXR5KCksIHsgfSkpOwogICAgIH0KIAogICAgIGlmIChzZW5kT3B0aW9ucy5j
b250YWlucyhTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5j
UmVwbHkpCkBAIC00MjAsMTIgKzQyMCwxMiBAQCBib29sIENvbm5lY3Rpb246OnNlbmRTeW5jUmVw
bHkoc3RkOjp1bmlxCiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsg
fSk7CiB9CiAKLXN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgQ29ubmVjdGlvbjo6dGltZW91dFJl
c3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3Rpbmcoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lb3V0KSBjb25zdAorU2Vjb25kcyBDb25uZWN0aW9uOjp0aW1lb3V0UmVzcGVjdGluZ0ln
bm9yZVRpbWVvdXRzRm9yVGVzdGluZyhTZWNvbmRzIHRpbWVvdXQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1faWdub3JlVGltZW91dHNGb3JUZXN0aW5nID8gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
czo6bWF4KCkgOiB0aW1lb3V0OworICAgIHJldHVybiBtX2lnbm9yZVRpbWVvdXRzRm9yVGVzdGlu
ZyA/IFNlY29uZHM6OmluZmluaXR5KCkgOiB0aW1lb3V0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVz
dGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8
V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4g
Q29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZl
ck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25J
RCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlv
bnMpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNDcwLDkgKzQ3MCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWkKICAgICB9CiAKICAg
ICAvLyBDbGFtcCB0aGUgdGltZW91dCB0byBob3dldmVyIG11Y2ggdGltZSBpcyByZW1haW5pbmcg
b24gb3VyIGNsb2NrLgotICAgIGF1dG8gbm93ID0gQ29uZGl0aW9uOjpDbG9jazo6bm93KCk7Ci0g
ICAgYXV0byByZW1haW5pbmdDbG9ja1RpbWUgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihDb25kaXRpb246OkNsb2NrOjp0aW1lX3BvaW50Ojpt
YXgoKSAtIG5vdyk7Ci0gICAgYXV0byBhYnNvbHV0ZVRpbWVvdXQgPSBub3cgKyBzdGQ6Om1pbihy
ZW1haW5pbmdDbG9ja1RpbWUsIHRpbWVvdXQpOworICAgIE1vbm90b25pY1RpbWUgYWJzb2x1dGVU
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyB0aW1lb3V0OwogCiAgICAgLy8gTm93IHdh
aXQgZm9yIGl0IHRvIGJlIHNldC4KICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDk2LDcgKzQ5NCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWkKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbmRT
eW5jTWVzc2FnZSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rl
cj4gZW5jb2Rlciwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8
U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVy
PiBDb25uZWN0aW9uOjpzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3Rk
Ojp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0
PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIApAQCAtNTQxLDEwICs1MzksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29k
ZXI+IENvbm5lY3Rpb246OnNlbgogICAgIHJldHVybiByZXBseTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1Jl
cXVlc3RJRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBD
b25uZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIFNlY29u
ZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7
CiAgICAgdGltZW91dCA9IHRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5n
KHRpbWVvdXQpOwotICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWUgPSBjdXJyZW50VGltZSgpICsgKHRp
bWVvdXQuY291bnQoKSAvIDEwMDAuMCk7CisgICAgV2FsbFRpbWUgYWJzb2x1dGVUaW1lID0gV2Fs
bFRpbWU6Om5vdygpICsgdGltZW91dDsKIAogICAgIHdpbGxTZW5kU3luY01lc3NhZ2Uoc2VuZFN5
bmNPcHRpb25zKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25u
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDEzICsxNjYsMTMgQEAgcHVibGlj
OgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1aW50
NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMgPSB7
IH0pOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFdpdGhSZXBseShUJiYgbWVz
c2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgRnVuY3Rpb25EaXNwYXRjaGVyJiByZXBseURp
c3BhdGNoZXIsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPHR5cGVuYW1lIENvZGluZ1R5cGU8dHlw
ZW5hbWUgVDo6UmVwbHk+OjpUeXBlPik+JiYgcmVwbHlIYW5kbGVyKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYm
IHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgT3B0aW9uU2V0PFNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGJvb2wgd2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGlu
YXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2Fp
dEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMgPSB7IH0pOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHks
IHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmlu
aXR5KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0
ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdh
aXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9KTsKIAogICAgIGJvb2wgc2VuZE1lc3Nh
Z2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4gc2VuZE9w
dGlvbnMpOwogICAgIHZvaWQgc2VuZE1lc3NhZ2VXaXRoUmVwbHkodWludDY0X3QgcmVxdWVzdElE
LCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIEZ1bmN0aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNw
YXRjaGVyLCBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4pPiYmIHJlcGx5
SGFuZGxlcik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGNyZWF0ZVN5bmNNZXNzYWdl
RW5jb2RlcihTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCB1aW50NjRfdCYgc3luY1Jl
cXVlc3RJRCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHNlbmRTeW5jTWVzc2FnZSh1
aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5k
U3luY09wdGlvbnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBzZW5kU3luY01lc3Nh
Z2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBTZWNv
bmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKTsK
ICAgICBib29sIHNlbmRTeW5jUmVwbHkoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+KTsKIAogICAg
IHZvaWQgd2FrZVVwUnVuTG9vcCgpOwpAQCAtMjA4LDkgKzIwOCw5IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllcik7CiAgICAgdm9pZCBwbGF0Zm9ybUlu
dmFsaWRhdGUoKTsKICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvck1l
c3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4pOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVyPiB3YWl0Rm9yTWVzc2FnZShTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5h
dGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPik7CiAgICAg
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHdhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qg
c3luY1JlcXVlc3RJRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25T
ZXQ8U2VuZFN5bmNPcHRpb24+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZv
clN5bmNSZXBseSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlv
blNldDxTZW5kU3luY09wdGlvbj4pOwogCiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9u
IHdvcmsgcXVldWUuCiAgICAgdm9pZCBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVl
X3B0cjxEZWNvZGVyPik7CkBAIC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHdp
bGxTZW5kU3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7CiAgICAgdm9pZCBk
aWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwogCi0gICAgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9y
VGVzdGluZyhzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKSBjb25zdDsKKyAgICBTZWNvbmRzIHRp
bWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKFNlY29uZHMpIGNvbnN0Owog
ICAgIAogICAgIENsaWVudCYgbV9jbGllbnQ7CiAgICAgYm9vbCBtX2lzU2VydmVyOwpAQCAtMzY1
LDcgKzM2NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2VuZFdpdGhSZXBseShUJiYgbWVzc2EKICAg
ICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjpzZW5kU3lu
YyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGlu
YXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
Q29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVw
bHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoVDo6
aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsKIApAQCAtMzg5LDcgKzM4OSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6c2UKICAgICByZXR1cm4gcmVwbHlEZWNv
ZGVyLT5kZWNvZGUocmVwbHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5l
Y3Rpb246OndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JP
cHRpb24+IHdhaXRGb3JPcHRpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0
aW9uOjp3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9u
cykKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gZGVjb2RlciA9IHdhaXRGb3JNZXNz
YWdlKFQ6OnJlY2VpdmVyTmFtZSgpLCBUOjpuYW1lKCksIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQs
IHdhaXRGb3JPcHRpb25zKTsKICAgICBpZiAoIWRlY29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiBy
ZXBseSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kczo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRp
b25zID0geyB9KQorICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJl
cGx5JiYgcmVwbHksIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9wdGlv
blNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KQogICAgIHsKICAgICAg
ICAgc3RhdGljX2Fzc2VydChUOjppc1N5bmMsICJNZXNzYWdlIGlzIG5vdCBzeW5jISIpOwogCkBA
IC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVw
bHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGlt
ZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKKyAgICBib29sIHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9DaGlsZFByb2Nlc3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlv
bklELCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUg
VDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMSksIE9wdGlvblNldDxJUEM6OlNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHMoMSksIE9wdGlv
blNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOwogCiAgICAg
SVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QKICAgICB7CkBAIC0xMDIsNyArMTAy
LDcgQEAgYm9vbCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZChUJiYgbWVzc2FnZQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiAKLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRT
eW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCitib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5k
U3luYyhVJiYgbWVzc2FnZSwgdHlwZW5hbWUgVTo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVz
dGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlv
bj4gc2VuZFN5bmNPcHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJUKFU6OmlzU3luYywgU3lu
Y01lc3NhZ2VFeHBlY3RlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA2LDcgKzkw
Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kUHJvY2Vzc1dpbGxTdXMKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgc2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHk6OlJlcGx5KGhhbmRsZWQp
LCAwLCBzdGQ6OmNocm9ubzo6c2Vjb25kcygxKSk7CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHk6OlJlcGx5KGhhbmRsZWQpLCAwLCBT
ZWNvbmRzKDEpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNw
ZW5kKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2Vu
ZFByb2Nlc3NXaWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDEp
KTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NXaWxsU3Vz
cGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5OjpSZXBseShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9CiAgICAg
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNwZW5kKCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9y
YWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDcgKzg0Myw3IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm0KIAogICAgICAgICBzZW1h
cGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogfQogCiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5h
Z2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogICAgIHVpbnQ2NF90IG5leHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCkgY29u
c3QgeyByZXR1cm4gbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCArIDE7IH0KICAgICB1
aW50NjRfdCBsYXN0Q29tbWl0dGVkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdDsgfQogCi0gICAgdm9pZCBkaWRS
ZWZyZXNoRGlzcGxheShkb3VibGUgdGltZXN0YW1wKTsKKyAgICB2b2lkIGRpZFJlZnJlc2hEaXNw
bGF5KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgLSAodm9pZClkZWFsbG9jCiAt
ICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlzcGxheUxpbmsgKilzZW5kZXIKIHsKICAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBfZHJhd2luZ0FyZWFQcm94eS0+ZGlkUmVmcmVzaERp
c3BsYXkoc2VuZGVyLnRpbWVzdGFtcCk7CisgICAgX2RyYXdpbmdBcmVhUHJveHktPmRpZFJlZnJl
c2hEaXNwbGF5KCk7CiB9CiAKIC0gKHZvaWQpaW52YWxpZGF0ZQpAQCAtMjI4LDExICsyMjgsMTEg
QEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpjbwogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlLCBO
ZWVkc0RpZFVwZGF0ZSkgPT0gTWlzc2VkQ29tbWl0KQotICAgICAgICBkaWRSZWZyZXNoRGlzcGxh
eShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgICAgIGRpZFJlZnJlc2hEaXNw
bGF5KCk7CiAgICAgW21fZGlzcGxheUxpbmtIYW5kbGVyIHNjaGVkdWxlXTsKICNlbHNlCiAgICAg
bV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgPSBOZWVkc0RpZFVwZGF0ZTsKLSAgICBkaWRSZWZyZXNo
RGlzcGxheShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgZGlkUmVmcmVzaERp
c3BsYXkoKTsKICNlbmRpZgogCiAgICAgaWYgKGF1dG8gbWlsZXN0b25lcyA9IGxheWVyVHJlZVRy
YW5zYWN0aW9uLm5ld2x5UmVhY2hlZExheW91dE1pbGVzdG9uZXMoKSkKQEAgLTM5NCw3ICszOTQs
NyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmluCiAgICAgfQogfQog
Ci12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5
KGRvdWJsZSkKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVmcmVz
aERpc3BsYXkoKQogewogICAgIGlmICghbV93ZWJQYWdlUHJveHkuaXNWYWxpZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC00MjYsMTYgKzQyNiwxNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6OndhCiAgICAgLy8gV2UgbXVzdCBzZW5kIHRoZSBkaWRVcGRhdGUgbWVzc2Fn
ZSBiZWZvcmUgYmxvY2tpbmcgb24gdGhlIG5leHQgY29tbWl0LCBvdGhlcndpc2UKICAgICAvLyB3
ZSBjYW4gYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBuZXh0IGNvbW1pdCB3b24ndCBjb21lIHVudGls
IGFmdGVyIHRoZSB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSB0aW1lcyBvdXQuCiAgICAg
aWYgKG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlICE9IERvZXNOb3ROZWVkRGlkVXBkYXRlKQotICAg
ICAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Cisg
ICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAKLSAgICBzdGF0aWMgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCA9IFtdIHsKKyAgICBzdGF0aWMg
U2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCA9IFtdIHsKICAgICAgICAgaWYgKGlk
IHZhbHVlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9y
S2V5OkAiV2ViS2l0T3ZlcnJpZGVBY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCJdKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3VibGU+KFt2YWx1ZSBkb3VibGVWYWx1
ZV0pKTsKKyAgICAgICAgICAgIHJldHVybiBTZWNvbmRzKFt2YWx1ZSBkb3VibGVWYWx1ZV0pOwog
CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyg1MDApOworICAgICAgICByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1MDAp
OwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMjUwKTsK
KyAgICAgICAgcmV0dXJuIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMjUwKTsKICNlbmRpZgog
ICAgIH0oKTsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT53YWl0
Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eTo6Q29tbWl0TGF5ZXJUcmVlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgYWN0
aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2Fp
dGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHkubW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eToKIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9y
RGlkVXBkYXRlQWN0aXZpdHlTdGF0ZSgpCiB7Ci0gICAgYXV0byBhY3Rpdml0eVN0YXRlVXBkYXRl
VGltZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMjUwKTsKKyAgICBTZWNvbmRzIGFj
dGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygyNTAp
OwogICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmRE
aXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFVwZGF0ZUFjdGl2
aXR5U3RhdGU+KG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBhY3Rpdml0eVN0YXRlVXBkYXRlVGlt
ZW91dCwgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFy
cml2ZXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQ
cm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsy
MjksNyBAQCBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdHJpbmdTZWxlY3Rpb25Gb3JQCiAgICAgaWYg
KCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAKLSAgICBjb25zdCBhdXRv
IG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNl
Y29uZHMgbWVzc2FnZVRpbWVvdXQoMjApOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZTo6R2V0U3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpLCBNZXNzYWdlczo6
V2ViUGFnZTo6R2V0U3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZDo6UmVwbHkodmFsdWUpLCBt
X3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAgLTI0MCw3
ICsyNDAsNyBAQCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQYWdlUHJvCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAg
ICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3Rk
OjpjaHJvbm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQo
MjApOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0RGF0YVNl
bGVjdGlvbkZvclBhc3RlYm9hcmQocGFzdGVib2FyZFR5cGUpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2U6OkdldERhdGFT
ZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkOjpSZXBseShoYW5kbGUsIHNpemUpLCBtX3BhZ2VJRCwgbWVz
c2FnZVRpbWVvdXQpOwogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCkBAIC0yNTUsNyArMjU1LDcg
QEAgYm9vbCBXZWJQYWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGNvbnN0IGF1dG8gbWVz
c2FnZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygyMCk7CisgICAgY29uc3QgU2Vjb25k
cyBtZXNzYWdlVGltZW91dCgyMCk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpSZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLCBNZXNz
YWdlczo6V2ViUGFnZTo6UmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOjpSZXBseShyZXN1bHQp
LCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00
MDgsNyArNDA4LDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZERlbGF5V2luZG93T3JkZQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGNv
bnN0IGF1dG8gbWVzc2FnZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygzKTsKKyAgICBj
b25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDMpOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZTo6U2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KGV2ZW50KSwg
TWVzc2FnZXM6OldlYlBhZ2U6OlNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudDo6UmVwbHko
cmVzdWx0KSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtNDE5LDcgKzQxOSw3IEBAIGJvb2wgV2ViUGFnZVByb3h5OjphY2NlcHRzRmlyc3RNb3Vz
ZShpbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMyk7
CisgICAgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGltZW91dCgzKTsKICAgICBwcm9jZXNzKCkuc2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkFjY2VwdHNGaXJzdE1vdXNlKGV2ZW50TnVtYmVyLCBl
dmVudCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpBY2NlcHRzRmlyc3RNb3VzZTo6UmVwbHkocmVzdWx0
KSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkJl
Zm9yZVVubG9hZENvbgogCiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25E
aXNhYmxlcjsKIAotICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsKG1lc3NhZ2UsIHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw6OlJlcGx5KHNob3Vs
ZENsb3NlKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4
KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5k
KSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbChtZXNzYWdlLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRDbG9zZSks
IG1fcGFnZS0+cGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRp
b246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIHNob3VsZENsb3NlOwpAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQKIAogICAgIEhhbmdEZXRlY3Rpb25E
aXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBhbGVydFRleHQpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQ6OlJlcGx5KCksIG1fcGFnZS0+cGFnZUlEKCksIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZv
cm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbUZyYW1lKGZyYW1lKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNv
bmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nl
c3NXaWxsU3VzcGVuZCk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0
Q29uZmlybShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTQxNyw3ICs0
MTcsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpCiAgICAgSGFu
Z0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAogICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZh
U2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZy
b21GcmFtZShmcmFtZSksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZh
U2NyaXB0Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRDb25maXJtKHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbUZyYW1lKGZyYW1lKSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgp
LCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9y
bVByb2Nlc3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biByZXN1bHQ7CkBAIC00MzYsNyArNDM2LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkph
dmFTY3JpcHRQcm9tcAogCiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25E
aXNhYmxlcjsKIAotICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21G
cmFtZShmcmFtZSksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCks
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJ
bmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNl
Y3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGZyYW1lKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVl
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6UmVwbHkocmVz
dWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIXJlc3VsdC5pc051bGwoKTsKQEAgLTY2OCw3ICs2Njgs
NyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cHJpbnQoRnJhbWUqIGZyYW1lCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50
RnJhbWUod2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50
RnJhbWU6OlJlcGx5KCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNl
bmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgbV9w
YWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lKHdlYkZyYW1l
LT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lOjpSZXBseSgp
LCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9y
bVByb2Nlc3NXaWxsU3VzcGVuZCk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRl
ZERhdGFiYXNlUXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwg
RGF0YWJhc2VEZXRhaWxzIGRldGFpbHMpCkBAIC02ODgsNyArNjg4LDcgQEAgdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdQogICAgIGlmICghbmV3UXVvdGEpIHsKICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoCiAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFi
YXNlUXVvdGEod2ViRnJhbWUtPmZyYW1lSUQoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSwgZGF0YWJhc2VOYW1lLCBkZXRhaWxzLmRpc3BsYXlOYW1lKCksIGN1cnJlbnRRdW90YSwgY3Vy
cmVudE9yaWdpblVzYWdlLCBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpLCBkZXRhaWxzLmV4cGVjdGVk
VXNhZ2UoKSksCi0gICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERh
dGFiYXNlUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkV4Y2VlZGVkRGF0YWJhc2VRdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJ
RCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0
Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CiAgICAgfQogCiAgICAgZGJNYW5hZ2VyLnNldFF1b3Rh
KG9yaWdpbiwgbmV3UXVvdGEpOwpAQCAtNzEzLDcgKzcxMyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpyZWFjaGVkQXBwbGljYXRpb24KICAgICB1aW50NjRfdCBuZXdRdW90YSA9IDA7CiAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoCiAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEob3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgY3VycmVudFF1b3Rh
LCB0b3RhbEJ5dGVzTmVlZGVkKSwKLSAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVh
Y2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2Ut
PnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgICAgICBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhOjpS
ZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQ
Qzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKIAog
ICAgIGNhY2hlU3RvcmFnZS5zdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdpbihvcmlnaW4sIG5ld1F1
b3RhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDcgKzY5MCw3IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWQKIAogICAgIFJlZjxXZWJG
cmFtZT4gcHJvdGVjdCgqbV9mcmFtZSk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9
IG1fZnJhbWUtPmNvcmVGcmFtZSgpOwotICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jKG1fZnJhbWUtPmZy
YW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoY29yZUZyYW1lKSwgcmVzcG9u
c2UsIHJlcXVlc3QsIGNhblNob3dNSU1FVHlwZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQo
KSkuZ2V0KCkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9u
c2VTeW5jOjpSZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgcG9saWN5QWN0aW9uLCBkb3dubG9h
ZElEKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRp
b246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkgeworICAgIGlmICghd2ViUGFn
ZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9u
c2VTeW5jKG1fZnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUo
Y29yZUZyYW1lKSwgcmVzcG9uc2UsIHJlcXVlc3QsIGNhblNob3dNSU1FVHlwZSwgbGlzdGVuZXJJ
RCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jOjpSZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgcG9s
aWN5QWN0aW9uLCBkb3dubG9hZElEKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKSB7CiAgICAgICAgIG1f
ZnJhbWUtPmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihsaXN0ZW5lcklELCBQb2xpY3lJZ25vcmUs
IDAsIHsgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1MzYsNyArNTUzNiw3IEBAIHZvaWQgV2ViUGFnZTo6cG9zdFN5bmNocm9ub3VzTWVz
c2FnZUZvclQKICAgICBVc2VyRGF0YSByZXR1cm5Vc2VyRGF0YTsKIAogICAgIGF1dG8mIHdlYlBy
b2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoIXNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwg
VXNlckRhdGEod2ViUHJvY2Vzcy50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5
KSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJl
cGx5KHJldHVyblVzZXJEYXRhKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQ
Qzo6U2VuZFN5bmNPcHRpb246OlVzZUZ1bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZykpCisg
ICAgaWYgKCFzZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91
c01lc3NhZ2UobWVzc2FnZU5hbWUsIFVzZXJEYXRhKHdlYlByb2Nlc3MudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxl
U3luY2hyb25vdXNNZXNzYWdlOjpSZXBseShyZXR1cm5Vc2VyRGF0YSksIFNlY29uZHM6OmluZmlu
aXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OlVzZUZ1bGx5U3luY2hyb25vdXNNb2RlRm9yVGVz
dGluZykpCiAgICAgICAgIHJldHVybkRhdGEgPSBudWxscHRyOwogICAgIGVsc2UKICAgICAgICAg
cmV0dXJuRGF0YSA9IHdlYlByb2Nlc3MudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyhyZXR1cm5V
c2VyRGF0YS5vYmplY3QoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293892</attachid>
            <date>2016-11-04 09:49:05 -0700</date>
            <delta_ts>2016-11-04 12:57:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139633</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvYmFibHkg
dGhlIG5pY2VzdCBleGFtcGxlIG9mIHdoeSB0aGlzIHBhdGNoIGlzIGEgZ29vZCBpZGVhIGlzIHRo
ZSBjaGFuZ2UgaW4KKyAgICAgICAgQXRvbWljc09iamVjdC5jcHAuCisKKyAgICAgICAgKiBqaXQv
SUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQXRvbWljc09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2Fp
dCk6CisKIDIwMTYtMTEtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCBy
ZWJhc2UuLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIElDU3RhdHM6OklDU3RhdHMoKQogICAgICAgICBb
dGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yU2Vj
b25kcyhtX2xvY2ssIDEsIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxkU3RvcDsg
fSk7CisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9sb2NrLCBTZWNvbmRzKDEpLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3No
b3VsZFN0b3A7IH0pOwogICAgICAgICAgICAgICAgIGlmIChtX3Nob3VsZFN0b3ApCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsOCArMzA0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgdGltZW91dEluTmFub3NlY29uZHMgPSB0
aW1lb3V0SW5NaWxsaXNlY29uZHMgKiAxMDAwICogMTAwMDsKLQorICAgIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKKyAg
ICAKICAgICAvLyBUaGlzIGNvdmVycyB0aGUgcHJvcG9zZWQgcnVsZToKICAgICAvLwogICAgIC8v
IDQuIElmIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkIG9yIGlzIHVuZGVmaW5lZCB0aGVuIGxldCB0
IGJlICtpbmYuIE90aGVyd2lzZToKQEAgLTMxNCwzMSArMzE0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAvLwogICAgIC8vIGV4ZWMtPmFyZ3VtZW50
KDMpIHJldHVybnMgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IHByb3ZpZGVkIGFuZCBUb051bWJlcih1
bmRlZmluZWQpIHJldHVybnMgTmFOLAogICAgIC8vIHNvIE5hTiBpcyB0aGUgb25seSBzcGVjaWFs
IGNhc2UuCi0gICAgaWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID09IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKQotICAgICAgICB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHN0ZDo6bWF4KDAuLCB0aW1lb3V0
SW5OYW5vc2Vjb25kcyk7CisgICAgaWYgKHRpbWVvdXQgPT0gdGltZW91dCkKKyAgICAgICAgdGlt
ZW91dCA9IHN0ZDo6bWF4KFNlY29uZHMoMCksIHRpbWVvdXQpOwogICAgIGVsc2UKLSAgICAgICAg
dGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Ci0gICAgCi0gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgaXMgYSBwaWxlIG9mIG5vbnNl
bnNlLCBidXQgaXQncyBhbGwgbmVlZGVkIGJlY2F1c2Ugb2YgY29ybmVyIGNhc2VzCi0gICAgLy8g
aW5zaWRlIHN0ZDo6Y2hyb25vLgotICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIHN0ZDo6Y2hyb25v
LgotICAgIAotICAgIFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQ7Ci0gICAg
aWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90
OjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpjaHJv
bm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXRJbk5hbm9zZWNvbmRz
KSk7Ci0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPCBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHM6Onplcm8oKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlVGltZW91dCA+IFBhcmtpbmdMb3Q6OkNsb2Nr
OjpkdXJhdGlvbjo6bWF4KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xv
Y2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OkNsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8UGFya2luZ0xvdDo6Q2xvY2s6OmR1cmF0aW9u
PihyZWxhdGl2ZVRpbWVvdXQpOwotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgICAgICB9Ci0gICAgfQorICAgICAg
ICB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKTsKICAgICAKICAgICBib29sIGRpZFBhc3NW
YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCByZXN1bHQ7CkBA
IC0zNTEsNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
YwogICAgICAgICAgICAgICAgIHJldHVybiBkaWRQYXNzVmFsaWRhdGlvbjsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAg
ICAgICAgIE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dCk7CiAgICAgfQogICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjM5IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6
Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBv
dmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0aW1lIG1lYXN1cmVtZW50
cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAgIHNvbWV0aW1lcyBpdCB3
YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBvZiB0aW1lLCBzb21ldGlt
ZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVwb2NoLiBXaGVuIHdlIHNw
b2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEgbW9ub3RvbmljIGNsb2Nr
IG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdheXMgJ2RvdWJsZScgLSBu
ZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZlbgorICAgICAgICB0aG91
Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50ZXJ2YWwsIG1zIGludGVy
dmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMgc2luY2UgZXBvY2ggb24g
d2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2UgZXBvY2ggbW9ub3Rvbmlj
KS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRob3VnaHQgdGhhdCBpdCB3
b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJsZXMgd2l0aAorICAgICAg
ICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRoaW5ncyB3aXRoIHN0ZDo6
Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAgICBpbmNvbnZlbmllbnQ6
CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5ldmVyIHdhbnQgdG8gc2F5
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIgd2FudCB0byBzYXkKKyAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9pbnQuIFRoZSBzeW50YXgg
Zm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAgICAgICAgICBkdXJhdGlv
bl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
IG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50ZWdlcnMgYnkgZGVmYXVs
dCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNsdW1zeS4gQnV0IHRoZSBp
bnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIHJvdWdoIGVkZ2VzIG9m
IGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3ZWVuIHN0ZDo6Y2hyb25v
IHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNrcyBvdmVyZmxvdworICAg
ICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVudGx5LiBXZSBoYXZlIGV2
ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBo
YWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMgdXAgYmVpbmcgYSBzcGVj
aWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2VzLCB0aGUgb3ZlcmZsb3cg
YWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAgSXQncyBhbiBlcnJvciB0
byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQgaGF2ZSBiZWVuIGV4Y3Vz
YWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0aCB3YXMgbm90IGd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB0aGF0IHdvdWxkCisg
ICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMgYSBjb250aW51b3VzLCBp
bmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAgICAgICAgZm9yIGZsb2F0
aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBwcmVzZXJ2ZXMg
cHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQgZXh0cmVtZSBjYXNlcywg
c28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGltZSBtZWFucyB0aGF0IHVu
aXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAgICAgICAgbG9zc2xlc3Mu
IFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZlcnkgaGFyZCBhYm91dCB3
aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNoLCB3ZSB1c2Ugc2Vjb25k
cyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJvdW5kYXJpZXMsIGxpa2Ug
YW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21ldGhpbmcgb3RoZXIgdGhh
biBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBtYWtlcyBpdCBl
YXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgdGlt
ZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1wbGU6IHdoZW4gd291bGQg
eW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlzIGlzIHRoZQorICAgICAg
ICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBwb3J0IGJvdGggYSB0aW1l
b3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZhcmlhbnQuCisKKyAgICAg
ICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0aGluZ3Mgd2hlbiBtYXRo
IGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAgICAgcHJldHR5IHdlbGwg
b3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdvdWxkIGRvIHdoZW4gY29t
cHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgdXNpbmcgc2Np
ZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBzaWduaWZpY2FudAorICAg
ICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1bmRlciBmbG9hdGluZyBw
b2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAgICAgICBvdGhlciBoYW5k
LCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdlIGJlY2F1c2UgeW91IGhh
dmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxlIHBvc3NpYmxlIFVCIGNv
cm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJbnRlZ2VycyB0aGF0Cisg
ICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGxhcmdlIGFuZCB5
b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAgICAgICAgdGhlbS4gQXQg
dGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBhbSBub3QgY2VydGFpbiB0
aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhlIGNvcm5lciBjYXNlcwor
ICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1la2VlcGluZyBjbGFzc2Vz
IHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAgICBhbGwgaW50ZXJuYWxs
eSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2VicmFpYyB0eXBpbmcuIFRo
ZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25kczogdGhpcyBpcyBmb3Ig
bWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6IHRpbWUgc2luY2UgZXBv
Y2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuCisgICAg
ICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2NvcmRpbmcgdG8gYSBtb25v
dG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRoYXQgc2F5cyBlaXRoZXIg
V2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOiBh
IHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXByZXNlbnRzIGVpdGhlciBh
CisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUuCisgICAgICAgIAorICAg
ICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysgdmFsdWVzIGFuZCBhcmUg
Y2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAgICAgdmVyeSBuZWFybHkg
UE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lvbnMgYmV0d2VlbiB0aGUg
dmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMgaXMgYnkgd2F5IG9mIGFs
Z2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2UgcmVjb2duaXplOgorICAg
ICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29uZHMKKyAgICAgICAgU2Vj
b25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3RvbmljVGltZSA9IE1vbm90
b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAgICAKKyAgICAgICAgV2Ug
c3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMgYmVjYXVzZSBtYXRoLgor
ICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBiZXR3ZWVuIE1vbm90b25p
Y1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgd3Qg
PSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0
byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNsb2NrcyBhbmQgY29udmVy
dCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFueSBvZiBvdXIgQVBJcyB3
b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGltZSB0aGUgdXNlciB3YW50
ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2ggaW5jbHVkZXMgQ29uZGl0
aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS4gWW91
CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRpbWUgb3IgTW9ub3Rvbmlj
VGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhh
dCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246OndhaXRVbnRpbCwgdGhlbiBD
b25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hlbiBpdCBzaG91bGQgd2Fr
ZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgV2FsbFRpbWUgLSBi
dXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4gd2FpdFVudGlsIHdpbGwg
bWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAgICBNb25vdG9uaWNUaW1l
LiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0aGFuIGNocm9ubyBhbGxv
d2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIGEg
ZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5v
dCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8gYW5kIHRoZXNlIG5ldyB0
aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmllbmNlIHNob3dzIHRoYXQg
d2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgICBz
dGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywgSSBkaWRuJ3QgbmVlZCBz
dWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAgcGF0Y2ggb25seSBjb252
ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2luZ0xvdCBhbmQgQ29uZGl0
aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRoYXQgY29kZSBvbnRvIHRo
ZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWwp
OgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToKKyAgICAgICAgKFdURjo6
Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRV
bnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUXVl
dWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1l
LmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0Zi9NZXNzYWdlUXVldWUu
aDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1v
bm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmFwcHJveGlt
YXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNU
aW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpNb25vdG9uaWNUaW1l
KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSk6CisgICAgICAg
IChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAgKFdURjo6TW9ub3Rvbmlj
VGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjph
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoKKyAgICAgICAg
KFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAgICAgICAoV1RGOjpQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1NlY29uZHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6CisgICAgICAgIChXVEY6
OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pY3Jvc2Vj
b25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRzKToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OmZy
b21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMp
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAgICAgIChXVEY6OlNlY29u
ZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcispOgor
ICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci8pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3Bl
cmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yKj0pOgorICAgICAgICAo
V1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcj4p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
dyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVD
bG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6d2FsbFRpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25pY1RpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGlt
YXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91YmxlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VFcG9jaCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogd3RmL1dhbGxU
aW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpub3cpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2xlZXApOgorICAgICAg
ICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OldhbGxU
aW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3VibGUpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2Vjb25k
c1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVXYWxsVGlt
ZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdU
Rjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3YWl0KToKKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0xMS0wMyAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRml4ZXMgdG8gYnVpbGQg
SlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNiBAQAogCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOEIx
REM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87IH07CisJCTBGNjZCMjhE
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07CisJCTBGNjZCMjhGMURD
OTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICov
OyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICov
OyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi87IH07
CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICovOyB9OwogCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNl
dC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZC
NTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJMEY0M0Q4RjAxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9ja1R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ub3Rv
bmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgzMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NzFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FsbFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FsbFRpbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4ODVDRjIwMDQ0RjVFMiAv
KiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJv
b2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNw
cCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJ
CQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAogCQkJCTBG
OEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCkBAIC05
NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0
b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5o
ICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAgLTEwMDcsNiArMTAzMSw4
IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVD
ODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCisJCQkJMEY2NkIyODQx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBGNjZCMjg1MURDOTdCQUIw
MDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJMEY2NkIyODYxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovLAogCQkJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLywKIAkJCQkwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZC
QkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2ICsxMDgyLDggQEAKIAkJ
CQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0Yg
LyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxs
VGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8s
CiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLApAQCAtMTI1OSw3ICsx
Mjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVC
MDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4
QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNDAsNiAr
MTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlCIC8qIExpc3REdW1wLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAKIAkJCQkxNEYzQjBGNzE1
RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiArMTUwMCw3IEBACiAJCQkJ
RTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJQThBNDczQUExNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDUxMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09i
akNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAwNDEy
M0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2MDE1MUE4
MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY0
MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIy
OTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBACiAJCQkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOEYxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFy
dChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChs
b2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09
IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2h1dCB0aGUg
dGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Ns
b2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2NrLCBTZWNvbmRzKDEpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3RpZnkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2luZyB0byBzbGVlcCFcbiIp
OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAtNjQsNiArNjUsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5vbmNv
cHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xMDEs
NiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBTZWNvbmRzLmgKICAgICBT
ZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCkBA
IC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBVbmlxdWVSZWYuaAogICAg
IFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVmVjdG9y
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaAorICAgIFdhbGxUaW1l
LmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29ya1F1ZXVlLmgKQEAgLTE3
Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNzLmNwcAogICAgIEF1dG9t
YXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCiAgICAgTWV0YUFsbG9j
YXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJlck9mQ29yZXMuY3BwCiAg
ICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApAQCAtMjA3LDEyICsyMTQs
MTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAogICAg
IFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNwcAogICAgIFNpeENoYXJh
Y3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKICAg
ICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV2FsbFRpbWUu
Y3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xv
Y2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENs
b2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rvbmlj
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVh
bTsKKworZW51bSBjbGFzcyBDbG9ja1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9
OworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
Q2xvY2tUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBl
OworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93
dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdU
Rl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUgPGNocm9u
bz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+
CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlzIGlzIGEg
c3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2Fu
IGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJp
YWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5nTG90OjpD
bG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQgb2YgdGlt
ZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxzCisgICAg
Ly8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRvIHVzZSB3
aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5saWtlbHkg
dG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJldHRlciB0
byB1c2UgTW9ub3JvbmljVGltZS4KKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUgVGltZTsK
ICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhl
IGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8g
cGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdv
a2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVjdCBDb25k
aXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sgZm9yIHBh
c3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBPcGVuR3Jv
dXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgQ2xv
Y2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9j
aywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsKICAgICAg
ICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygpKSB7Cisg
ICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsKICAgICAg
ICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAg
IC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMg
dHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0dXJuIGVh
cmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBl
bmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBDbG9jazo6
dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgYm9vbCB3
YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7CiAgICAg
ICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVudGlsKGxv
Y2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ug
ewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4g
UmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8vIE1heSBy
ZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5
cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdhaXRGb3Io
Ci0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0aXZlVGlt
ZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYgbG9jaywg
U2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRpdmUocmVs
YXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2Nr
LCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9vbCB3YWl0
Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyByZWxhdGl2
ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogICAg
IHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRpbChsb2Nr
LCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9jaywgVGlt
ZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUs
IHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25kaXRpb25C
YXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsKExv
Y2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChsb2NrKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3YWl0
Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWxXYWxs
Q2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25k
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1
dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNv
bmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0
U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgYm9v
bCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGltZW91dFNl
Y29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBy
ZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMgKiAoMTAw
MC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJlbGF0aXZl
VGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBp
bnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7
Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+IHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3QgYmUgZXhw
cmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAgIC8vIG1p
Z2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBwcmVkaWNh
dGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykp
OwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwgcHJlZGlj
YXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5
IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cnkg
dG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1ZSBp
ZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9uZSgpCkBA
IC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAgICAgCiBw
cm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0
Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNv
bmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID0g
cmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjApOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAwKSkgewot
ICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwgYXMgTmFO
LgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbGF0
aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0aW1lb3V0
IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQgaW50ZWdl
ciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2ZXIuCi0g
ICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAg
IHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRp
bWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCBy
ZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2Nr
VHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwoTG9ja1R5
cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShyZWxhdGl2
ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlvblR5cGU+
Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3QgRHVyYXRp
b25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRpdmVUaW1l
b3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xvY2s6OnRp
bWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBDbG9jazo6
ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1bmxpa2Vs
eS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1bWIuIFNs
ZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5zaWJsZSB3
aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBiZQotICAg
ICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAgICAgIHJl
dHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGltZW91dCk7
Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAg
IH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAKIGNsYXNz
IENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8RGF0YVR5
cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGltZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0aW9uLndh
aXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAgICAgICBt
X2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVldWUudGFr
ZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KQEAgLTM0MCw3ICsz
NDAsNyBAQCB2b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2NrOwogICAg
IENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tlcihmYWtl
TG9jayk7Ci0gICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMo
ZmFrZUxvY2ssIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOworICAgIGZh
a2VDb25kaXRpb24ud2FpdEZvcihmYWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAyMDgzNTgp
CisrKyBTb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxsZWQoKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdl
UXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpOworICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRo
VGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIFdhbGxUaW1lIGFi
c29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgogICAg
ICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYmKTsKQEAgLTc2LDggKzc3LDYgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgaXNFbXB0eSgpIGlzIG9ubHkgdmFs
aWQgaWYgbm8gb3RoZXIgdGhyZWFkIGlzIG1hbmlwdWxhdGluZyB0aGUgcXVldWUgYXQgdGhlIHNh
bWUgdGltZS4KICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICAgICAgc3RhdGljIGRvdWJs
ZSBpbmZpbml0ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAg
ICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwpAQCAtMTMwLDE0ICsxMjksMTQgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2FpdEZv
ck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAgICAgICBN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb247IAotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChl
eGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIGluZmluaXRl
VGltZSgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiByZXN1bHQgPSB3YWl0
Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10oY29uc3QgRGF0YVR5
cGUmKSB7IHJldHVybiB0cnVlOyB9LCBXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAgICAgIEFT
U0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJlYXNvbiA9
PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+
Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2FpdFJlc3Vs
dCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVl
V2FpdFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFdhbGxUaW1lIGFic29s
dXRlVGltZSkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFsc2U7CkBA
IC0xNTEsMTAgKzE1MCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlmIChmb3Vu
ZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRzKG1fbXV0
ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53
YWl0VW50aWwobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIEFT
U0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsKKyAgICAg
ICAgQVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gV2FsbFRpbWU6OmluZmluaXR5
KCkpOwogCiAgICAgICAgIGlmIChtX2tpbGxlZCkgewogICAgICAgICAgICAgcmVzdWx0ID0gTWVz
c2FnZVF1ZXVlVGVybWluYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vbm90b25pY1RpbWUu
aCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIK
KyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJXYWxsVGlt
ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworTW9ub3RvbmljVGltZSBNb25vdG9uaWNUaW1lOjpu
b3coKQoreworICAgIE1vbm90b25pY1RpbWUgcmVzdWx0OworICAgIHJlc3VsdC5tX3ZhbHVlID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
V2FsbFRpbWUgTW9ub3RvbmljVGltZTo6YXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBXYWxsVGltZTo6bm93KCk7Cit9CisKK3ZvaWQgTW9u
b3RvbmljVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiTW9ub3RvbmljKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIE1vbm90b25pY1Rp
bWU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoKnRoaXMp
LnNsZWVwKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL01vbm90b25pY1RpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9u
aWNUaW1lLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Ns
b2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBUaGUgY3VycmVudCB0
aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3RvbmljIGNsb2NrcyBkb24n
dCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3NzaWJseSBkb24ndCBjb3VudCBkb3dudGltZS4gVGhp
cyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBh
Ym91dAorLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0
J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywKKy8vIG5lZ2F0aXZl
IHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWxsIHJlbGF0
aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8gU3BlY2lmaWNhbGx5LCBNb25vdG9uaWNUaW1lIHNo
b3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUgdGhhdAorLy8gTW9u
b3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIGlzIHRoZSBzYW1l
IGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgorY2xhc3MgTW9ub3Rv
bmljVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBjbG9ja1R5cGUg
PSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4g
U28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIE1vbm90
b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNUaW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0
aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUg
YWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4g
SXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNhbWUgdGltZQor
ICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBmcm9tUmF3RG91YmxlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1vbm90b25pY1RpbWUgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE1vbm90b25pY1RpbWUgbm93KCk7
CisgICAgCisgICAgc3RhdGljIE1vbm90b25pY1RpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9t
UmF3RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7IH0KKwor
ICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBTZWNvbmRzKG1f
dmFsdWUpOyB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1Rp
bWUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxs
VGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Q7CisgICAgCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIAorICAgIE1vbm90
b25pY1RpbWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAg
IAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJl
IG5lZ2F0ZWQgYXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5z
Zm9ybWF0aW9ucy4gU28sIHdlIGFsbG93IGl0LgorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3It
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91YmxlKC1tX3ZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAg
ICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNl
Y29uZHMgb3BlcmF0b3ItKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1ZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciE9KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPChNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPihNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmFsdWUgPiBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPD0o
TW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
IDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+PShNb25v
dG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPj0g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHNsZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNb25vdG9uaWNUaW1lOwor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVi
bGljOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOwogICAgIAotICAg
IHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFy
a2luZ0NvbmRpdGlvbjsKKyAgICBNdXRleCBwYXJraW5nTG9jazsKKyAgICBUaHJlYWRDb25kaXRp
b24gcGFya2luZ0NvbmRpdGlvbjsKIAogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MgeyBudWxscHRy
IH07CiAgICAgCkBAIC01NjQsNyArNTY0LDcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBh
cmtSZXN1bHQgUGFyawogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgY29uc3QgU2NvcGVk
TGFtYmRhPGJvb2woKT4mIHZhbGlkYXRpb24sCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
KT4mIGJlZm9yZVNsZWVwLAotICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgY29u
c3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5c
biIpKTsKQEAgLTU5MiwyMCArNTkyLDE3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJr
UmVzdWx0IFBhcmsKICAgICAKICAgICBib29sIGRpZEdldERlcXVldWVkOwogICAgIHsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsK
LSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzICYmIENsb2NrOjpub3coKSA8IHRpbWVvdXQpIHsK
LSAgICAgICAgICAgIC8vIEZhbGxpbmcgYmFjayB0byB3YWl0KCkgd29ya3MgYXJvdW5kIGEgYnVn
IGluIGxpYnN0ZGMrKyBpbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZS4g
U2VlOgotICAgICAgICAgICAgLy8gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ4MDI3Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemls
bGEvc2hvd19idWcuY2dpP2lkPTU4OTMxCi0gICAgICAgICAgICBpZiAodGltZW91dCA9PSBDbG9j
azo6dGltZV9wb2ludDo6bWF4KCkpCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRp
b24ud2FpdChsb2NrZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lLT5w
YXJraW5nQ29uZGl0aW9uLndhaXRfdW50aWwobG9ja2VyLCB0aW1lb3V0KTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIHdoaWxlIChtZS0+YWRk
cmVzcyAmJiB0aW1lb3V0Lm5vd1dpdGhTYW1lQ2xvY2soKSA8IHRpbWVvdXQpIHsKKyAgICAgICAg
ICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgICAgICBtZS0+
cGFya2luZ0xvY2ssIHRpbWVvdXQuYXBwcm94aW1hdGVXYWxsVGltZSgpLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2Yg
dGhlIGFib3ZlLCB3ZSBkbyB0aGlzIHRoaW5nLCB3aGljaCBpcyBoaWxhcmlvdXNseSBhd2Z1bCwg
YnV0IGVuc3VyZXMgdGhhdCB0aGUgd29yc3QgY2FzZSBpcwotICAgICAgICAgICAgLy8gYSBDUFUt
ZWF0aW5nIHNwaW4gYnV0IG5vdCBhIGRlYWRsb2NrLgotICAgICAgICAgICAgbG9ja2VyLnVubG9j
aygpOwotICAgICAgICAgICAgbG9ja2VyLmxvY2soKTsKKyAgICAgICAgICAgIC8vIEl0J3MgcG9z
c2libGUgZm9yIHRoZSBPUyB0byBkZWNpZGUgbm90IHRvIHdhaXQuIElmIGl0IGRvZXMgdGhhdCB0
aGVuIGl0IHdpbGwgYWxzbworICAgICAgICAgICAgLy8gZGVjaWRlIG5vdCB0byByZWxlYXNlIHRo
ZSBsb2NrLiBJZiB0aGVyZSdzIGEgYnVnIGluIHRoZSB0aW1lIG1hdGgsIHRoZW4gdGhpcyBjb3Vs
ZAorICAgICAgICAgICAgLy8gcmVzdWx0IGluIGEgZGVhZGxvY2suIEZsYXNoaW5nIHRoZSBsb2Nr
IG1lYW5zIHRoYXQgYXQgd29yc3QgaXQncyBqdXN0IGEgQ1BVLWVhdGluZworICAgICAgICAgICAg
Ly8gc3Bpbi4KKyAgICAgICAgICAgIG1lLT5wYXJraW5nTG9jay51bmxvY2soKTsKKyAgICAgICAg
ICAgIG1lLT5wYXJraW5nTG9jay5sb2NrKCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKCFt
ZS0+YWRkcmVzcyB8fCBtZS0+YWRkcmVzcyA9PSBhZGRyZXNzKTsKICAgICAgICAgZGlkR2V0RGVx
dWV1ZWQgPSAhbWUtPmFkZHJlc3M7CkBAIC02NDAsMTQgKzYzNywxNCBAQCBORVZFUl9JTkxJTkUg
UGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBt
YXR0ZXIgd2hhdCwgbWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgogICAgIHsK
LSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdM
b2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CiAgICAg
ICAgIGlmICghZGlkRGVxdWV1ZSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBkZXF1
ZXVlIG91cnNlbHZlcywgdGhlbiBzb21lb25lIGVsc2UgZGlkLiBUaGV5IHdpbGwgc2V0IG91ciBh
ZGRyZXNzIHRvCiAgICAgICAgICAgICAvLyBudWxsLiBXZSBkb24ndCB3YW50IHRvIHByb2NlZWQg
dW50aWwgdGhleSBkbyB0aGlzLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhleSBtYXkgc2V0CiAgICAg
ICAgICAgICAvLyBvdXIgYWRkcmVzcyB0byBudWxsIGluIHNvbWUgZGlzdGFudCBmdXR1cmUgd2hl
biB3ZSdyZSBhbHJlYWR5IHRyeWluZyB0byB3YWl0IGZvcgogICAgICAgICAgICAgLy8gb3RoZXIg
dGhpbmdzLgogICAgICAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzKQotICAgICAgICAgICAgICAg
IG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgICAgICBtZS0+
cGFya2luZ0NvbmRpdGlvbi53YWl0KG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIH0KICAgICAg
ICAgbWUtPmFkZHJlc3MgPSBudWxscHRyOwogICAgIH0KQEAgLTY5NSwxMSArNjkyLDExIEBAIE5F
VkVSX0lOTElORSBQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGEKICAgICBBU1NFUlQodGhyZWFk
RGF0YS0+YWRkcmVzcyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0
ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgIHRocmVhZERh
dGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgICAgICB0aHJlYWREYXRhLT50b2tlbiA9IDA7CiAg
ICAgfQotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAg
IHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtNzQxLDExICs3MzgsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xv
dDo6dW5wYXJrT25lSQogICAgIEFTU0VSVCh0aHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICAKICAg
ICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERh
dGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEt
PnBhcmtpbmdMb2NrKTsKICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAg
ICAgfQogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWREYXRhIG1heSBkaWUuIEdvb2Qg
dGhpbmcgd2UgaGF2ZSBhIFJlZlB0cjw+IG9uIGl0LgotICAgIHRocmVhZERhdGEtPnBhcmtpbmdD
b25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24u
c2lnbmFsKCk7CiB9CiAKIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtD
b3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTc3OSwxMCArNzc2
LDEwIEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmsKICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3
UG9pbnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0
aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+
YWRkcmVzcyk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgICAgICB0aHJl
YWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICB0aHJlYWREYXRh
LT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFy
a2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9QYXJraW5nTG90LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9Q
YXJraW5nTG90X2gKICNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAogCi0jaW5jbHVkZSA8Y2hyb25v
PgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7
CiAKQEAgLTM5LDcgKzM5LDE1IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFBhcmtpbmdMb3Qo
Y29uc3QgUGFya2luZ0xvdCYpID0gZGVsZXRlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrIENsb2NrOworICAgIC8vIFBhcmtpbmdMb3Qgd2lsbCBhY2Nl
cHQgYW55IGtpbmQgb2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0
eXBlZGVmIHRlbGxzCisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIFBhcmtpbmdMb3Qgd291
bGQgYmUgYWJsZSB0byB1c2Ugd2l0aG91dCBjb252ZXJzaW9ucy4gSXQncyBzYWQgdGhhdAorICAg
IC8vIHRoaXMgaXMgV2FsbFRpbWUgbm90IE1vbm90b25pY1RpbWUsIGJ1dCB0aGF0J3MganVzdCBo
b3cgT1Mgd2FpdCBmdW5jdGlvbnMgd29yay4gSG93ZXZlciwKKyAgICAvLyBiZWNhdXNlIFBhcmtp
bmdMb3QgZXZhbHVhdGVzIHdoZXRoZXIgaXQgc2hvdWxkIHdhaXQgYnkgY2hlY2tpbmcgaWYgeW91
ciB0aW1lIGhhcyBwYXNzZWQKKyAgICAvLyB1c2luZyB3aGF0ZXZlciBjbG9jayB5b3UgdXNlZCwg
c3BlY2lmeWluZyB0aW1lb3V0cyBpbiBNb25vdG9uaWNUaW1lIGlzIHNlbWFudGljYWxseSBiZXR0
ZXIuCisgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHNldHMgaGlzIGNvbXB1dGVyJ3Mg
Y2xvY2sgYmFjayBkdXJpbmcgdGhlIHRpbWUgdGhhdCB5b3Ugd2FudGVkIHRvCisgICAgLy8gd2Fp
dCBmb3Igb25lIHNlY29uZCwgYW5kIHlvdSBzcGVjaWZpZWQgdGhlIHRpbWVvdXQgdXNpbmcgdGhl
IE1vbm90b25pY1RpbWUsIHRoZW4gUGFya2luZ0xvdAorICAgIC8vIHdpbGwgYmUgc21hcnQgZW5v
dWdoIHRvIGtub3cgdGhhdCB5b3VyIG9uZSBzZWNvbmQgaGFzIGVsYXBzZWQuCisgICAgdHlwZWRl
ZiBXYWxsVGltZSBUaW1lOwogICAgIAogICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1
ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxs
LiBUaGUKICAgICAvLyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3
ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAg
Y29uc3QgVmFsaWRhdGlvbkZ1bmN0b3ImIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IEJlZm9y
ZVNsZWVwRnVuY3RvciYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRp
bWVvdXQpCisgICAgICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgICAgICAg
ICBhZGRyZXNzLApAQCAtODksNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlID09IGV4cGVjdGVkOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFtdICgp
IHsgfSwKLSAgICAgICAgICAgIENsb2NrOjp0aW1lX3BvaW50OjptYXgoKSk7CisgICAgICAgICAg
ICBUaW1lOjppbmZpbml0eSgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdp
dmVuIHRvIHlvdSBhbnl0aW1lIHlvdSB1bnBhcmtPbmUoKS4KQEAgLTE1OCw3ICsxNjYsNyBAQCBw
cml2YXRlOgogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAgICBjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbCgpPiYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRh
PHZvaWQoKT4mIGJlZm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0
KTsKKyAgICAgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAg
ICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVu
cGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNvbmRzLmgiCisKKyNpbmNsdWRlICJDdXJy
ZW50VGltZS5oIgorI2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0
cmVhbS5oIgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUg
IldhbGxUaW1lLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXYWxsVGltZSBTZWNvbmRzOjpvcGVy
YXRvcisoV2FsbFRpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7
Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3IrKE1vbm90b25pY1RpbWUgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSBTZWNvbmRzOjpvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKwor
V2FsbFRpbWUgU2Vjb25kczo6b3BlcmF0b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKTsKK30KKworTW9ub3RvbmljVGltZSBTZWNvbmRzOjpvcGVyYXRv
ci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gTW9ub3RvbmljVGlt
ZTo6ZnJvbVJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKTsKK30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFNlY29uZHM6Om9wZXJhdG9yLShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBvdGhlci53aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQorCit2b2lkIFNlY29uZHM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSwgIiBzZWMiKTsKK30KKwor
dm9pZCBTZWNvbmRzOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTW9ub3RvbmljVGltZTsKK2NsYXNz
IFByaW50U3RyZWFtOworY2xhc3MgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOworY2xhc3MgV2Fs
bFRpbWU7CisKK2NsYXNzIFNlY29uZHMgeworcHVibGljOgorICAgIFNlY29uZHMoKSB7IH0KKyAg
ICAKKyAgICBleHBsaWNpdCBTZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIGRvdWJsZSBtaWxsaXNlY29uZHMoKSBjb25zdCB7IHJldHVybiBz
ZWNvbmRzKCkgKiAxMDAwOyB9CisgICAgZG91YmxlIG1pY3Jvc2Vjb25kcygpIGNvbnN0IHsgcmV0
dXJuIG1pbGxpc2Vjb25kcygpICogMTAwMDsgfQorICAgIGRvdWJsZSBuYW5vc2Vjb25kcygpIGNv
bnN0IHsgcmV0dXJuIG1pY3Jvc2Vjb25kcygpICogMTAwMDsgfQorICAgIAorICAgIHN0YXRpYyBT
ZWNvbmRzIGZyb21NaWxsaXNlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFNlY29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNlY29u
ZHMgZnJvbU1pY3Jvc2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbU1pbGxpc2Vjb25kcyh2YWx1ZSAvIDEwMDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
U2Vjb25kcyBmcm9tTmFub3NlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZyb21NaWNyb3NlY29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFNlY29uZHMgaW5maW5pdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMoc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAg
IAorICAgIFNlY29uZHMgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMgb3BlcmF0b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBT
ZWNvbmRzKC12YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gSXQgbWFrZXMgc2Vuc2UgdG8g
Y29uc2lkZXIgc2NhbGluZyBhIGR1cmF0aW9uLCBsaWtlLCAiSSB3YW50IHRvIHdhaXQgNSB0aW1l
cyBhcyBsb25nIGFzCisgICAgLy8gbGFzdCB0aW1lISIuCisgICAgU2Vjb25kcyBvcGVyYXRvcioo
ZG91YmxlIHNjYWxhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVl
KCkgKiBzY2FsYXIpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLyhkb3VibGUg
c2NhbGFyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAvIHNj
YWxhcik7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgcmVhc29uYWJsZSB0byB0aGluayBhYm91
dCByYXRpb3MgYmV0d2VlbiBTZWNvbmRzLgorICAgIGRvdWJsZSBvcGVyYXRvci8oU2Vjb25kcyBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSgpIC8gb3RoZXIudmFsdWUo
KTsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAg
CisgICAgU2Vjb25kcyYgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyYg
b3BlcmF0b3IqPShkb3VibGUgc2NhbGFyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0g
KnRoaXMgKiBzY2FsYXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yLz0oZG91
YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC8gc2NhbGFy
OworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgb3BlcmF0b3Ir
KFdhbGxUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBv
cGVyYXRvcisoTW9ub3RvbmljVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIG9w
ZXJhdG9yLShXYWxsVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25p
Y1RpbWUgb3BlcmF0b3ItKE1vbm90b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShTZWNvbmRz
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92
YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KFNlY29uZHMgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPihTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPD0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
IDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+PShTZWNv
bmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIu
bV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNs
ZWVwKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9Owor
fTsKKworfSAvLyBuYW1lc3BhZSBXVEYKKwordXNpbmcgV1RGOjpTZWNvbmRzOwpJbmRleDogU291
cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5oIgorCisjaW5jbHVkZSAiQ29uZGl0aW9uLmgiCisjaW5jbHVkZSAiTG9j
ay5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpub3coQ2xvY2tU
eXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5cGU6Oldh
bGw6CisgICAgICAgIHJldHVybiBXYWxsVGltZTo6bm93KCk7CisgICAgY2FzZSBDbG9ja1R5cGU6
Ok1vbm90b25pYzoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUoKTsKK30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVDbG9jaygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG5vdyhjbG9ja1R5cGUoKSk7Cit9CisKK1dhbGxUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6d2FsbFRpbWUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBDbG9j
a1R5cGU6OldhbGwpOworICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd0RvdWJsZShtX3ZhbHVl
KTsKK30KKworTW9ub3RvbmljVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25p
Y1RpbWUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBDbG9ja1R5cGU6
Ok1vbm90b25pYyk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdEb3VibGUobV92
YWx1ZSk7Cit9CisKK1dhbGxUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6YXBwcm94aW1h
dGVXYWxsVGltZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENs
b2NrVHlwZTo6V2FsbDoKKyAgICAgICAgcmV0dXJuIHdhbGxUaW1lKCk7CisgICAgY2FzZSBDbG9j
a1R5cGU6Ok1vbm90b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKS5hcHByb3hp
bWF0ZVdhbGxUaW1lKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIFdhbGxUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlOjphcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdAoreworICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAgICAgIHJldHVy
biB3YWxsVGltZSgpLmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpOworICAgIGNhc2UgQ2xvY2tU
eXBlOjpNb25vdG9uaWM6CisgICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCk7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1Rp
bWUoKTsKK30KKworU2Vjb25kcyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVB
U0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBTZWNvbmRzKG1f
dmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om9wZXJhdG9yPChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25z
dAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJl
dHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGU6Om9wZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVy
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOwor
ICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JiBvdGhlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90
eXBlKTsKKyAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PShjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBv
dGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7Cit9CisK
K3ZvaWQgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIigiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30K
Kwordm9pZCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBM
b2NrIGZha2VMb2NrOworICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOworICAgIExvY2tIb2xk
ZXIgZmFrZUxvY2tlcihmYWtlTG9jayk7CisgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFr
ZUxvY2ssICp0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNl
L1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+CisjaW5jbHVk
ZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUgeworcHVibGljOgorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgpIHsg
fQorICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZShXYWxsVGltZSB0aW1lKQorICAg
ICAgICA6IG1fdmFsdWUodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpCisgICAgICAg
ICwgbV90eXBlKENsb2NrVHlwZTo6V2FsbCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZShNb25vdG9uaWNUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1
ZSh0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5cGUoQ2xv
Y2tUeXBlOjpNb25vdG9uaWMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlIGZyb21SYXdEb3VibGUoZG91YmxlIHZhbHVlLCBDbG9ja1R5cGUg
dHlwZSkKKyAgICB7CisgICAgICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJlc3VsdC5tX3R5cGUgPSB0
eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIHNl
Y29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlKTsgfQorICAg
IENsb2NrVHlwZSBjbG9ja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBub3co
Q2xvY2tUeXBlKTsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlIG5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdDsKKyAgICAKKyAgICBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUgd2l0aFNhbWVDbG9ja0FuZFJhd0RvdWJsZShkb3VibGUgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9t
UmF3RG91YmxlKHZhbHVlLCBjbG9ja1R5cGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2Vy
dHMgdGhhdCB0aGUgdGltZSBpcyBvZiB0aGUgdHlwZSB5b3Ugd2FudC4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV2FsbFRpbWUgd2FsbFRpbWUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgTW9ub3RvbmljVGltZSBtb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1RpbWUo
KSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJh
dG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1l
Q2xvY2tBbmRSYXdEb3VibGUobV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAK
KyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd0RvdWJsZShtX3Zh
bHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2Fs
YXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQgYXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFs
Z2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0aW9ucy4gU28sIHdlIGFsbG93IGl0LgorICAgIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdEb3VibGUoLW1fdmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAg
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAg
IAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBTZWNvbmRzIG9wZXJhdG9yLShjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWUKKyAgICAgICAgICAgICYmIG1fdHlwZSA9
PSBvdGhlci5tX3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBUbyBkbyByZWxhdGl2
ZSBjb21wYXJpc29ucywgeW91IG11c3QgYmUgdXNpbmcgdGltZXMgd2l0aCB0aGUgc2FtZSBjbG9j
ayB0eXBlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPChjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcj49
KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRv
dWJsZSBtX3ZhbHVlIHsgMCB9OworICAgIENsb2NrVHlwZSBtX3R5cGUgeyBDbG9ja1R5cGU6Oldh
bGwgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldhbGxUaW1lLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGlt
ZS5oIgorI2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5o
IgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorCituYW1lc3BhY2UgV1RG
IHsKKworV2FsbFRpbWUgV2FsbFRpbWU6Om5vdygpCit7CisgICAgV2FsbFRpbWUgcmVzdWx0Owor
ICAgIHJlc3VsdC5tX3ZhbHVlID0gY3VycmVudFRpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitNb25vdG9uaWNUaW1lIFdhbGxUaW1lOjphcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBj
b25zdAoreworICAgIHJldHVybiAqdGhpcyAtIG5vdygpICsgTW9ub3RvbmljVGltZTo6bm93KCk7
Cit9CisKK3ZvaWQgV2FsbFRpbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoIldhbGwoIiwgbV92YWx1ZSwgIiBzZWMpIik7Cit9CisKK3ZvaWQgV2FsbFRp
bWU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoKnRoaXMp
LnNsZWVwKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1dhbGxUaW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV2FsbFRpbWUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9u
aWNUaW1lOworY2xhc3MgUHJpbnRTdHJlYW07CisKKy8vIFRoZSBjdXJyZW50IHRpbWUgYWNjb3Jk
aW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuIFRoaXMgdXNlcyBmbG9h
dGluZyBwb2ludAorLy8gaW50ZXJuYWxseSBzbyB0aGF0IHlvdSBjYW4gcmVhc29uIGFib3V0IGlu
ZmluaXR5IGFuZCBvdGhlciB0aGluZ3MgdGhhdCBhcmlzZSBpbiBtYXRoLiBJdCdzCisvLyBhY2Nl
cHRhYmxlIHRvIHVzZSB0aGlzIHRvIHdyYXAgTmFOIHRpbWVzLCBuZWdhdGl2ZSB0aW1lcywgYW5k
IGluZmluaXRlIHRpbWVzLCBzbyBsb25nIGFzIHRoZXkKKy8vIGFyZSByZWxhdGl2ZSB0byB0aGUg
c2FtZSBjbG9jay4gU3BlY2lmaWNhbGx5LCBXYWxsVGltZSBzaG91bGQgYmUgdXNlZCBpbiBhZ3Jl
ZW1lbnQgd2l0aCB0aGUKKy8vIHByaW5jaXBsZSB0aGF0IFdhbGxUaW1lOjpub3coKS5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkgaXMgdGhlIHNhbWUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgor
Y2xhc3MgV2FsbFRpbWUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBDbG9ja1R5cGUgY2xv
Y2tUeXBlID0gQ2xvY2tUeXBlOjpXYWxsOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGVwb2No
LiBTbywgeC5zZWNvbmRzU2luY2VFcG9jaCgpIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB4IC0gV2Fs
bFRpbWUoKS4KKyAgICBXYWxsVGltZSgpIHsgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5
b3Uga25vdyBmb3Igc3VyZSB0aGF0IHRoZSBkb3VibGUgcmVwcmVzZW50cyB0aW1lIGFjY29yZGlu
ZyB0bworICAgIC8vIFdURjo6Y3VycmVudFRpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFu
ZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNhbWUgdGltZSBzb3VyY2UuCisgICAgc3RhdGljIFdhbGxU
aW1lIGZyb21SYXdEb3VibGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgV2FsbFRpbWUg
cmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdhbGxU
aW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBXYWxsVGltZSBpbmZpbml0eSgpIHsgcmV0dXJu
IGZyb21SYXdEb3VibGUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsg
fQorICAgIAorICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBT
ZWNvbmRzKG1fdmFsdWUpOyB9CisgICAgCisgICAgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxsVGlt
ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90
b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIAor
ICAgIFdhbGxUaW1lIG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZyb21SYXdEb3VibGUobV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0K
KyAgICAKKyAgICBXYWxsVGltZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91YmxlKG1fdmFsdWUgLSBvdGhlci52YWx1ZSgpKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNjYWxhciBhbmQgc2NhbGFycyBjYW4gYmUg
bmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20gYWxnZWJyYWljCisgICAgLy8gdHJhbnNm
b3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAgV2FsbFRpbWUgb3BlcmF0b3ItKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91YmxlKC1tX3ZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgV2FsbFRpbWUmIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIFdh
bGxUaW1lJiBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9y
LShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1f
dmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KFdhbGxUaW1l
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92
YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoV2FsbFRpbWUgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPD0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPj0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1
ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OldhbGxUaW1l
OworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDEzICs0NSwxNCBAQCB2b2lkIEJpbmFyeVNlbWFwaG9y
ZTo6c2lnbmFsKCkKICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKIH0KIAotYm9vbCBCaW5hcnlT
ZW1hcGhvcmU6OndhaXQoZG91YmxlIGFic29sdXRlVGltZSkKK2Jvb2wgQmluYXJ5U2VtYXBob3Jl
Ojp3YWl0KFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBhYnNvbHV0ZVRpbWUpCiB7CiAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwogCiAgICAgYm9vbCB0aW1lZE91dCA9IGZhbHNlOwog
ICAgIHdoaWxlICghbV9pc1NldCkgewotICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi50
aW1lZFdhaXQobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKKyAgICAgICAgdGltZWRPdXQgPSAhbV9j
b25kaXRpb24udGltZWRXYWl0KAorICAgICAgICAgICAgbV9tdXRleCwgYWJzb2x1dGVUaW1lLmFw
cHJveGltYXRlV2FsbFRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwogICAgICAg
ICBpZiAodGltZWRPdXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDog
U291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oCShyZXZpc2lvbiAyMDgzNTgp
CisrKyBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEJpbmFyeVNlbWFwaG9yZV9o
CiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
IAogbmFtZXNwYWNlIFdURiB7CkBAIC0zOSw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgfkJpbmFyeVNlbWFwaG9yZSgpOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2lnbmFsKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgd2FpdChkb3VibGUg
YWJzb2x1dGVUaW1lKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB3YWl0KFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2V0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTYtMTEtMDQgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEY6OlBhcmtpbmdMb3Qgc2hvdWxkIHN0b3Ag
dXNpbmcgc3RkOjpjaHJvbm8gYmVjYXVzZSBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gY2FzdHMgYXJl
IHByb25lIHRvIG92ZXJmbG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUyMDQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuIEkgd2lsbCB3cml0ZSB1bml0IHRlc3Rz
IChPT1BTISkuCisKKyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6YmxvYlNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oOgorICAgICAgICAqIHBs
YXRmb3JtL1NoYXJlZFRpbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVyczo6dXBkYXRlU2hhcmVkVGltZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUpOgorCiAyMDE2LTExLTAzICBSeWFuIEhhZGRhZCAgPHJ5
YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIy
MDgzMDIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsx
NTAsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgVGhyZWFkYWJsZUJsb2JSZWdpc3RyCiAgICAgICAg
ICAgICByZXN1bHRTaXplID0gYmxvYlJlZ2lzdHJ5KCkuYmxvYlNpemUodXJsKTsKICAgICAgICAg
ICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgfSk7Ci0gICAgICAgIHNlbWFwaG9yZS53
YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworICAgICAgICBzZW1hcGhv
cmUud2FpdChXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHRT
aXplOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWFpblRocmVhZFNoYXJlZFRp
bWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWFpblRocmVhZFNo
YXJlZFRpbWVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01haW5UaHJlYWRTaGFyZWRUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE1h
aW5UaHJlYWRTaGFyZWRUaW1lciYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHNldEZpcmVkRnVu
Y3Rpb24oc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Rmly
ZUludGVydmFsKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoU2Vj
b25kcykgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBpbnZh
bGlkYXRlKCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkVGlt
ZXIuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
VGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDMsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEZpcmVkRnVu
Y3Rpb24oc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYpID0gMDsKIAogICAgIC8vIFRoZSBmaXJlIGlu
dGVydmFsIGlzIGluIHNlY29uZHMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgbW9ub3RvbmljIGNs
b2NrIHRpbWUuCi0gICAgdmlydHVhbCB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlyZUludGVydmFsKFNlY29uZHMpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkgeyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAJKHJldmlzaW9u
IDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBUaHJlYWRUaW1lcnM6OnVwZGF0ZVNoYXJlZFRp
bWVyKCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gCiAgICAgICAgIG1fcGVu
ZGluZ1NoYXJlZFRpbWVyRmlyZVRpbWUgPSBuZXh0RmlyZVRpbWU7Ci0gICAgICAgIG1fc2hhcmVk
VGltZXItPnNldEZpcmVJbnRlcnZhbChzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJyZW50TW9u
b3RvbmljVGltZSwgMC4wKSk7CisgICAgICAgIG1fc2hhcmVkVGltZXItPnNldEZpcmVJbnRlcnZh
bChTZWNvbmRzKHN0ZDo6bWF4KG5leHRGaXJlVGltZSAtIGN1cnJlbnRNb25vdG9uaWNUaW1lLCAw
LjApKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9NYWlu
VGhyZWFkU2hhcmVkVGltZXJDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9NYWluVGhyZWFkU2hhcmVkVGltZXJDRi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAxMCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsMTEgKzkzLDExIEBAIHZv
aWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjppbnZhbGlkYXRlKCkKICAgICBzaGFyZWRUaW1lciA9
IG51bGxwdHI7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2
YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJ
bnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24p
OwogCi0gICAgQ0ZBYnNvbHV0ZVRpbWUgZmlyZURhdGUgPSBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSArIGludGVydmFsOworICAgIENGQWJzb2x1dGVUaW1lIGZpcmVEYXRlID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbC52YWx1ZSgpOwogICAgIGlmICghc2hhcmVkVGlt
ZXIpIHsKICAgICAgICAgc2hhcmVkVGltZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShudWxscHRy
LCBmaXJlRGF0ZSwga0NGVGltZUludGVydmFsRGlzdGFudEZ1dHVyZSwgMCwgMCwgdGltZXJGaXJl
ZCwgbnVsbHB0cik7CiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1lckVmbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1lckVmbC5jcHAJKHJl
dmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFk
U2hhcmVkVGltZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAg
ICAgICAgIChDKSAyMDA4IEFmb25zbyBSYWJlbG8gQ29zdGEgSnIuCiAgKiAgICAgICAgICAgKEMp
IDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwogICogICAgICAgICAgIChDKSAy
MDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTMsMTAgKzU0LDEwIEBAIHZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzdG9wKCkK
ICAgICB9CiB9CiAKLXZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwo
ZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRl
cnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIHN0b3AoKTsKLSAgICBzaGFyZWRUaW1lciA9
IGVjb3JlX3RpbWVyX2xvb3BfYWRkKGludGVydmFsLCB0aW1lckV2ZW50LCBudWxscHRyKTsKKyAg
ICBzaGFyZWRUaW1lciA9IGVjb3JlX3RpbWVyX2xvb3BfYWRkKGludGVydmFsLnZhbHVlKCksIHRp
bWVyRXZlbnQsIG51bGxwdHIpOwogfQogCiB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6aW52
YWxpZGF0ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRT
aGFyZWRUaW1lckdMaWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dsaWIvTWFpblRocmVhZFNoYXJlZFRpbWVyR0xpYi5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvTWFpblRocmVhZFNoYXJlZFRpbWVyR0xpYi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKQEAgLTM5LDEwICszOSwxMCBAQCBNYWluVGhyZWFkU2hhcmVkVGltZXI6
Ok1haW5UaHJlYWRTaGFyZWRUCiAgICAgbV90aW1lci5zZXRQcmlvcml0eShHX1BSSU9SSVRZX0hJ
R0hfSURMRSArIDIwKTsKIH0KIAotdm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJ
bnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0
RmlyZUludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpCiB7CiAgICAgQVNTRVJUKG1fZmlyZWRGdW5j
dGlvbik7Ci0gICAgbV90aW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOworICAgIG1fdGltZXIu
c3RhcnRPbmVTaG90KGludGVydmFsLnZhbHVlKCkpOwogfQogCiB2b2lkIE1haW5UaHJlYWRTaGFy
ZWRUaW1lcjo6c3RvcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTWFpblRo
cmVhZFNoYXJlZFRpbWVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vTWFpblRocmVhZFNoYXJlZFRpbWVyV2luLmNwcAkocmV2aXNpb24gMjA4MzU4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTIxLDEyICsxMjEsMTIgQEAgc3RhdGljIHZvaWQgTlRBUEkg
cXVldWVUaW1lclByb2MoUFZPSUQsIAogICAgICAgICBQb3N0TWVzc2FnZSh0aW1lcldpbmRvd0hh
bmRsZSwgdGltZXJGaXJlZE1lc3NhZ2UsIDAsIDApOwogfQogCi12b2lkIE1haW5UaHJlYWRTaGFy
ZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVh
ZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbFNlY29uZHMpCiB7
CiAgICAgQVNTRVJUKG1fZmlyZWRGdW5jdGlvbik7CiAKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBp
bnRlcnZhbEluU2Vjb25kcy5taWxsaXNlY29uZHMoKTsKICAgICB1bnNpZ25lZCBpbnRlcnZhbElu
TVM7Ci0gICAgaW50ZXJ2YWwgKj0gMTAwMDsKICAgICBpZiAoaW50ZXJ2YWwgPiBVU0VSX1RJTUVS
X01BWElNVU0pCiAgICAgICAgIGludGVydmFsSW5NUyA9IFVTRVJfVElNRVJfTUFYSU1VTTsKICAg
ICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAJKHJl
dmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC00OSwxNiArNTAsMTYgQEAgY2xhc3MgV29ya2VyU2hhcmVkVGlt
ZXIgZmluYWwgOiBwdWJsaWMgUwogcHVibGljOgogICAgIC8vIFNoYXJlZFRpbWVyIGludGVyZmFj
ZS4KICAgICB2b2lkIHNldEZpcmVkRnVuY3Rpb24oc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZnVu
Y3Rpb24pIG92ZXJyaWRlIHsgbV9zaGFyZWRUaW1lckZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlv
bik7IH0KLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIG92ZXJyaWRl
IHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRlcnZhbCArIGN1cnJlbnRUaW1lKCk7IH0KLSAgICB2b2lk
IHN0b3AoKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gMDsgfQorICAgIHZvaWQgc2V0Rmly
ZUludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBp
bnRlcnZhbCArIFdhbGxUaW1lOjpub3coKTsgfQorICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlIHsg
bV9uZXh0RmlyZVRpbWUgPSBXYWxsVGltZSgpOyB9CiAKICAgICBib29sIGlzQWN0aXZlKCkgeyBy
ZXR1cm4gbV9zaGFyZWRUaW1lckZ1bmN0aW9uICYmIG1fbmV4dEZpcmVUaW1lOyB9Ci0gICAgZG91
YmxlIGZpcmVUaW1lKCkgeyByZXR1cm4gbV9uZXh0RmlyZVRpbWU7IH0KKyAgICBXYWxsVGltZSBm
aXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9CiAgICAgdm9pZCBmaXJlKCkgeyBt
X3NoYXJlZFRpbWVyRnVuY3Rpb24oKTsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBtX3NoYXJlZFRpbWVyRnVuY3Rpb247Ci0gICAgZG91YmxlIG1fbmV4dEZpcmVUaW1l
IHsgMCB9OworICAgIFdhbGxUaW1lIG1fbmV4dEZpcmVUaW1lOwogfTsKIAogY2xhc3MgTW9kZVBy
ZWRpY2F0ZSB7CkBAIC0xNTcsMTUgKzE1OCwxNiBAQCBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdv
cmtlclJ1bkxvb3A6OnJ1CiAgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihtYWluQ29u
dGV4dCwgRkFMU0UpOwogI2VuZGlmCiAKLSAgICBkb3VibGUgZGVhZGxpbmUgPSBNZXNzYWdlUXVl
dWU8VGFzaz46OmluZmluaXRlVGltZSgpOworICAgIFdhbGxUaW1lIGRlYWRsaW5lID0gV2FsbFRp
bWU6OmluZmluaXR5KCk7CiAKICNpZiBVU0UoQ0YpCiAgICAgQ0ZBYnNvbHV0ZVRpbWUgbmV4dENG
UnVuTG9vcFRpbWVyRmlyZURhdGUgPSBDRlJ1bkxvb3BHZXROZXh0VGltZXJGaXJlRGF0ZShDRlJ1
bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAgICAgZG91YmxlIHRp
bWVVbnRpbE5leHRDRlJ1bkxvb3BUaW1lckluU2Vjb25kcyA9IG5leHRDRlJ1bkxvb3BUaW1lckZp
cmVEYXRlIC0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgZGVhZGxpbmUgPSBjdXJy
ZW50VGltZSgpICsgc3RkOjptYXgoMC4wLCB0aW1lVW50aWxOZXh0Q0ZSdW5Mb29wVGltZXJJblNl
Y29uZHMpOworICAgIGRlYWRsaW5lID0gV2FsbFRpbWU6Om5vdygpICsgc3RkOjptYXgoCisgICAg
ICAgIFNlY29uZHMoMCksIFNlY29uZHModGltZVVudGlsTmV4dENGUnVuTG9vcFRpbWVySW5TZWNv
bmRzKSk7CiAjZW5kaWYKIAotICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWUgPSAwLjA7CisgICAgV2Fs
bFRpbWUgYWJzb2x1dGVUaW1lOwogICAgIGlmICh3YWl0TW9kZSA9PSBXYWl0Rm9yTWVzc2FnZSkg
ewogICAgICAgICBpZiAocHJlZGljYXRlLmlzRGVmYXVsdE1vZGUoKSAmJiBtX3NoYXJlZFRpbWVy
LT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgYWJzb2x1dGVUaW1lID0gc3RkOjptaW4oZGVhZGxp
bmUsIG1fc2hhcmVkVGltZXItPmZpcmVUaW1lKCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNjEgQEAKKzIwMTYtMTEtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBXVEY6OlBhcmtpbmdMb3Qgc2hvdWxkIHN0b3AgdXNpbmcgc3RkOjpjaHJvbm8g
YmVjYXVzZSBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gY2FzdHMgYXJlIHByb25lIHRvIG92ZXJmbG93
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMDQ1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OlN5bmNN
ZXNzYWdlU3RhdGU6OndhaXQpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5kTWVzc2Fn
ZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGlt
ZW91dHNGb3JUZXN0aW5nKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6d2FpdEZvck1lc3Nh
Z2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5kU3luY01lc3NhZ2UpOgorICAgICAg
ICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5KToKKyAgICAgICAgKiBQbGF0Zm9y
bS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5kU3luYyk6
CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5
KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5oOgorICAgICAgICAoSVBD
OjpNZXNzYWdlU2VuZGVyOjpzZW5kU3luYyk6CisgICAgICAgICogVUlQcm9jZXNzL0NoaWxkUHJv
Y2Vzc1Byb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kU3lu
Yyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphcHBsaWNhdGlvbldp
bGxUZXJtaW5hdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKC1bV0tPbmVT
aG90RGlzcGxheUxpbmtIYW5kbGVyIGRpc3BsYXlMaW5rRmlyZWQ6XSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNvbW1pdExheWVyVHJlZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFJlZnJl
c2hEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckRpZFVwZGF0
ZUFjdGl2aXR5U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIg
aW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcldpbGxCZWdpbkFuaW1hdGlvbjpdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkYXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmFjY2VwdHNGaXJzdE1vdXNlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmly
bVBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0
QWxlcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRD
b25maXJtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0
UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpwcmludCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cG9zdFN5bmNo
cm9ub3VzTWVzc2FnZUZvclRlc3RpbmcpOgorCiAyMDE2LTExLTAzICBUaW0gSG9ydG9uICA8dGlt
b3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFByaW50aW5nIHRvIFBERiBzaG91bGQg
cHJvZHVjZSBpbnRlcm5hbCBsaW5rcyB3aGVuIEhUTUwgaGFzIGludGVybmFsIGxpbmtzCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAy
MDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBtX3dhaXRGb3JTeW5j
UmVwbHlTZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfQogCi0gICAgYm9vbCB3YWl0KGRvdWJsZSBh
YnNvbHV0ZVRpbWUpCisgICAgYm9vbCB3YWl0KFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBhYnNv
bHV0ZVRpbWUpCiAgICAgewogICAgICAgICByZXR1cm4gbV93YWl0Rm9yU3luY1JlcGx5U2VtYXBo
b3JlLndhaXQoYWJzb2x1dGVUaW1lKTsKICAgICB9CkBAIC0zNzYsNyArMzc2LDcgQEAgYm9vbCBD
b25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZQogICAgICAgICBhdXRvIHdyYXBwZWRN
ZXNzYWdlID0gY3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKCJJUEMiLCAiV3JhcHBlZEFzeW5jTWVz
c2FnZUZvclRlc3RpbmciLCBlbmNvZGVyLT5kZXN0aW5hdGlvbklEKCksIHN5bmNSZXF1ZXN0SUQp
OwogICAgICAgICB3cmFwcGVkTWVzc2FnZS0+c2V0RnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0
aW5nKCk7CiAgICAgICAgIHdyYXBwZWRNZXNzYWdlLT53cmFwRm9yVGVzdGluZyhXVEZNb3ZlKGVu
Y29kZXIpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHNlbmRTeW5jTWVzc2Fn
ZShzeW5jUmVxdWVzdElELCBXVEZNb3ZlKHdyYXBwZWRNZXNzYWdlKSwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kczo6bWF4KCksIHsgfSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9v
bD4oc2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdURk1vdmUod3JhcHBlZE1lc3NhZ2Up
LCBTZWNvbmRzOjppbmZpbml0eSgpLCB7IH0pKTsKICAgICB9CiAKICAgICBpZiAoc2VuZE9wdGlv
bnMuY29udGFpbnMoU2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9y
U3luY1JlcGx5KQpAQCAtNDIwLDEyICs0MjAsMTIgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kU3lu
Y1JlcGx5KHN0ZDo6dW5pcQogICAgIHJldHVybiBzZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIp
LCB7IH0pOwogfQogCi1zdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIENvbm5lY3Rpb246OnRpbWVv
dXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCkgY29uc3QKK1NlY29uZHMgQ29ubmVjdGlvbjo6dGltZW91dFJlc3BlY3Rp
bmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoU2Vjb25kcyB0aW1lb3V0KSBjb25zdAogewotICAg
IHJldHVybiBtX2lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyA/IHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM6Om1heCgpIDogdGltZW91dDsKKyAgICByZXR1cm4gbV9pZ25vcmVUaW1lb3V0c0ZvclRl
c3RpbmcgPyBTZWNvbmRzOjppbmZpbml0eSgpIDogdGltZW91dDsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90
IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9u
U2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQorc3RkOjp1bmlxdWVfcHRyPERlY29k
ZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVj
ZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JP
cHRpb25zKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTQ3MCw5ICs0
NzAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpCiAgICAgfQog
CiAgICAgLy8gQ2xhbXAgdGhlIHRpbWVvdXQgdG8gaG93ZXZlciBtdWNoIHRpbWUgaXMgcmVtYWlu
aW5nIG9uIG91ciBjbG9jay4KLSAgICBhdXRvIG5vdyA9IENvbmRpdGlvbjo6Q2xvY2s6Om5vdygp
OwotICAgIGF1dG8gcmVtYWluaW5nQ2xvY2tUaW1lID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oQ29uZGl0aW9uOjpDbG9jazo6dGltZV9wb2lu
dDo6bWF4KCkgLSBub3cpOwotICAgIGF1dG8gYWJzb2x1dGVUaW1lb3V0ID0gbm93ICsgc3RkOjpt
aW4ocmVtYWluaW5nQ2xvY2tUaW1lLCB0aW1lb3V0KTsKKyAgICBNb25vdG9uaWNUaW1lIGFic29s
dXRlVGltZW91dCA9IE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dDsKIAogICAgIC8vIE5v
dyB3YWl0IGZvciBpdCB0byBiZSBzZXQuCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTQ5Niw3ICs0
OTQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjpz
ZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVu
Y29kZXI+IGVuY29kZXIsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9u
U2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8RGVj
b2Rlcj4gQ29ubmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQs
IHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyLCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlv
blNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKQEAgLTU0MSwxMCArNTM5LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxE
ZWNvZGVyPiBDb25uZWN0aW9uOjpzZW4KICAgICByZXR1cm4gcmVwbHk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5
bmNSZXF1ZXN0SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0
PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rl
cj4gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBT
ZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25z
KQogewogICAgIHRpbWVvdXQgPSB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVz
dGluZyh0aW1lb3V0KTsKLSAgICBkb3VibGUgYWJzb2x1dGVUaW1lID0gY3VycmVudFRpbWUoKSAr
ICh0aW1lb3V0LmNvdW50KCkgLyAxMDAwLjApOworICAgIFdhbGxUaW1lIGFic29sdXRlVGltZSA9
IFdhbGxUaW1lOjpub3coKSArIHRpbWVvdXQ7CiAKICAgICB3aWxsU2VuZFN5bmNNZXNzYWdlKHNl
bmRTeW5jT3B0aW9ucyk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0lQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTY2LDEzICsxNjYsMTMgQEAg
cHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdl
LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4gc2VuZE9wdGlv
bnMgPSB7IH0pOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFdpdGhSZXBseShU
JiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgRnVuY3Rpb25EaXNwYXRjaGVyJiBy
ZXBseURpc3BhdGNoZXIsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPHR5cGVuYW1lIENvZGluZ1R5
cGU8dHlwZW5hbWUgVDo6UmVwbHk+OjpUeXBlPik+JiYgcmVwbHlIYW5kbGVyKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpS
ZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgT3B0aW9u
U2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGJvb2wgd2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkodWludDY0X3Qg
ZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25T
ZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMgPSB7IH0pOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYg
cmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6
OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0g
eyB9KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9u
U2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9KTsKIAogICAgIGJvb2wgc2Vu
ZE1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4g
c2VuZE9wdGlvbnMpOwogICAgIHZvaWQgc2VuZE1lc3NhZ2VXaXRoUmVwbHkodWludDY0X3QgcmVx
dWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIEZ1bmN0aW9uRGlzcGF0Y2hlciYgcmVw
bHlEaXNwYXRjaGVyLCBGdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4pPiYm
IHJlcGx5SGFuZGxlcik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGNyZWF0ZVN5bmNN
ZXNzYWdlRW5jb2RlcihTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCB1aW50NjRfdCYg
c3luY1JlcXVlc3RJRCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHNlbmRTeW5jTWVz
c2FnZSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9u
PiBzZW5kU3luY09wdGlvbnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBzZW5kU3lu
Y01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+
LCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRp
b25zKTsKICAgICBib29sIHNlbmRTeW5jUmVwbHkoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+KTsK
IAogICAgIHZvaWQgd2FrZVVwUnVuTG9vcCgpOwpAQCAtMjA4LDkgKzIwOCw5IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllcik7CiAgICAgdm9pZCBwbGF0
Zm9ybUludmFsaWRhdGUoKTsKICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2Fp
dEZvck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4pOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0Rm9yTWVzc2FnZShTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPik7
CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHdhaXRGb3JTeW5jUmVwbHkodWlu
dDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBP
cHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4g
d2FpdEZvclN5bmNSZXBseSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBTZWNvbmRzIHRpbWVvdXQs
IE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwogCiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25u
ZWN0aW9uIHdvcmsgcXVldWUuCiAgICAgdm9pZCBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKHN0ZDo6
dW5pcXVlX3B0cjxEZWNvZGVyPik7CkBAIC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHdpbGxTZW5kU3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7CiAgICAg
dm9pZCBkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwogCi0g
ICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVv
dXRzRm9yVGVzdGluZyhzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKSBjb25zdDsKKyAgICBTZWNv
bmRzIHRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKFNlY29uZHMpIGNv
bnN0OwogICAgIAogICAgIENsaWVudCYgbV9jbGllbnQ7CiAgICAgYm9vbCBtX2lzU2VydmVyOwpA
QCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2VuZFdpdGhSZXBseShUJiYgbWVz
c2EKICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjpz
ZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWludDY0X3Qg
ZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25T
ZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGJvb2wgQ29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5
JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9u
U2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAgICAgQ09NUElMRV9BU1NF
UlQoVDo6aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsKIApAQCAtMzg5LDcgKzM4OSw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6c2UKICAgICByZXR1cm4gcmVw
bHlEZWNvZGVyLT5kZWNvZGUocmVwbHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29s
IENvbm5lY3Rpb246OndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3Rp
bmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdh
aXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBD
b25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5h
dGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9y
T3B0aW9ucykKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gZGVjb2RlciA9IHdhaXRG
b3JNZXNzYWdlKFQ6OnJlY2VpdmVyTmFtZSgpLCBUOjpuYW1lKCksIGRlc3RpbmF0aW9uSUQsIHRp
bWVvdXQsIHdhaXRGb3JPcHRpb25zKTsKICAgICBpZiAoIWRlY29kZXIpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgJKHJldmlzaW9uIDIwODM1OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkm
JiByZXBseSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kczo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zID0geyB9KQorICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6
OlJlcGx5JiYgcmVwbHksIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9w
dGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KQogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydChUOjppc1N5bmMsICJNZXNzYWdlIGlzIG5vdCBzeW5jISIpOwog
CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYg
cmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKKyAgICBib29sIHNlbmRTeW5jKFQm
JiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlv
bklELCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaGlsZFByb2Nlc3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlv
bklELCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUg
VDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMSksIE9wdGlvblNldDxJUEM6OlNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHMoMSksIE9wdGlv
blNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOwogCiAgICAg
SVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QKICAgICB7CkBAIC0xMDIsNyArMTAy
LDcgQEAgYm9vbCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZChUJiYgbWVzc2FnZQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiAKLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRT
eW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCitib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5k
U3luYyhVJiYgbWVzc2FnZSwgdHlwZW5hbWUgVTo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVz
dGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlv
bj4gc2VuZFN5bmNPcHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJUKFU6OmlzU3luYywgU3lu
Y01lc3NhZ2VFeHBlY3RlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA2LDcgKzkw
Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kUHJvY2Vzc1dpbGxTdXMKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgc2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHk6OlJlcGx5KGhhbmRsZWQp
LCAwLCBzdGQ6OmNocm9ubzo6c2Vjb25kcygxKSk7CisgICAgc2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHk6OlJlcGx5KGhhbmRsZWQpLCAwLCBT
ZWNvbmRzKDEpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNw
ZW5kKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjphcHAKICAgICAgICAgLy8gTWFrZSBzdXJlIGFueSBvbmdvaW5nIHdv
cmsgaW4gb3VyIHF1ZXVlIGlzIGZpbmlzaGVkIGJlZm9yZSB3ZSB0ZXJtaW5hdGUuCiAgICAgICAg
IHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKLSAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICBzZW1hcGhvcmUud2FpdChXYWxsVGlt
ZTo6aW5maW5pdHkoKSk7CiB9CiAKIFN0cmluZyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnBlcnNpc3RlbnRTdG9yYWdlUGF0aChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NjksNyArMzY5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kUHJvY2Vzc1dpbAog
ICAgICAgICByZXR1cm47CiAKICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBzZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHko
KSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
OjpSZXBseShoYW5kbGVkKSwgMCwgc3RkOjpjaHJvbm86OnNlY29uZHMoMSkpOworICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eSgpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHk6OlJlcGx5KGhhbmRsZWQpLCAwLCBTZWNvbmRzKDEpKTsKIH0KICAgICAKIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2VuZFByZXBhcmVUb1N1c3BlbmQoKQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NDMsNyArODQzLDcgQEAgdm9pZCBTdG9yYWdlTWFu
YWdlcjo6YXBwbGljYXRpb25XaWxsVGVybQogCiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsK
ICAgICB9KTsKLSAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
Om1heCgpKTsKKyAgICBzZW1hcGhvcmUud2FpdChXYWxsVGltZTo6aW5maW5pdHkoKSk7CiB9CiAK
IFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYSogU3RvcmFnZU1hbmFnZXI6OmZpbmRTdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGlj
OgogICAgIHVpbnQ2NF90IG5leHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1
cm4gbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCArIDE7IH0KICAgICB1aW50NjRfdCBs
YXN0Q29tbWl0dGVkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdDsgfQogCi0gICAgdm9pZCBkaWRSZWZyZXNoRGlz
cGxheShkb3VibGUgdGltZXN0YW1wKTsKKyAgICB2b2lkIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4MSw3IEBAIC0gKHZvaWQpZGVhbGxvYwogLSAo
dm9pZClkaXNwbGF5TGlua0ZpcmVkOihDQURpc3BsYXlMaW5rICopc2VuZGVyCiB7CiAgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgX2RyYXdpbmdBcmVhUHJveHktPmRpZFJlZnJlc2hEaXNw
bGF5KHNlbmRlci50aW1lc3RhbXApOworICAgIF9kcmF3aW5nQXJlYVByb3h5LT5kaWRSZWZyZXNo
RGlzcGxheSgpOwogfQogCiAtICh2b2lkKWludmFsaWRhdGUKQEAgLTIyOCwxMSArMjI4LDExIEBA
IHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Y28KIAogI2lmIFBMQVRGT1JN
KElPUykKICAgICBpZiAoc3RkOjpleGNoYW5nZShtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSwgTmVl
ZHNEaWRVcGRhdGUpID09IE1pc3NlZENvbW1pdCkKLSAgICAgICAgZGlkUmVmcmVzaERpc3BsYXko
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgICAgICBkaWRSZWZyZXNoRGlzcGxh
eSgpOwogICAgIFttX2Rpc3BsYXlMaW5rSGFuZGxlciBzY2hlZHVsZV07CiAjZWxzZQogICAgIG1f
ZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTmVlZHNEaWRVcGRhdGU7Ci0gICAgZGlkUmVmcmVzaERp
c3BsYXkobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIGRpZFJlZnJlc2hEaXNw
bGF5KCk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRvIG1pbGVzdG9uZXMgPSBsYXllclRyZWVUcmFu
c2FjdGlvbi5uZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzKCkpCkBAIC0zOTQsNyArMzk0LDcg
QEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjppbgogICAgIH0KIH0KIAot
dm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheShk
b3VibGUpCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmRpZFJlZnJlc2hE
aXNwbGF5KCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDI2LDE2ICs0MjYsMTYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5Ojp3YQogICAgIC8vIFdlIG11c3Qgc2VuZCB0aGUgZGlkVXBkYXRlIG1lc3NhZ2Ug
YmVmb3JlIGJsb2NraW5nIG9uIHRoZSBuZXh0IGNvbW1pdCwgb3RoZXJ3aXNlCiAgICAgLy8gd2Ug
Y2FuIGJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgbmV4dCBjb21taXQgd29uJ3QgY29tZSB1bnRpbCBh
ZnRlciB0aGUgd2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkgdGltZXMgb3V0LgogICAgIGlm
IChtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSAhPSBEb2VzTm90TmVlZERpZFVwZGF0ZSkKLSAgICAg
ICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAg
ICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwogCi0gICAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBbXSB7CisgICAgc3RhdGljIFNl
Y29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBbXSB7CiAgICAgICAgIGlmIChpZCB2
YWx1ZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktl
eTpAIldlYktpdE92ZXJyaWRlQWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQiXSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihbdmFsdWUgZG91YmxlVmFsdWVd
KSk7CisgICAgICAgICAgICByZXR1cm4gU2Vjb25kcyhbdmFsdWUgZG91YmxlVmFsdWVdKTsKIAog
I2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMoNTAwKTsKKyAgICAgICAgcmV0dXJuIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoNTAwKTsK
ICNlbHNlCi0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDI1MCk7Cisg
ICAgICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDI1MCk7CiAjZW5kaWYKICAg
ICB9KCk7CiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+d2FpdEZv
ckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk6OkNvbW1pdExheWVyVHJlZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIGFjdGl2
aXR5U3RhdGVVcGRhdGVUaW1lb3V0LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRp
bmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YVByb3h5Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEzMyw3ICsxMzMsNyBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHk6
CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckRpZFVw
ZGF0ZUFjdGl2aXR5U3RhdGUoKQogewotICAgIGF1dG8gYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVv
dXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDI1MCk7CisgICAgU2Vjb25kcyBhY3Rpdml0
eVN0YXRlVXBkYXRlVGltZW91dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMjUwKTsKICAg
ICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRVcGRhdGVBY3Rpdml0eVN0
YXRlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQs
IElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVz
KTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIwODM1OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xOTYsNyArMTk2LDcgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rp
b25SZWNvZ25pemVyV2lsbEJlZwogICAgIC8vIEZJWE1FOiBDb25uZWN0aW9uIGNhbiBiZSBudWxs
IGlmIHRoZSBwcm9jZXNzIGlzIGNsb3NlZDsgd2Ugc2hvdWxkIGNsZWFuIHVwIGJldHRlciBpbiB0
aGF0IGNhc2UuCiAgICAgaWYgKF9zdGF0ZSA9PSBJbW1lZGlhdGVBY3Rpb25TdGF0ZTo6UGVuZGlu
ZykgewogICAgICAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9IF9wYWdlLT5wcm9jZXNzKCkuY29u
bmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBib29sIHJlY2VpdmVkUmVwbHkgPSBjb25uZWN0aW9u
LT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdD4oX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAgICAgICAgICAgYm9vbCByZWNlaXZlZFJlcGx5
ID0gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q+KF9wYWdlLT5wYWdl
SUQoKSwgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1MDApKTsKICAgICAgICAgICAgIGlmICgh
cmVjZWl2ZWRSZXBseSkKICAgICAgICAgICAgICAgICBfc3RhdGUgPSBJbW1lZGlhdGVBY3Rpb25T
dGF0ZTo6VGltZWRPdXQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjksNyArMjI5LDcgQEAgU3RyaW5nIFdlYlBhZ2VQ
cm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUAogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gdmFsdWU7CiAgICAgCi0gICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDIw
KTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFN0cmluZ1Nl
bGVjdGlvbkZvclBhc3RlYm9hcmQoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkdldFN0cmluZ1NlbGVj
dGlvbkZvclBhc3RlYm9hcmQ6OlJlcGx5KHZhbHVlKSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0
KTsKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAgUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGFnZVBybwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0g
ICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsK
KyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDIwKTsKICAgICBwcm9jZXNzKCkuc2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldERhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKHBh
c3RlYm9hcmRUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXREYXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZDo6
UmVwbHkoaGFuZGxlLCBzaXplKSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICBpZiAo
aGFuZGxlLmlzTnVsbCgpKQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgV2ViUGFnZVByb3h5Ojpy
ZWFkU2VsZWN0aW9uRnJvbVBhc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJv
bm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMjApOwog
ICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6UmVhZFNlbGVjdGlvbkZy
b21QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlJlYWRTZWxl
Y3Rpb25Gcm9tUGFzdGVib2FyZDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1l
b3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDA4LDcgKzQwOCw3IEBAIGJvb2wgV2Vi
UGFnZVByb3h5OjpzaG91bGREZWxheVdpbmRvd09yZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0
ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMyk7CisgICAgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGlt
ZW91dCgzKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlNob3Vs
ZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChldmVudCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTaG91
bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBtZXNz
YWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBi
b29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0ZpcnN0TW91c2UoaW50CiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgY29uc3QgYXV0byBtZXNzYWdl
VGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDMpOworICAgIGNvbnN0IFNlY29uZHMgbWVz
c2FnZVRpbWVvdXQoMyk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
OjpBY2NlcHRzRmlyc3RNb3VzZShldmVudE51bWJlciwgZXZlbnQpLCBNZXNzYWdlczo6V2ViUGFn
ZTo6QWNjZXB0c0ZpcnN0TW91c2U6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBtZXNzYWdlVGlt
ZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1
NCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb24KIAogICAgIEhh
bmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAoIVdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChtZXNz
YWdlLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVm
b3JlVW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRDbG9zZSksIG1fcGFnZS0+cGFnZUlE
KCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9u
OjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2Vi
RnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNv
bmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nl
c3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzaG91
bGRDbG9zZTsKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2
YVNjcmlwdEFsZXJ0CiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRp
c2FibGVyOwogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFs
ZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGZy
YW1lKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFs
ZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1
c3BlbmQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVy
dCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFt
ZSksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVy
dDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpT
ZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwogfQogCiBi
b29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC00MTcsNyArNDE3LDcgQEAgYm9vbCBXZWJDaHJvbWVD
bGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maQogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5n
RGV0ZWN0aW9uRGlzYWJsZXI7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICgh
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUt
PmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdl
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OlJlcGx5KHJl
c3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgp
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkp
CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmly
bSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFt
ZSksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmly
bTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwg
SVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDM2LDcgKzQz
Niw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXAKIAogICAgIEhh
bmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAoIVdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZy
YW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlLCBk
ZWZhdWx0VmFsdWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0
OjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2ls
bFN1c3BlbmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21G
cmFtZShmcmFtZSksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCks
IFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3Jt
UHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
ICFyZXN1bHQuaXNOdWxsKCk7CkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnByaW50KEZyYW1lKiBmcmFtZQogICAgIH0KICNlbmRpZgogCi0gICAgbV9wYWdlLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lKHdlYkZyYW1lLT5mcmFtZUlE
KCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lOjpSZXBseSgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZTo6UmVwbHkoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwg
SVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwog
fQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIERhdGFiYXNlRGV0YWlscyBkZXRhaWxz
KQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFi
YXNlUXUKICAgICBpZiAoIW5ld1F1b3RhKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAogICAgICAgICAgICAgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhKHdlYkZyYW1lLT5mcmFt
ZUlEKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGRhdGFiYXNlTmFtZSwgZGV0YWls
cy5kaXNwbGF5TmFtZSgpLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwgZGV0YWls
cy5jdXJyZW50VXNhZ2UoKSwgZGV0YWlscy5leHBlY3RlZFVzYWdlKCkpLAotICAgICAgICAgICAg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdR
dW90YSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgp
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7
CisgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVv
dGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHko
KSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQp
OwogICAgIH0KIAogICAgIGRiTWFuYWdlci5zZXRRdW90YShvcmlnaW4sIG5ld1F1b3RhKTsKQEAg
LTcxMyw3ICs3MTMsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9u
CiAgICAgdWludDY0X3QgbmV3UXVvdGEgPSAwOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAogICAgICAgICBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKG9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCksIGN1cnJlbnRRdW90YSwgdG90YWxCeXRlc05lZWRlZCksCi0g
ICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3Jp
Z2luUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3Jt
UHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVh
Y2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2Ut
PnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZv
cm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CiAKICAgICBjYWNoZVN0b3JhZ2Uuc3RvcmVV
cGRhdGVkUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBuZXdRdW90YSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5MCw3ICs2OTAsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERlY2lkCiAKICAgICBSZWY8V2ViRnJhbWU+IHByb3RlY3QoKm1fZnJhbWUp
OwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKTsK
LSAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lk
ZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2lu
RGF0YTo6ZnJvbUZyYW1lKGNvcmVGcmFtZSksIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlN
RVR5cGUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYzo6UmVwbHkocmVjZWl2ZWRQ
b2xpY3lBY3Rpb24sIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCksIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nl
c3NXaWxsU3VzcGVuZCkpIHsKKyAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1lLT5mcmFtZUlE
KCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGNvcmVGcmFtZSksIHJlc3BvbnNlLCBy
ZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3lu
Yzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCks
IFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3Jt
UHJvY2Vzc1dpbGxTdXNwZW5kKSkgewogICAgICAgICBtX2ZyYW1lLT5kaWRSZWNlaXZlUG9saWN5
RGVjaXNpb24obGlzdGVuZXJJRCwgUG9saWN5SWdub3JlLCAwLCB7IH0pOwogICAgICAgICByZXR1
cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotCiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgpAQCAtNTUzNiw3ICs1NTM1LDcgQEAgdm9pZCBXZWJQYWdlOjpwb3N0U3luY2hy
b25vdXNNZXNzYWdlRm9yVAogICAgIFVzZXJEYXRhIHJldHVyblVzZXJEYXRhOwogCiAgICAgYXV0
byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIGlmICghc2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKG1lc3Nh
Z2VOYW1lLCBVc2VyRGF0YSh3ZWJQcm9jZXNzLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVz
c2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhhbmRsZVN5bmNocm9ub3VzTWVz
c2FnZTo6UmVwbHkocmV0dXJuVXNlckRhdGEpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjpt
YXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6VXNlRnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0
aW5nKSkKKyAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhhbmRsZVN5
bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEod2ViUHJvY2Vzcy50cmFuc2Zv
cm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5KHJldHVyblVzZXJEYXRhKSwgU2Vjb25k
czo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6VXNlRnVsbHlTeW5jaHJvbm91c01v
ZGVGb3JUZXN0aW5nKSkKICAgICAgICAgcmV0dXJuRGF0YSA9IG51bGxwdHI7CiAgICAgZWxzZQog
ICAgICAgICByZXR1cm5EYXRhID0gd2ViUHJvY2Vzcy50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3Rz
KHJldHVyblVzZXJEYXRhLm9iamVjdCgpKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODM4MykKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTExLTA0ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3Vs
ZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNh
c3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3RvcFByb2R1Y2luZyk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdG9wQ29uc3VtaW5nKToKKwogMjAxNi0xMS0w
NCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0g
UGFnZSB2aXNpYmlsaXR5IHRlc3RzIGFyZSB0aW1pbmcgb3V0LgpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ4LDkgKzQ4LDkgQEAgZW51bSBOb3RpZnlTdHlsZSB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotdm9pZCB3YWl0KENvbmRpdGlvbiYgY29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9s
b2NrPExvY2s+JiBsb2NrZXIsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSwgc3RkOjpjaHJvbm86
Om1pY3Jvc2Vjb25kcyB0aW1lb3V0KQordm9pZCB3YWl0KENvbmRpdGlvbiYgY29uZGl0aW9uLCBz
dGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSwg
U2Vjb25kcyB0aW1lb3V0KQogewotICAgIGlmICh0aW1lb3V0ID09IHN0ZDo6Y2hyb25vOjptaWNy
b3NlY29uZHM6Om1heCgpKQorICAgIGlmICh0aW1lb3V0ID09IFNlY29uZHM6OmluZmluaXR5KCkp
CiAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlciwgcHJlZGljYXRlKTsKICAgICBlbHNlIHsK
ICAgICAgICAgLy8gVGhpcyB0ZXN0cyB0aW1lb3V0cyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCB2ZXJp
ZmllcyB0aGF0IHdlIGNhbiBjYWxsIHdhaXQoKSBhZ2FpbiBhZnRlciBhCkBAIC04MCw4ICs4MCw4
IEBAIHZvaWQgcnVuVGVzdCgKICAgICB1bnNpZ25lZCBtYXhRdWV1ZVNpemUsCiAgICAgdW5zaWdu
ZWQgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwKICAgICBOb3RpZnlTdHlsZSBub3RpZnlTdHlsZSwK
LSAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlj
cm9zZWNvbmRzOjptYXgoKSwKLSAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGRlbGF5ID0g
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6emVybygpKQorICAgIFNlY29uZHMgdGltZW91dCA9
IFNlY29uZHM6OmluZmluaXR5KCksCisgICAgU2Vjb25kcyBkZWxheSA9IFNlY29uZHMoMCkpCiB7
CiAgICAgRGVxdWU8dW5zaWduZWQ+IHF1ZXVlOwogICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0
cnVlOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgcnVuVGVzdCgKICAgICAgICAgY29uc3VtZXJU
aHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAgICB9CiAKLSAgICBzdGQ6OnRoaXNf
dGhyZWFkOjpzbGVlcF9mb3IoZGVsYXkpOworICAgIGRlbGF5LnNsZWVwKCk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsKICAgICAgICAgVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKApAQCAtMTg2LDggKzE4Niw4IEBA
IFRFU1QoV1RGX0NvbmRpdGlvbiwgT25lUHJvZHVjZXJPbmVDb25zdW0KIHsKICAgICBydW5UZXN0
KAogICAgICAgICAxLCAxLCAxLCAxMDAwMDAsIFRhY3RpY2FsbHlOb3RpZnlBbGwsCi0gICAgICAg
IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMDApLAotICAgICAgICBzdGQ6OmNocm9ubzo6
bWljcm9zZWNvbmRzKDEwMDAwMDApKTsKKyAgICAgICAgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25k
cygxMCksCisgICAgICAgIFNlY29uZHMoMSkpOwogfQogCiBURVNUKFdURl9Db25kaXRpb24sIE9u
ZVByb2R1Y2VyT25lQ29uc3VtZXJIdW5kcmVkU2xvdHMpCkBAIC0yNDcsNyArMjQ3LDcgQEAgVEVT
VChXVEZfQ29uZGl0aW9uLCBUaW1lb3V0VGltZXNPdXQpCiAKICAgICBsb2NrLmxvY2soKTsKICAg
ICBib29sIHJlc3VsdCA9IGNvbmRpdGlvbi53YWl0Rm9yKAotICAgICAgICBsb2NrLCBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzKDEwMDAwKSwgW10gKCkgLT4gYm9vbCB7IHJldHVybiBmYWxzZTsg
fSk7CisgICAgICAgIGxvY2ssIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMTApLCBbXSAoKSAt
PiBib29sIHsgcmV0dXJuIGZhbHNlOyB9KTsKICAgICBsb2NrLnVubG9jaygpOwogCiAgICAgRVhQ
RUNUX0ZBTFNFKHJlc3VsdCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9T
eW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAkocmV2aXNpb24gMjA4MzU4
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgbV9sb3dlclF1ZXVlLmNsb3NlKCk7Ci0gICAgICAgIG1f
cHJvZHVjZUNsb3NlU2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
YXgoKSk7CisgICAgICAgIG1fcHJvZHVjZUNsb3NlU2VtYXBob3JlLndhaXQoV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogICAgICAgICBtX3Byb2R1Y2VRdWV1ZSA9IG51bGxwdHI7CiAgICAgfQogICAg
IApAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBtX3VwcGVyUXVldWUuY2xvc2UoKTsKLSAgICAgICAgbV9jb25zdW1lQ2xvc2VTZW1hcGhv
cmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICAgICAgbV9j
b25zdW1lQ2xvc2VTZW1hcGhvcmUud2FpdChXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAgICAg
IG1fY29uc3VtZVF1ZXVlID0gbnVsbHB0cjsKICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293908</attachid>
            <date>2016-11-04 12:09:06 -0700</date>
            <delta_ts>2016-11-04 12:27:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>144081</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvYmFibHkg
dGhlIG5pY2VzdCBleGFtcGxlIG9mIHdoeSB0aGlzIHBhdGNoIGlzIGEgZ29vZCBpZGVhIGlzIHRo
ZSBjaGFuZ2UgaW4KKyAgICAgICAgQXRvbWljc09iamVjdC5jcHAuCisKKyAgICAgICAgKiBqaXQv
SUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQXRvbWljc09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2Fp
dCk6CisKIDIwMTYtMTEtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCBy
ZWJhc2UuLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIElDU3RhdHM6OklDU3RhdHMoKQogICAgICAgICBb
dGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yU2Vj
b25kcyhtX2xvY2ssIDEsIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxkU3RvcDsg
fSk7CisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9sb2NrLCBTZWNvbmRzKDEpLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3No
b3VsZFN0b3A7IH0pOwogICAgICAgICAgICAgICAgIGlmIChtX3Nob3VsZFN0b3ApCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsOCArMzA0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgdGltZW91dEluTmFub3NlY29uZHMgPSB0
aW1lb3V0SW5NaWxsaXNlY29uZHMgKiAxMDAwICogMTAwMDsKLQorICAgIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKKyAg
ICAKICAgICAvLyBUaGlzIGNvdmVycyB0aGUgcHJvcG9zZWQgcnVsZToKICAgICAvLwogICAgIC8v
IDQuIElmIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkIG9yIGlzIHVuZGVmaW5lZCB0aGVuIGxldCB0
IGJlICtpbmYuIE90aGVyd2lzZToKQEAgLTMxNCwzMSArMzE0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAvLwogICAgIC8vIGV4ZWMtPmFyZ3VtZW50
KDMpIHJldHVybnMgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IHByb3ZpZGVkIGFuZCBUb051bWJlcih1
bmRlZmluZWQpIHJldHVybnMgTmFOLAogICAgIC8vIHNvIE5hTiBpcyB0aGUgb25seSBzcGVjaWFs
IGNhc2UuCi0gICAgaWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID09IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKQotICAgICAgICB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHN0ZDo6bWF4KDAuLCB0aW1lb3V0
SW5OYW5vc2Vjb25kcyk7CisgICAgaWYgKHRpbWVvdXQgPT0gdGltZW91dCkKKyAgICAgICAgdGlt
ZW91dCA9IHN0ZDo6bWF4KFNlY29uZHMoMCksIHRpbWVvdXQpOwogICAgIGVsc2UKLSAgICAgICAg
dGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Ci0gICAgCi0gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgaXMgYSBwaWxlIG9mIG5vbnNl
bnNlLCBidXQgaXQncyBhbGwgbmVlZGVkIGJlY2F1c2Ugb2YgY29ybmVyIGNhc2VzCi0gICAgLy8g
aW5zaWRlIHN0ZDo6Y2hyb25vLgotICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIHN0ZDo6Y2hyb25v
LgotICAgIAotICAgIFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQ7Ci0gICAg
aWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90
OjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpjaHJv
bm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXRJbk5hbm9zZWNvbmRz
KSk7Ci0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPCBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHM6Onplcm8oKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlVGltZW91dCA+IFBhcmtpbmdMb3Q6OkNsb2Nr
OjpkdXJhdGlvbjo6bWF4KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xv
Y2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OkNsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8UGFya2luZ0xvdDo6Q2xvY2s6OmR1cmF0aW9u
PihyZWxhdGl2ZVRpbWVvdXQpOwotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgICAgICB9Ci0gICAgfQorICAgICAg
ICB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKTsKICAgICAKICAgICBib29sIGRpZFBhc3NW
YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCByZXN1bHQ7CkBA
IC0zNTEsNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
YwogICAgICAgICAgICAgICAgIHJldHVybiBkaWRQYXNzVmFsaWRhdGlvbjsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAg
ICAgICAgIE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dCk7CiAgICAgfQogICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjM5IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6
Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBv
dmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0aW1lIG1lYXN1cmVtZW50
cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAgIHNvbWV0aW1lcyBpdCB3
YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBvZiB0aW1lLCBzb21ldGlt
ZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVwb2NoLiBXaGVuIHdlIHNw
b2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEgbW9ub3RvbmljIGNsb2Nr
IG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdheXMgJ2RvdWJsZScgLSBu
ZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZlbgorICAgICAgICB0aG91
Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50ZXJ2YWwsIG1zIGludGVy
dmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMgc2luY2UgZXBvY2ggb24g
d2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2UgZXBvY2ggbW9ub3Rvbmlj
KS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRob3VnaHQgdGhhdCBpdCB3
b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJsZXMgd2l0aAorICAgICAg
ICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRoaW5ncyB3aXRoIHN0ZDo6
Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAgICBpbmNvbnZlbmllbnQ6
CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5ldmVyIHdhbnQgdG8gc2F5
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIgd2FudCB0byBzYXkKKyAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9pbnQuIFRoZSBzeW50YXgg
Zm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAgICAgICAgICBkdXJhdGlv
bl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
IG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50ZWdlcnMgYnkgZGVmYXVs
dCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNsdW1zeS4gQnV0IHRoZSBp
bnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIHJvdWdoIGVkZ2VzIG9m
IGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3ZWVuIHN0ZDo6Y2hyb25v
IHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNrcyBvdmVyZmxvdworICAg
ICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVudGx5LiBXZSBoYXZlIGV2
ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBo
YWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMgdXAgYmVpbmcgYSBzcGVj
aWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2VzLCB0aGUgb3ZlcmZsb3cg
YWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAgSXQncyBhbiBlcnJvciB0
byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQgaGF2ZSBiZWVuIGV4Y3Vz
YWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0aCB3YXMgbm90IGd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB0aGF0IHdvdWxkCisg
ICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMgYSBjb250aW51b3VzLCBp
bmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAgICAgICAgZm9yIGZsb2F0
aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBwcmVzZXJ2ZXMg
cHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQgZXh0cmVtZSBjYXNlcywg
c28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGltZSBtZWFucyB0aGF0IHVu
aXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAgICAgICAgbG9zc2xlc3Mu
IFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZlcnkgaGFyZCBhYm91dCB3
aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNoLCB3ZSB1c2Ugc2Vjb25k
cyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJvdW5kYXJpZXMsIGxpa2Ug
YW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21ldGhpbmcgb3RoZXIgdGhh
biBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBtYWtlcyBpdCBl
YXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgdGlt
ZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1wbGU6IHdoZW4gd291bGQg
eW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlzIGlzIHRoZQorICAgICAg
ICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBwb3J0IGJvdGggYSB0aW1l
b3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZhcmlhbnQuCisKKyAgICAg
ICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0aGluZ3Mgd2hlbiBtYXRo
IGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAgICAgcHJldHR5IHdlbGwg
b3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdvdWxkIGRvIHdoZW4gY29t
cHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgdXNpbmcgc2Np
ZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBzaWduaWZpY2FudAorICAg
ICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1bmRlciBmbG9hdGluZyBw
b2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAgICAgICBvdGhlciBoYW5k
LCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdlIGJlY2F1c2UgeW91IGhh
dmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxlIHBvc3NpYmxlIFVCIGNv
cm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJbnRlZ2VycyB0aGF0Cisg
ICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGxhcmdlIGFuZCB5
b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAgICAgICAgdGhlbS4gQXQg
dGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBhbSBub3QgY2VydGFpbiB0
aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhlIGNvcm5lciBjYXNlcwor
ICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1la2VlcGluZyBjbGFzc2Vz
IHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAgICBhbGwgaW50ZXJuYWxs
eSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2VicmFpYyB0eXBpbmcuIFRo
ZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25kczogdGhpcyBpcyBmb3Ig
bWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6IHRpbWUgc2luY2UgZXBv
Y2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuCisgICAg
ICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2NvcmRpbmcgdG8gYSBtb25v
dG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRoYXQgc2F5cyBlaXRoZXIg
V2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOiBh
IHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXByZXNlbnRzIGVpdGhlciBh
CisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUuCisgICAgICAgIAorICAg
ICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysgdmFsdWVzIGFuZCBhcmUg
Y2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAgICAgdmVyeSBuZWFybHkg
UE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lvbnMgYmV0d2VlbiB0aGUg
dmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMgaXMgYnkgd2F5IG9mIGFs
Z2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2UgcmVjb2duaXplOgorICAg
ICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29uZHMKKyAgICAgICAgU2Vj
b25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3RvbmljVGltZSA9IE1vbm90
b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAgICAKKyAgICAgICAgV2Ug
c3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMgYmVjYXVzZSBtYXRoLgor
ICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBiZXR3ZWVuIE1vbm90b25p
Y1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgd3Qg
PSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0
byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNsb2NrcyBhbmQgY29udmVy
dCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFueSBvZiBvdXIgQVBJcyB3
b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGltZSB0aGUgdXNlciB3YW50
ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2ggaW5jbHVkZXMgQ29uZGl0
aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS4gWW91
CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRpbWUgb3IgTW9ub3Rvbmlj
VGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhh
dCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246OndhaXRVbnRpbCwgdGhlbiBD
b25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hlbiBpdCBzaG91bGQgd2Fr
ZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgV2FsbFRpbWUgLSBi
dXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4gd2FpdFVudGlsIHdpbGwg
bWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAgICBNb25vdG9uaWNUaW1l
LiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0aGFuIGNocm9ubyBhbGxv
d2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIGEg
ZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5v
dCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8gYW5kIHRoZXNlIG5ldyB0
aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmllbmNlIHNob3dzIHRoYXQg
d2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgICBz
dGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywgSSBkaWRuJ3QgbmVlZCBz
dWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAgcGF0Y2ggb25seSBjb252
ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2luZ0xvdCBhbmQgQ29uZGl0
aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRoYXQgY29kZSBvbnRvIHRo
ZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWwp
OgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToKKyAgICAgICAgKFdURjo6
Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRV
bnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUXVl
dWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1l
LmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0Zi9NZXNzYWdlUXVldWUu
aDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1v
bm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmFwcHJveGlt
YXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNU
aW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpNb25vdG9uaWNUaW1l
KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSk6CisgICAgICAg
IChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAgKFdURjo6TW9ub3Rvbmlj
VGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjph
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoKKyAgICAgICAg
KFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAgICAgICAoV1RGOjpQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1NlY29uZHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6CisgICAgICAgIChXVEY6
OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pY3Jvc2Vj
b25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRzKToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OmZy
b21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMp
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAgICAgIChXVEY6OlNlY29u
ZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcispOgor
ICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci8pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3Bl
cmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yKj0pOgorICAgICAgICAo
V1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcj4p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
dyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVD
bG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6d2FsbFRpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25pY1RpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGlt
YXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91YmxlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VFcG9jaCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogd3RmL1dhbGxU
aW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpub3cpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2xlZXApOgorICAgICAg
ICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OldhbGxU
aW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3VibGUpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2Vjb25k
c1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVXYWxsVGlt
ZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdU
Rjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3YWl0KToKKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0xMS0wMyAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRml4ZXMgdG8gYnVpbGQg
SlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNiBAQAogCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOEIx
REM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87IH07CisJCTBGNjZCMjhE
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07CisJCTBGNjZCMjhGMURD
OTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICov
OyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICov
OyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi87IH07
CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICovOyB9OwogCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNl
dC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZC
NTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJMEY0M0Q4RjAxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9ja1R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ub3Rv
bmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgzMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NzFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FsbFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FsbFRpbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4ODVDRjIwMDQ0RjVFMiAv
KiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJv
b2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNw
cCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJ
CQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAogCQkJCTBG
OEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCkBAIC05
NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0
b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5o
ICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAgLTEwMDcsNiArMTAzMSw4
IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVD
ODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCisJCQkJMEY2NkIyODQx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBGNjZCMjg1MURDOTdCQUIw
MDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJMEY2NkIyODYxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovLAogCQkJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLywKIAkJCQkwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZC
QkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2ICsxMDgyLDggQEAKIAkJ
CQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0Yg
LyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxs
VGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8s
CiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLApAQCAtMTI1OSw3ICsx
Mjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVC
MDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4
QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNDAsNiAr
MTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlCIC8qIExpc3REdW1wLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAKIAkJCQkxNEYzQjBGNzE1
RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiArMTUwMCw3IEBACiAJCQkJ
RTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJQThBNDczQUExNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDUxMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09i
akNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAwNDEy
M0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2MDE1MUE4
MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY0
MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIy
OTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBACiAJCQkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOEYxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFy
dChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChs
b2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09
IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2h1dCB0aGUg
dGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Ns
b2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2NrLCBTZWNvbmRzKDEpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3RpZnkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2luZyB0byBzbGVlcCFcbiIp
OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAtNjQsNiArNjUsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5vbmNv
cHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xMDEs
NiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBTZWNvbmRzLmgKICAgICBT
ZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCkBA
IC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBVbmlxdWVSZWYuaAogICAg
IFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVmVjdG9y
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaAorICAgIFdhbGxUaW1l
LmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29ya1F1ZXVlLmgKQEAgLTE3
Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNzLmNwcAogICAgIEF1dG9t
YXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCiAgICAgTWV0YUFsbG9j
YXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJlck9mQ29yZXMuY3BwCiAg
ICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApAQCAtMjA3LDEyICsyMTQs
MTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAogICAg
IFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNwcAogICAgIFNpeENoYXJh
Y3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKICAg
ICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV2FsbFRpbWUu
Y3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xv
Y2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENs
b2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rvbmlj
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVh
bTsKKworZW51bSBjbGFzcyBDbG9ja1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9
OworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
Q2xvY2tUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBl
OworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93
dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdU
Rl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUgPGNocm9u
bz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+
CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlzIGlzIGEg
c3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2Fu
IGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJp
YWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5nTG90OjpD
bG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQgb2YgdGlt
ZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxzCisgICAg
Ly8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRvIHVzZSB3
aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5saWtlbHkg
dG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJldHRlciB0
byB1c2UgTW9ub3RvbmljVGltZS4KKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUgVGltZTsK
ICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhl
IGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8g
cGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdv
a2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVjdCBDb25k
aXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sgZm9yIHBh
c3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBPcGVuR3Jv
dXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9jaywgQ2xv
Y2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9j
aywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsKICAgICAg
ICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygpKSB7Cisg
ICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsKICAgICAg
ICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAg
IC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJldHVybnMg
dHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0dXJuIGVh
cmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBl
bmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBDbG9jazo6
dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgYm9vbCB3
YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7CiAgICAg
ICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVudGlsKGxv
Y2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ug
ewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4g
UmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8vIE1heSBy
ZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5
cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdhaXRGb3Io
Ci0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0aXZlVGlt
ZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYgbG9jaywg
U2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRpdmUocmVs
YXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2Nr
LCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9vbCB3YWl0
Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyByZWxhdGl2
ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgogICAg
IHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRpbChsb2Nr
LCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9jaywgVGlt
ZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUs
IHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25kaXRpb25C
YXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsKExv
Y2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChsb2NrKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3YWl0
Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWxXYWxs
Q2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25k
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1
dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNv
bmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0
U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgYm9v
bCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGltZW91dFNl
Y29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBy
ZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMgKiAoMTAw
MC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJlbGF0aXZl
VGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBp
bnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7
Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+IHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3QgYmUgZXhw
cmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAgIC8vIG1p
Z2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBwcmVkaWNh
dGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykp
OwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwgcHJlZGlj
YXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0cmVtZWx5
IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cnkg
dG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMgdHJ1ZSBp
ZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9uZSgpCkBA
IC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAgICAgCiBw
cm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0
Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNv
bmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID0g
cmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjApOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAwKSkgewot
ICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwgYXMgTmFO
LgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9jaygpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbGF0
aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0aW1lb3V0
IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQgaW50ZWdl
ciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2ZXIuCi0g
ICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAg
IHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRp
bWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCBy
ZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2Nr
VHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwoTG9ja1R5
cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShyZWxhdGl2
ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlvblR5cGU+
Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3QgRHVyYXRp
b25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRpdmVUaW1l
b3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xvY2s6OnRp
bWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBDbG9jazo6
ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1bmxpa2Vs
eS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1bWIuIFNs
ZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5zaWJsZSB3
aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBiZQotICAg
ICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAgICAgIHJl
dHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGltZW91dCk7
Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAg
IH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAKIGNsYXNz
IENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8RGF0YVR5
cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGltZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0aW9uLndh
aXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAgICAgICBt
X2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVldWUudGFr
ZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KQEAgLTM0MCw3ICsz
NDAsNyBAQCB2b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2NrOwogICAg
IENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tlcihmYWtl
TG9jayk7Ci0gICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMo
ZmFrZUxvY2ssIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOworICAgIGZh
a2VDb25kaXRpb24ud2FpdEZvcihmYWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAyMDgzNTgp
CisrKyBTb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxsZWQoKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdl
UXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpOworICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRo
VGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIFdhbGxUaW1lIGFi
c29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgogICAg
ICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYmKTsKQEAgLTc2LDggKzc3LDYgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgaXNFbXB0eSgpIGlzIG9ubHkgdmFs
aWQgaWYgbm8gb3RoZXIgdGhyZWFkIGlzIG1hbmlwdWxhdGluZyB0aGUgcXVldWUgYXQgdGhlIHNh
bWUgdGltZS4KICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICAgICAgc3RhdGljIGRvdWJs
ZSBpbmZpbml0ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKICAg
ICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwpAQCAtMTMwLDE0ICsxMjksMTQgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2FpdEZv
ck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAgICAgICBN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb247IAotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChl
eGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIGluZmluaXRl
VGltZSgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiByZXN1bHQgPSB3YWl0
Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10oY29uc3QgRGF0YVR5
cGUmKSB7IHJldHVybiB0cnVlOyB9LCBXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAgICAgIEFT
U0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJlYXNvbiA9
PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+
Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2FpdFJlc3Vs
dCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVl
V2FpdFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFdhbGxUaW1lIGFic29s
dXRlVGltZSkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFsc2U7CkBA
IC0xNTEsMTAgKzE1MCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlmIChmb3Vu
ZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRzKG1fbXV0
ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53
YWl0VW50aWwobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIEFT
U0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsKKyAgICAg
ICAgQVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gV2FsbFRpbWU6OmluZmluaXR5
KCkpOwogCiAgICAgICAgIGlmIChtX2tpbGxlZCkgewogICAgICAgICAgICAgcmVzdWx0ID0gTWVz
c2FnZVF1ZXVlVGVybWluYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vbm90b25pY1RpbWUu
aCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIK
KyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJXYWxsVGlt
ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworTW9ub3RvbmljVGltZSBNb25vdG9uaWNUaW1lOjpu
b3coKQoreworICAgIE1vbm90b25pY1RpbWUgcmVzdWx0OworICAgIHJlc3VsdC5tX3ZhbHVlID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
V2FsbFRpbWUgTW9ub3RvbmljVGltZTo6YXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBXYWxsVGltZTo6bm93KCk7Cit9CisKK3ZvaWQgTW9u
b3RvbmljVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiTW9ub3RvbmljKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIE1vbm90b25pY1Rp
bWU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoKnRoaXMp
LnNsZWVwKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL01vbm90b25pY1RpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9u
aWNUaW1lLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Ns
b2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBUaGUgY3VycmVudCB0
aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3RvbmljIGNsb2NrcyBkb24n
dCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3NzaWJseSBkb24ndCBjb3VudCBkb3dudGltZS4gVGhp
cyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBh
Ym91dAorLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0
J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywKKy8vIG5lZ2F0aXZl
IHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWxsIHJlbGF0
aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8gU3BlY2lmaWNhbGx5LCBNb25vdG9uaWNUaW1lIHNo
b3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUgdGhhdAorLy8gTW9u
b3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIGlzIHRoZSBzYW1l
IGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgorY2xhc3MgTW9ub3Rv
bmljVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBjbG9ja1R5cGUg
PSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4g
U28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIE1vbm90
b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNUaW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0
aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUg
YWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4g
SXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNhbWUgdGltZQor
ICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBmcm9tUmF3RG91YmxlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1vbm90b25pY1RpbWUgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE1vbm90b25pY1RpbWUgbm93KCk7
CisgICAgCisgICAgc3RhdGljIE1vbm90b25pY1RpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9t
UmF3RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7IH0KKwor
ICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBTZWNvbmRzKG1f
dmFsdWUpOyB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1Rp
bWUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxs
VGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Q7CisgICAgCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIAorICAgIE1vbm90
b25pY1RpbWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAg
IAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJl
IG5lZ2F0ZWQgYXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5z
Zm9ybWF0aW9ucy4gU28sIHdlIGFsbG93IGl0LgorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3It
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3RG91YmxlKC1tX3ZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAg
ICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNl
Y29uZHMgb3BlcmF0b3ItKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gU2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1ZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciE9KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPChNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPihNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmFsdWUgPiBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPD0o
TW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
IDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+PShNb25v
dG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPj0g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHNsZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNb25vdG9uaWNUaW1lOwor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVi
bGljOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOwogICAgIAotICAg
IHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFy
a2luZ0NvbmRpdGlvbjsKKyAgICBNdXRleCBwYXJraW5nTG9jazsKKyAgICBUaHJlYWRDb25kaXRp
b24gcGFya2luZ0NvbmRpdGlvbjsKIAogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MgeyBudWxscHRy
IH07CiAgICAgCkBAIC01NjQsNyArNTY0LDcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBh
cmtSZXN1bHQgUGFyawogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgY29uc3QgU2NvcGVk
TGFtYmRhPGJvb2woKT4mIHZhbGlkYXRpb24sCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
KT4mIGJlZm9yZVNsZWVwLAotICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgY29u
c3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5c
biIpKTsKQEAgLTU5MiwyMCArNTkyLDE3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJr
UmVzdWx0IFBhcmsKICAgICAKICAgICBib29sIGRpZEdldERlcXVldWVkOwogICAgIHsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsK
LSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzICYmIENsb2NrOjpub3coKSA8IHRpbWVvdXQpIHsK
LSAgICAgICAgICAgIC8vIEZhbGxpbmcgYmFjayB0byB3YWl0KCkgd29ya3MgYXJvdW5kIGEgYnVn
IGluIGxpYnN0ZGMrKyBpbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZS4g
U2VlOgotICAgICAgICAgICAgLy8gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ4MDI3Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemls
bGEvc2hvd19idWcuY2dpP2lkPTU4OTMxCi0gICAgICAgICAgICBpZiAodGltZW91dCA9PSBDbG9j
azo6dGltZV9wb2ludDo6bWF4KCkpCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRp
b24ud2FpdChsb2NrZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lLT5w
YXJraW5nQ29uZGl0aW9uLndhaXRfdW50aWwobG9ja2VyLCB0aW1lb3V0KTsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIHdoaWxlIChtZS0+YWRk
cmVzcyAmJiB0aW1lb3V0Lm5vd1dpdGhTYW1lQ2xvY2soKSA8IHRpbWVvdXQpIHsKKyAgICAgICAg
ICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgICAgICBtZS0+
cGFya2luZ0xvY2ssIHRpbWVvdXQuYXBwcm94aW1hdGVXYWxsVGltZSgpLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2Yg
dGhlIGFib3ZlLCB3ZSBkbyB0aGlzIHRoaW5nLCB3aGljaCBpcyBoaWxhcmlvdXNseSBhd2Z1bCwg
YnV0IGVuc3VyZXMgdGhhdCB0aGUgd29yc3QgY2FzZSBpcwotICAgICAgICAgICAgLy8gYSBDUFUt
ZWF0aW5nIHNwaW4gYnV0IG5vdCBhIGRlYWRsb2NrLgotICAgICAgICAgICAgbG9ja2VyLnVubG9j
aygpOwotICAgICAgICAgICAgbG9ja2VyLmxvY2soKTsKKyAgICAgICAgICAgIC8vIEl0J3MgcG9z
c2libGUgZm9yIHRoZSBPUyB0byBkZWNpZGUgbm90IHRvIHdhaXQuIElmIGl0IGRvZXMgdGhhdCB0
aGVuIGl0IHdpbGwgYWxzbworICAgICAgICAgICAgLy8gZGVjaWRlIG5vdCB0byByZWxlYXNlIHRo
ZSBsb2NrLiBJZiB0aGVyZSdzIGEgYnVnIGluIHRoZSB0aW1lIG1hdGgsIHRoZW4gdGhpcyBjb3Vs
ZAorICAgICAgICAgICAgLy8gcmVzdWx0IGluIGEgZGVhZGxvY2suIEZsYXNoaW5nIHRoZSBsb2Nr
IG1lYW5zIHRoYXQgYXQgd29yc3QgaXQncyBqdXN0IGEgQ1BVLWVhdGluZworICAgICAgICAgICAg
Ly8gc3Bpbi4KKyAgICAgICAgICAgIG1lLT5wYXJraW5nTG9jay51bmxvY2soKTsKKyAgICAgICAg
ICAgIG1lLT5wYXJraW5nTG9jay5sb2NrKCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKCFt
ZS0+YWRkcmVzcyB8fCBtZS0+YWRkcmVzcyA9PSBhZGRyZXNzKTsKICAgICAgICAgZGlkR2V0RGVx
dWV1ZWQgPSAhbWUtPmFkZHJlc3M7CkBAIC02NDAsMTQgKzYzNywxNCBAQCBORVZFUl9JTkxJTkUg
UGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBt
YXR0ZXIgd2hhdCwgbWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgogICAgIHsK
LSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdM
b2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CiAgICAg
ICAgIGlmICghZGlkRGVxdWV1ZSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBkZXF1
ZXVlIG91cnNlbHZlcywgdGhlbiBzb21lb25lIGVsc2UgZGlkLiBUaGV5IHdpbGwgc2V0IG91ciBh
ZGRyZXNzIHRvCiAgICAgICAgICAgICAvLyBudWxsLiBXZSBkb24ndCB3YW50IHRvIHByb2NlZWQg
dW50aWwgdGhleSBkbyB0aGlzLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhleSBtYXkgc2V0CiAgICAg
ICAgICAgICAvLyBvdXIgYWRkcmVzcyB0byBudWxsIGluIHNvbWUgZGlzdGFudCBmdXR1cmUgd2hl
biB3ZSdyZSBhbHJlYWR5IHRyeWluZyB0byB3YWl0IGZvcgogICAgICAgICAgICAgLy8gb3RoZXIg
dGhpbmdzLgogICAgICAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzKQotICAgICAgICAgICAgICAg
IG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgICAgICBtZS0+
cGFya2luZ0NvbmRpdGlvbi53YWl0KG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIH0KICAgICAg
ICAgbWUtPmFkZHJlc3MgPSBudWxscHRyOwogICAgIH0KQEAgLTY5NSwxMSArNjkyLDExIEBAIE5F
VkVSX0lOTElORSBQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGEKICAgICBBU1NFUlQodGhyZWFk
RGF0YS0+YWRkcmVzcyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0
ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgIHRocmVhZERh
dGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgICAgICB0aHJlYWREYXRhLT50b2tlbiA9IDA7CiAg
ICAgfQotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAg
IHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtNzQxLDExICs3MzgsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xv
dDo6dW5wYXJrT25lSQogICAgIEFTU0VSVCh0aHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICAKICAg
ICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERh
dGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEt
PnBhcmtpbmdMb2NrKTsKICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAg
ICAgfQogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWREYXRhIG1heSBkaWUuIEdvb2Qg
dGhpbmcgd2UgaGF2ZSBhIFJlZlB0cjw+IG9uIGl0LgotICAgIHRocmVhZERhdGEtPnBhcmtpbmdD
b25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24u
c2lnbmFsKCk7CiB9CiAKIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtD
b3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTc3OSwxMCArNzc2
LDEwIEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmsKICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3
UG9pbnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0
aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+
YWRkcmVzcyk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgICAgICB0aHJl
YWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICB0aHJlYWREYXRh
LT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFy
a2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9QYXJraW5nTG90LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9Q
YXJraW5nTG90X2gKICNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAogCi0jaW5jbHVkZSA8Y2hyb25v
PgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7
CiAKQEAgLTM5LDcgKzM5LDE1IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFBhcmtpbmdMb3Qo
Y29uc3QgUGFya2luZ0xvdCYpID0gZGVsZXRlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrIENsb2NrOworICAgIC8vIFBhcmtpbmdMb3Qgd2lsbCBhY2Nl
cHQgYW55IGtpbmQgb2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0
eXBlZGVmIHRlbGxzCisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIFBhcmtpbmdMb3Qgd291
bGQgYmUgYWJsZSB0byB1c2Ugd2l0aG91dCBjb252ZXJzaW9ucy4gSXQncyBzYWQgdGhhdAorICAg
IC8vIHRoaXMgaXMgV2FsbFRpbWUgbm90IE1vbm90b25pY1RpbWUsIGJ1dCB0aGF0J3MganVzdCBo
b3cgT1Mgd2FpdCBmdW5jdGlvbnMgd29yay4gSG93ZXZlciwKKyAgICAvLyBiZWNhdXNlIFBhcmtp
bmdMb3QgZXZhbHVhdGVzIHdoZXRoZXIgaXQgc2hvdWxkIHdhaXQgYnkgY2hlY2tpbmcgaWYgeW91
ciB0aW1lIGhhcyBwYXNzZWQKKyAgICAvLyB1c2luZyB3aGF0ZXZlciBjbG9jayB5b3UgdXNlZCwg
c3BlY2lmeWluZyB0aW1lb3V0cyBpbiBNb25vdG9uaWNUaW1lIGlzIHNlbWFudGljYWxseSBiZXR0
ZXIuCisgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHNldHMgaGlzIGNvbXB1dGVyJ3Mg
Y2xvY2sgYmFjayBkdXJpbmcgdGhlIHRpbWUgdGhhdCB5b3Ugd2FudGVkIHRvCisgICAgLy8gd2Fp
dCBmb3Igb25lIHNlY29uZCwgYW5kIHlvdSBzcGVjaWZpZWQgdGhlIHRpbWVvdXQgdXNpbmcgdGhl
IE1vbm90b25pY1RpbWUsIHRoZW4gUGFya2luZ0xvdAorICAgIC8vIHdpbGwgYmUgc21hcnQgZW5v
dWdoIHRvIGtub3cgdGhhdCB5b3VyIG9uZSBzZWNvbmQgaGFzIGVsYXBzZWQuCisgICAgdHlwZWRl
ZiBXYWxsVGltZSBUaW1lOwogICAgIAogICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1
ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxs
LiBUaGUKICAgICAvLyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3
ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAg
Y29uc3QgVmFsaWRhdGlvbkZ1bmN0b3ImIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IEJlZm9y
ZVNsZWVwRnVuY3RvciYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRp
bWVvdXQpCisgICAgICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgICAgICAg
ICBhZGRyZXNzLApAQCAtODksNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlID09IGV4cGVjdGVkOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFtdICgp
IHsgfSwKLSAgICAgICAgICAgIENsb2NrOjp0aW1lX3BvaW50OjptYXgoKSk7CisgICAgICAgICAg
ICBUaW1lOjppbmZpbml0eSgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdp
dmVuIHRvIHlvdSBhbnl0aW1lIHlvdSB1bnBhcmtPbmUoKS4KQEAgLTE1OCw3ICsxNjYsNyBAQCBw
cml2YXRlOgogICAgICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAgICBjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbCgpPiYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRh
PHZvaWQoKT4mIGJlZm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0
KTsKKyAgICAgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAg
ICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVu
cGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNvbmRzLmgiCisKKyNpbmNsdWRlICJDdXJy
ZW50VGltZS5oIgorI2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0
cmVhbS5oIgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUg
IldhbGxUaW1lLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXYWxsVGltZSBTZWNvbmRzOjpvcGVy
YXRvcisoV2FsbFRpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7
Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3IrKE1vbm90b25pY1RpbWUgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSBTZWNvbmRzOjpvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKwor
V2FsbFRpbWUgU2Vjb25kczo6b3BlcmF0b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKTsKK30KKworTW9ub3RvbmljVGltZSBTZWNvbmRzOjpvcGVyYXRv
ci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gTW9ub3RvbmljVGlt
ZTo6ZnJvbVJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKTsKK30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFNlY29uZHM6Om9wZXJhdG9yLShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBvdGhlci53aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQorCit2b2lkIFNlY29uZHM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSwgIiBzZWMiKTsKK30KKwor
dm9pZCBTZWNvbmRzOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTW9ub3RvbmljVGltZTsKK2NsYXNz
IFByaW50U3RyZWFtOworY2xhc3MgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOworY2xhc3MgV2Fs
bFRpbWU7CisKK2NsYXNzIFNlY29uZHMgeworcHVibGljOgorICAgIFNlY29uZHMoKSB7IH0KKyAg
ICAKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgU2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgICAg
IDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBkb3VibGUgc2Vjb25kcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBkb3VibGUgbWlsbGlzZWNvbmRzKCkgY29uc3Qg
eyByZXR1cm4gc2Vjb25kcygpICogMTAwMDsgfQorICAgIGRvdWJsZSBtaWNyb3NlY29uZHMoKSBj
b25zdCB7IHJldHVybiBtaWxsaXNlY29uZHMoKSAqIDEwMDA7IH0KKyAgICBkb3VibGUgbmFub3Nl
Y29uZHMoKSBjb25zdCB7IHJldHVybiBtaWNyb3NlY29uZHMoKSAqIDEwMDA7IH0KKyAgICAKKyAg
ICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZnJvbU1pbGxpc2Vjb25kcyhkb3VibGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSAvIDEwMDApOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZnJvbU1pY3Jvc2Vjb25kcyhkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gZnJvbU1pbGxpc2Vjb25kcyh2YWx1ZSAvIDEw
MDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZnJvbU5hbm9z
ZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tTWljcm9zZWNv
bmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vj
b25kcyBpbmZpbml0eSgpCisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyhzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAg
U2Vjb25kcyBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBTZWNvbmRzKHZhbHVlKCkgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAg
U2Vjb25kcyBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBTZWNvbmRzKHZhbHVlKCkgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAg
U2Vjb25kcyBvcGVyYXRvci0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMo
LXZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCBtYWtlcyBzZW5zZSB0byBjb25zaWRl
ciBzY2FsaW5nIGEgZHVyYXRpb24sIGxpa2UsICJJIHdhbnQgdG8gd2FpdCA1IHRpbWVzIGFzIGxv
bmcgYXMKKyAgICAvLyBsYXN0IHRpbWUhIi4KKyAgICBTZWNvbmRzIG9wZXJhdG9yKihkb3VibGUg
c2NhbGFyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAqIHNj
YWxhcik7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3IvKGRvdWJsZSBzY2FsYXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpIC8gc2NhbGFyKTsK
KyAgICB9CisgICAgCisgICAgLy8gSXQncyByZWFzb25hYmxlIHRvIHRoaW5rIGFib3V0IHJhdGlv
cyBiZXR3ZWVuIFNlY29uZHMuCisgICAgZG91YmxlIG9wZXJhdG9yLyhTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlKCkgLyBvdGhlci52YWx1ZSgpOworICAg
IH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBT
ZWNvbmRzJiBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRv
cio9KGRvdWJsZSBzY2FsYXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAq
IHNjYWxhcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyYgb3BlcmF0b3IvPShkb3VibGUgc2Nh
bGFyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLyBzY2FsYXI7CisgICAg
fQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBvcGVyYXRvcisoV2FsbFRp
bWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9y
KyhNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKyhjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUm
KSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgb3BlcmF0b3It
KFdhbGxUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBv
cGVyYXRvci0oTW9ub3RvbmljVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KFNlY29uZHMgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I8KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I+KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShT
ZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KFNlY29uZHMgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVl
OworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07Cit9OworCit9
IC8vIG5hbWVzcGFlIFdURgorCit1c2luZyBXVEY6OlNlY29uZHM7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmgiCisKKyNpbmNsdWRlICJDb25kaXRpb24uaCIKKyNpbmNsdWRlICJMb2NrLmgiCisj
aW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5vdyhDbG9ja1R5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2FsbDoKKyAg
ICAgICAgcmV0dXJuIFdhbGxUaW1lOjpub3coKTsKKyAgICBjYXNlIENsb2NrVHlwZTo6TW9ub3Rv
bmljOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSgpOworfQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlOjpub3dXaXRoU2FtZUNsb2NrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbm93KGNs
b2NrVHlwZSgpKTsKK30KKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3YWxs
VGltZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlwZTo6
V2FsbCk7CisgICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3RG91YmxlKG1fdmFsdWUpOworfQor
CitNb25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bW9ub3RvbmljVGltZSgp
IGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlwZTo6TW9ub3Rv
bmljKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZShtX3ZhbHVlKTsK
K30KKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjphcHByb3hpbWF0ZVdhbGxU
aW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUoKTsKKyAgICBjYXNlIENsb2NrVHlwZTo6
TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgpLmFwcHJveGltYXRlV2Fs
bFRpbWUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gV2FsbFRpbWUoKTsKK30KKworTW9ub3RvbmljVGltZSBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoICht
X3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2FsbDoKKyAgICAgICAgcmV0dXJuIHdhbGxU
aW1lKCkuYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCk7CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1v
bm90b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKTsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZSgpOwor
fQorCitTZWNvbmRzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItKGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAt
IG90aGVyLm1fdmFsdWUpOworfQorCitib29sIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3Bl
cmF0b3I8KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1f
dmFsdWUgPCBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0
dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZTo6b3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVy
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOwor
ICAgIHJldHVybiBtX3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7Cit9CisKK2Jvb2wgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcj49KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1f
dHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIubV92YWx1ZTsKK30KKwordm9pZCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV90eXBlLCAiKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lk
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXAoKSBjb25zdAoreworICAgIExvY2sgZmFr
ZUxvY2s7CisgICAgQ29uZGl0aW9uIGZha2VDb25kaXRpb247CisgICAgTG9ja0hvbGRlciBmYWtl
TG9ja2VyKGZha2VMb2NrKTsKKyAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbChmYWtlTG9jaywg
KnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYv
TW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK2NsYXNzIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSB7CitwdWJsaWM6CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCkgeyB9CisgICAg
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKFdhbGxUaW1lIHRpbWUpCisgICAgICAgIDog
bV92YWx1ZSh0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5
cGUoQ2xvY2tUeXBlOjpXYWxsKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlKE1vbm90b25pY1RpbWUgdGltZSkKKyAgICAgICAgOiBtX3ZhbHVlKHRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKQorICAgICAgICAsIG1fdHlwZShDbG9ja1R5cGU6
Ok1vbm90b25pYykKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUgZnJvbVJhd0RvdWJsZShkb3VibGUgdmFsdWUsIENsb2NrVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IHR5cGU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgc2Vjb25kc1Np
bmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBTZWNvbmRzKG1fdmFsdWUpOyB9CisgICAgQ2xvY2tU
eXBlIGNsb2NrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG5vdyhDbG9ja1R5
cGUpOworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUgbm93V2l0aFNhbWVDbG9jaygpIGNvbnN0OworICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSB3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKGRvdWJsZSB2YWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmZyb21SYXdEb3Vi
bGUodmFsdWUsIGNsb2NrVHlwZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0cyB0aGF0
IHRoZSB0aW1lIGlzIG9mIHRoZSB0eXBlIHlvdSB3YW50LgorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBXYWxsVGltZSB3YWxsVGltZSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25v
dG9uaWNUaW1lIG1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0OworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0
OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
dmFsdWU7IH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKFNl
Y29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2l0aFNhbWVDbG9ja0Fu
ZFJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKG1fdmFsdWUgLSBv
dGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNjYWxhciBhbmQg
c2NhbGFycyBjYW4gYmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20gYWxnZWJyYWlj
CisgICAgLy8gdHJhbnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
d2l0aFNhbWVDbG9ja0FuZFJhd0RvdWJsZSgtbV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFNlY29uZHMgb3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZQorICAgICAgICAgICAgJiYgbV90eXBlID09IG90aGVy
Lm1fdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIC8vIFRvIGRvIHJlbGF0aXZlIGNvbXBh
cmlzb25zLCB5b3UgbXVzdCBiZSB1c2luZyB0aW1lcyB3aXRoIHRoZSBzYW1lIGNsb2NrIHR5cGUu
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJh
dG9yPihjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPj0oY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNsZWVwKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1f
dmFsdWUgeyAwIH07CisgICAgQ2xvY2tUeXBlIG1fdHlwZSB7IENsb2NrVHlwZTo6V2FsbCB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlOwpJbmRleDogU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9XYWxsVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisj
aW5jbHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5j
bHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitX
YWxsVGltZSBXYWxsVGltZTo6bm93KCkKK3sKKyAgICBXYWxsVGltZSByZXN1bHQ7CisgICAgcmVz
dWx0Lm1fdmFsdWUgPSBjdXJyZW50VGltZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK01v
bm90b25pY1RpbWUgV2FsbFRpbWU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKwor
dm9pZCBXYWxsVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiV2FsbCgiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBXYWxsVGltZTo6c2xl
ZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgqdGhpcykuc2xlZXAo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL1dURi93dGYvV2Fs
bFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+CisjaW5jbHVkZSA8
d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1vbm90b25pY1RpbWU7
CitjbGFzcyBQcmludFN0cmVhbTsKKworLy8gVGhlIGN1cnJlbnQgdGltZSBhY2NvcmRpbmcgdG8g
YSB3YWxsIGNsb2NrIChha2EgcmVhbCB0aW1lIGNsb2NrKS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBv
aW50CisvLyBpbnRlcm5hbGx5IHNvIHRoYXQgeW91IGNhbiByZWFzb24gYWJvdXQgaW5maW5pdHkg
YW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0J3MKKy8vIGFjY2VwdGFibGUg
dG8gdXNlIHRoaXMgdG8gd3JhcCBOYU4gdGltZXMsIG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5p
dGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleQorLy8gYXJlIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNs
b2NrLiBTcGVjaWZpY2FsbHksIFdhbGxUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3
aXRoIHRoZQorLy8gcHJpbmNpcGxlIHRoYXQgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSBpcyB0aGUgc2FtZSBhcyBXVEY6OmN1cnJlbnRUaW1lKCkuCitjbGFzcyBX
YWxsVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBjbG9ja1R5cGUg
PSBDbG9ja1R5cGU6OldhbGw7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgZXBvY2guIFNvLCB4
LnNlY29uZHNTaW5jZUVwb2NoKCkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHggLSBXYWxsVGltZSgp
LgorICAgIFdhbGxUaW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93
IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUgYWNjb3JkaW5nIHRvCisg
ICAgLy8gV1RGOjpjdXJyZW50VGltZSgpLiBJdCBtdXN0IGJlIGluIHNlY29uZHMgYW5kIGl0IG11
c3QgYmUgZnJvbSB0aGUgc2FtZSB0aW1lIHNvdXJjZS4KKyAgICBzdGF0aWMgV2FsbFRpbWUgZnJv
bVJhd0RvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBXYWxsVGltZSByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2FsbFRpbWUgbm93
KCk7CisgICAgCisgICAgc3RhdGljIFdhbGxUaW1lIGluZmluaXR5KCkgeyByZXR1cm4gZnJvbVJh
d0RvdWJsZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisgICAg
CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMo
bV92YWx1ZSk7IH0KKyAgICAKKyAgICBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29u
c3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGlt
ZSBhcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgV2Fs
bFRpbWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZnJvbVJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAor
ICAgIFdhbGxUaW1lIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZyb21SYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0K
KyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVk
IGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlv
bnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBXYWxsVGltZSBvcGVyYXRvci0oKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUoLW1fdmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBXYWxsVGltZSYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV2FsbFRpbWUm
IG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3ItKFdhbGxU
aW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAt
IG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oV2FsbFRp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oV2FsbFRpbWUgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChXYWxsVGltZSBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj4oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I8PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+
PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2FsbFRpbWU7CisKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5jcHAJKHJldmlzaW9u
IDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDUsMTMgKzQ1LDE0IEBAIHZvaWQgQmluYXJ5U2VtYXBob3JlOjpzaWdu
YWwoKQogICAgIG1fY29uZGl0aW9uLnNpZ25hbCgpOwogfQogCi1ib29sIEJpbmFyeVNlbWFwaG9y
ZTo6d2FpdChkb3VibGUgYWJzb2x1dGVUaW1lKQorYm9vbCBCaW5hcnlTZW1hcGhvcmU6OndhaXQo
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGFic29sdXRlVGltZSkKIHsKICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CiAKICAgICBib29sIHRpbWVkT3V0ID0gZmFsc2U7CiAgICAgd2hp
bGUgKCFtX2lzU2V0KSB7Ci0gICAgICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLnRpbWVkV2Fp
dChtX211dGV4LCBhYnNvbHV0ZVRpbWUpOworICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlv
bi50aW1lZFdhaXQoCisgICAgICAgICAgICBtX211dGV4LCBhYnNvbHV0ZVRpbWUuYXBwcm94aW1h
dGVXYWxsVGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CiAgICAgICAgIGlmICh0
aW1lZE91dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNv
dXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQmluYXJ5U2VtYXBob3JlX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKQEAgLTM5LDcgKzQwLDcgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB+QmluYXJ5U2VtYXBob3JlKCk7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
aWduYWwoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB3YWl0KGRvdWJsZSBhYnNvbHV0
ZVRpbWUpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHdhaXQoVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNTZXQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxNi0xMS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIFdURjo6UGFya2luZ0xvdCBzaG91bGQgc3RvcCB1c2luZyBz
dGQ6OmNocm9ubyBiZWNhdXNlIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBjYXN0cyBhcmUgcHJvbmUg
dG8gb3ZlcmZsb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTIwNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4gSSB3aWxsIHdyaXRlIHVuaXQgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpibG9iU2l6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vTWFpblRocmVhZFNoYXJlZFRpbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
U2hhcmVkVGltZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkVGltZXJzOjp1cGRhdGVTaGFyZWRUaW1lcik6CisgICAgICAg
ICogcGxhdGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwpOgorICAgICAgICAq
IHBsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dsaWIvTWFpblRocmVhZFNoYXJlZFRpbWVyR0xpYi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbCk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbCk6CisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1
bkxvb3A6OnJ1bkluTW9kZSk6CisKIDIwMTYtMTEtMDMgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRh
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODMwMi4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBA
IHVuc2lnbmVkIGxvbmcgbG9uZyBUaHJlYWRhYmxlQmxvYlJlZ2lzdHIKICAgICAgICAgICAgIHJl
c3VsdFNpemUgPSBibG9iUmVnaXN0cnkoKS5ibG9iU2l6ZSh1cmwpOwogICAgICAgICAgICAgc2Vt
YXBob3JlLnNpZ25hbCgpOwogICAgICAgICB9KTsKLSAgICAgICAgc2VtYXBob3JlLndhaXQoc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgICAgIHNlbWFwaG9yZS53YWl0
KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdFNpemU7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGlt
ZXIuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWFpblRo
cmVhZFNoYXJlZFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTWFpblRocmVh
ZFNoYXJlZFRpbWVyJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgc2V0RmlyZWRGdW5jdGlvbihz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaXJlSW50ZXJ2
YWwoZG91YmxlKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRzKSBv
dmVycmlkZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKICAgICB2b2lkIGludmFsaWRhdGUo
KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkVGltZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5oCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
Myw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RmlyZWRGdW5jdGlvbihz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJikgPSAwOwogCiAgICAgLy8gVGhlIGZpcmUgaW50ZXJ2YWwg
aXMgaW4gc2Vjb25kcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtb25vdG9uaWMgY2xvY2sgdGlt
ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlyZUludGVydmFsKGRvdWJsZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcykgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKSB7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcAkocmV2aXNpb24gMjA4MzU4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtOTIsNyArOTIsNyBAQCB2b2lkIFRocmVhZFRpbWVyczo6dXBkYXRlU2hhcmVkVGltZXIoKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSAKICAgICAgICAgbV9wZW5kaW5nU2hh
cmVkVGltZXJGaXJlVGltZSA9IG5leHRGaXJlVGltZTsKLSAgICAgICAgbV9zaGFyZWRUaW1lci0+
c2V0RmlyZUludGVydmFsKHN0ZDo6bWF4KG5leHRGaXJlVGltZSAtIGN1cnJlbnRNb25vdG9uaWNU
aW1lLCAwLjApKTsKKyAgICAgICAgbV9zaGFyZWRUaW1lci0+c2V0RmlyZUludGVydmFsKFNlY29u
ZHMoc3RkOjptYXgobmV4dEZpcmVUaW1lIC0gY3VycmVudE1vbm90b25pY1RpbWUsIDAuMCkpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL01haW5UaHJlYWRT
aGFyZWRUaW1lckNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
Zi9NYWluVGhyZWFkU2hhcmVkVGltZXJDRi5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDEwLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MywxMSArOTMsMTEgQEAgdm9pZCBNYWlu
VGhyZWFkU2hhcmVkVGltZXI6OmludmFsaWRhdGUoKQogICAgIHNoYXJlZFRpbWVyID0gbnVsbHB0
cjsKIH0KIAotdm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3Vi
bGUgaW50ZXJ2YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFs
KFNlY29uZHMgaW50ZXJ2YWwpCiB7CiAgICAgQVNTRVJUKG1fZmlyZWRGdW5jdGlvbik7CiAKLSAg
ICBDRkFic29sdXRlVGltZSBmaXJlRGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsg
aW50ZXJ2YWw7CisgICAgQ0ZBYnNvbHV0ZVRpbWUgZmlyZURhdGUgPSBDRkFic29sdXRlVGltZUdl
dEN1cnJlbnQoKSArIGludGVydmFsLnZhbHVlKCk7CiAgICAgaWYgKCFzaGFyZWRUaW1lcikgewog
ICAgICAgICBzaGFyZWRUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKG51bGxwdHIsIGZpcmVE
YXRlLCBrQ0ZUaW1lSW50ZXJ2YWxEaXN0YW50RnV0dXJlLCAwLCAwLCB0aW1lckZpcmVkLCBudWxs
cHRyKTsKICNpZiBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAkocmV2aXNpb24g
MjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRU
aW1lckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKiAgICAgICAgICAg
KEMpIDIwMDggQWZvbnNvIFJhYmVsbyBDb3N0YSBKci4KICAqICAgICAgICAgICAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgKiAgICAgICAgICAgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MywxMCArNTQsMTAgQEAgdm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnN0b3AoKQogICAgIH0K
IH0KIAotdm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3VibGUg
aW50ZXJ2YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKFNl
Y29uZHMgaW50ZXJ2YWwpCiB7CiAgICAgc3RvcCgpOwotICAgIHNoYXJlZFRpbWVyID0gZWNvcmVf
dGltZXJfbG9vcF9hZGQoaW50ZXJ2YWwsIHRpbWVyRXZlbnQsIG51bGxwdHIpOworICAgIHNoYXJl
ZFRpbWVyID0gZWNvcmVfdGltZXJfbG9vcF9hZGQoaW50ZXJ2YWwudmFsdWUoKSwgdGltZXJFdmVu
dCwgbnVsbHB0cik7CiB9CiAKIHZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjppbnZhbGlkYXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvTWFpblRocmVhZFNoYXJlZFRp
bWVyR0xpYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9N
YWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgpAQCAtMzksMTAgKzM5LDEwIEBAIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6TWFpblRo
cmVhZFNoYXJlZFQKICAgICBtX3RpbWVyLnNldFByaW9yaXR5KEdfUFJJT1JJVFlfSElHSF9JRExF
ICsgMjApOwogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFs
KGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50
ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBBU1NFUlQobV9maXJlZEZ1bmN0aW9uKTsK
LSAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7CisgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoaW50ZXJ2YWwudmFsdWUoKSk7CiB9CiAKIHZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVy
OjpzdG9wKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hh
cmVkVGltZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTWFpblRocmVhZFNoYXJlZFRpbWVyV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjEsMTIgKzEyMSwxMiBAQCBzdGF0aWMgdm9pZCBOVEFQSSBxdWV1ZVRp
bWVyUHJvYyhQVk9JRCwgCiAgICAgICAgIFBvc3RNZXNzYWdlKHRpbWVyV2luZG93SGFuZGxlLCB0
aW1lckZpcmVkTWVzc2FnZSwgMCwgMCk7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVy
OjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhyZWFkU2hhcmVk
VGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsU2Vjb25kcykKIHsKICAgICBB
U1NFUlQobV9maXJlZEZ1bmN0aW9uKTsKIAorICAgIGRvdWJsZSBpbnRlcnZhbCA9IGludGVydmFs
SW5TZWNvbmRzLm1pbGxpc2Vjb25kcygpOwogICAgIHVuc2lnbmVkIGludGVydmFsSW5NUzsKLSAg
ICBpbnRlcnZhbCAqPSAxMDAwOwogICAgIGlmIChpbnRlcnZhbCA+IFVTRVJfVElNRVJfTUFYSU1V
TSkKICAgICAgICAgaW50ZXJ2YWxJbk1TID0gVVNFUl9USU1FUl9NQVhJTVVNOwogICAgIGVsc2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAkocmV2aXNpb24g
MjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTQ5LDE2ICs1MCwxNiBAQCBjbGFzcyBXb3JrZXJTaGFyZWRUaW1lciBmaW5h
bCA6IHB1YmxpYyBTCiBwdWJsaWM6CiAgICAgLy8gU2hhcmVkVGltZXIgaW50ZXJmYWNlLgogICAg
IHZvaWQgc2V0RmlyZWRGdW5jdGlvbihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikg
b3ZlcnJpZGUgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKTsgfQot
ICAgIHZvaWQgc2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkgb3ZlcnJpZGUgeyBtX25l
eHRGaXJlVGltZSA9IGludGVydmFsICsgY3VycmVudFRpbWUoKTsgfQotICAgIHZvaWQgc3RvcCgp
IG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSAwOyB9CisgICAgdm9pZCBzZXRGaXJlSW50ZXJ2
YWwoU2Vjb25kcyBpbnRlcnZhbCkgb3ZlcnJpZGUgeyBtX25leHRGaXJlVGltZSA9IGludGVydmFs
ICsgV2FsbFRpbWU6Om5vdygpOyB9CisgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGUgeyBtX25leHRG
aXJlVGltZSA9IFdhbGxUaW1lKCk7IH0KIAogICAgIGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiBt
X3NoYXJlZFRpbWVyRnVuY3Rpb24gJiYgbV9uZXh0RmlyZVRpbWU7IH0KLSAgICBkb3VibGUgZmly
ZVRpbWUoKSB7IHJldHVybiBtX25leHRGaXJlVGltZTsgfQorICAgIFdhbGxUaW1lIGZpcmVUaW1l
KCkgeyByZXR1cm4gbV9uZXh0RmlyZVRpbWU7IH0KICAgICB2b2lkIGZpcmUoKSB7IG1fc2hhcmVk
VGltZXJGdW5jdGlvbigpOyB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IG1fc2hhcmVkVGltZXJGdW5jdGlvbjsKLSAgICBkb3VibGUgbV9uZXh0RmlyZVRpbWUgeyAwIH07
CisgICAgV2FsbFRpbWUgbV9uZXh0RmlyZVRpbWU7CiB9OwogCiBjbGFzcyBNb2RlUHJlZGljYXRl
IHsKQEAgLTE1NywxNSArMTU4LDE2IEBAIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgV29ya2VyUnVu
TG9vcDo6cnUKICAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKG1haW5Db250ZXh0LCBG
QUxTRSk7CiAjZW5kaWYKIAotICAgIGRvdWJsZSBkZWFkbGluZSA9IE1lc3NhZ2VRdWV1ZTxUYXNr
Pjo6aW5maW5pdGVUaW1lKCk7CisgICAgV2FsbFRpbWUgZGVhZGxpbmUgPSBXYWxsVGltZTo6aW5m
aW5pdHkoKTsKIAogI2lmIFVTRShDRikKICAgICBDRkFic29sdXRlVGltZSBuZXh0Q0ZSdW5Mb29w
VGltZXJGaXJlRGF0ZSA9IENGUnVuTG9vcEdldE5leHRUaW1lckZpcmVEYXRlKENGUnVuTG9vcEdl
dEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKICAgICBkb3VibGUgdGltZVVudGls
TmV4dENGUnVuTG9vcFRpbWVySW5TZWNvbmRzID0gbmV4dENGUnVuTG9vcFRpbWVyRmlyZURhdGUg
LSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1l
KCkgKyBzdGQ6Om1heCgwLjAsIHRpbWVVbnRpbE5leHRDRlJ1bkxvb3BUaW1lckluU2Vjb25kcyk7
CisgICAgZGVhZGxpbmUgPSBXYWxsVGltZTo6bm93KCkgKyBzdGQ6Om1heCgKKyAgICAgICAgU2Vj
b25kcygwKSwgU2Vjb25kcyh0aW1lVW50aWxOZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMpKTsK
ICNlbmRpZgogCi0gICAgZG91YmxlIGFic29sdXRlVGltZSA9IDAuMDsKKyAgICBXYWxsVGltZSBh
YnNvbHV0ZVRpbWU7CiAgICAgaWYgKHdhaXRNb2RlID09IFdhaXRGb3JNZXNzYWdlKSB7CiAgICAg
ICAgIGlmIChwcmVkaWNhdGUuaXNEZWZhdWx0TW9kZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0
aXZlKCkpCiAgICAgICAgICAgICBhYnNvbHV0ZVRpbWUgPSBzdGQ6Om1pbihkZWFkbGluZSwgbV9z
aGFyZWRUaW1lci0+ZmlyZVRpbWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDgzNTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
MSBAQAorMjAxNi0xMS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdURjo6UGFya2luZ0xvdCBzaG91bGQgc3RvcCB1c2luZyBzdGQ6OmNocm9ubyBiZWNhdXNl
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBjYXN0cyBhcmUgcHJvbmUgdG8gb3ZlcmZsb3dzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIwNDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VT
dGF0ZTo6d2FpdCk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRNZXNzYWdlKToKKyAg
ICAgICAgKElQQzo6Q29ubmVjdGlvbjo6dGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0Zv
clRlc3RpbmcpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6Cisg
ICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZSk6CisgICAgICAgIChJUEM6
OkNvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmg6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRTeW5jKToKKyAgICAg
ICAgKElQQzo6Q29ubmVjdGlvbjo6d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkpOgorICAg
ICAgICAqIFBsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmg6CisgICAgICAgIChJUEM6Ok1lc3Nh
Z2VTZW5kZXI6OnNlbmRTeW5jKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJv
eHkuaDoKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZFByb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFw
cGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tOgorICAgICAgICAoLVtXS09uZVNob3REaXNw
bGF5TGlua0hhbmRsZXIgZGlzcGxheUxpbmtGaXJlZDpdKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Y29tbWl0TGF5ZXJUcmVlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVmcmVzaERpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp3
YWl0Rm9yRGlkVXBkYXRlQWN0aXZpdHlTdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yRGlkVXBkYXRlQWN0aXZp
dHlTdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIubW06CisgICAgICAgICgtW1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBpbW1lZGlh
dGVBY3Rpb25SZWNvZ25pemVyV2lsbEJlZ2luQW5pbWF0aW9uOl0pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWNjZXB0c0ZpcnN0TW91c2UpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnByaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXVvdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwb3N0U3luY2hyb25vdXNN
ZXNzYWdlRm9yVGVzdGluZyk6CisKIDIwMTYtMTEtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUHJpbnRpbmcgdG8gUERGIHNob3VsZCBwcm9kdWNl
IGludGVybmFsIGxpbmtzIHdoZW4gSFRNTCBoYXMgaW50ZXJuYWwgbGlua3MKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDIwODM1OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fd2FpdEZvclN5bmNSZXBseVNl
bWFwaG9yZS5zaWduYWwoKTsKICAgICB9CiAKLSAgICBib29sIHdhaXQoZG91YmxlIGFic29sdXRl
VGltZSkKKyAgICBib29sIHdhaXQoVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGFic29sdXRlVGlt
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3dhaXRGb3JTeW5jUmVwbHlTZW1hcGhvcmUud2Fp
dChhYnNvbHV0ZVRpbWUpOwogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCBib29sIENvbm5lY3Rp
b246OnNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlCiAgICAgICAgIGF1dG8gd3JhcHBlZE1lc3NhZ2Ug
PSBjcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIoIklQQyIsICJXcmFwcGVkQXN5bmNNZXNzYWdlRm9y
VGVzdGluZyIsIGVuY29kZXItPmRlc3RpbmF0aW9uSUQoKSwgc3luY1JlcXVlc3RJRCk7CiAgICAg
ICAgIHdyYXBwZWRNZXNzYWdlLT5zZXRGdWxseVN5bmNocm9ub3VzTW9kZUZvclRlc3RpbmcoKTsK
ICAgICAgICAgd3JhcHBlZE1lc3NhZ2UtPndyYXBGb3JUZXN0aW5nKFdURk1vdmUoZW5jb2Rlcikp
OwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oc2VuZFN5bmNNZXNzYWdlKHN5bmNS
ZXF1ZXN0SUQsIFdURk1vdmUod3JhcHBlZE1lc3NhZ2UpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzOjptYXgoKSwgeyB9KSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihzZW5k
U3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZSh3cmFwcGVkTWVzc2FnZSksIFNlY29u
ZHM6OmluZmluaXR5KCksIHsgfSkpOwogICAgIH0KIAogICAgIGlmIChzZW5kT3B0aW9ucy5jb250
YWlucyhTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVw
bHkpCkBAIC00MjAsMTIgKzQyMCwxMiBAQCBib29sIENvbm5lY3Rpb246OnNlbmRTeW5jUmVwbHko
c3RkOjp1bmlxCiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHsgfSk7
CiB9CiAKLXN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgQ29ubmVjdGlvbjo6dGltZW91dFJlc3Bl
Y3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3Rpbmcoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0
aW1lb3V0KSBjb25zdAorU2Vjb25kcyBDb25uZWN0aW9uOjp0aW1lb3V0UmVzcGVjdGluZ0lnbm9y
ZVRpbWVvdXRzRm9yVGVzdGluZyhTZWNvbmRzIHRpbWVvdXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1faWdub3JlVGltZW91dHNGb3JUZXN0aW5nID8gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6
bWF4KCkgOiB0aW1lb3V0OworICAgIHJldHVybiBtX2lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyA/
IFNlY29uZHM6OmluZmluaXR5KCkgOiB0aW1lb3V0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVj
b2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGlu
YXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2Fp
dEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29u
bmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5h
bWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
U2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNDcwLDkgKzQ3MCw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWkKICAgICB9CiAKICAgICAv
LyBDbGFtcCB0aGUgdGltZW91dCB0byBob3dldmVyIG11Y2ggdGltZSBpcyByZW1haW5pbmcgb24g
b3VyIGNsb2NrLgotICAgIGF1dG8gbm93ID0gQ29uZGl0aW9uOjpDbG9jazo6bm93KCk7Ci0gICAg
YXV0byByZW1haW5pbmdDbG9ja1RpbWUgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzPihDb25kaXRpb246OkNsb2NrOjp0aW1lX3BvaW50OjptYXgo
KSAtIG5vdyk7Ci0gICAgYXV0byBhYnNvbHV0ZVRpbWVvdXQgPSBub3cgKyBzdGQ6Om1pbihyZW1h
aW5pbmdDbG9ja1RpbWUsIHRpbWVvdXQpOworICAgIE1vbm90b25pY1RpbWUgYWJzb2x1dGVUaW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6bm93KCkgKyB0aW1lb3V0OwogCiAgICAgLy8gTm93IHdhaXQg
Zm9yIGl0IHRvIGJlIHNldC4KICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDk2LDcgKzQ5NCw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbmRTeW5j
TWVzc2FnZSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4g
ZW5jb2Rlciwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBD
b25uZWN0aW9uOjpzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1
bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIApAQCAtNTQxLDEwICs1MzksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+
IENvbm5lY3Rpb246OnNlbgogICAgIHJldHVybiByZXBseTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1JlcXVl
c3RJRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25u
ZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIFNlY29uZHMg
dGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAg
ICAgdGltZW91dCA9IHRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKHRp
bWVvdXQpOwotICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWUgPSBjdXJyZW50VGltZSgpICsgKHRpbWVv
dXQuY291bnQoKSAvIDEwMDAuMCk7CisgICAgV2FsbFRpbWUgYWJzb2x1dGVUaW1lID0gV2FsbFRp
bWU6Om5vdygpICsgdGltZW91dDsKIAogICAgIHdpbGxTZW5kU3luY01lc3NhZ2Uoc2VuZFN5bmNP
cHRpb25zKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rp
b24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0xNjYsMTMgKzE2NiwxMyBAQCBwdWJsaWM6
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2
NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsg
fSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kV2l0aFJlcGx5KFQmJiBtZXNz
YWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBGdW5jdGlvbkRpc3BhdGNoZXImIHJlcGx5RGlz
cGF0Y2hlciwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8dHlwZW5hbWUgQ29kaW5nVHlwZTx0eXBl
bmFtZSBUOjpSZXBseT46OlR5cGU+KT4mJiByZXBseUhhbmRsZXIpOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYg
cmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gYm9vbCB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5h
dGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0
Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwg
dWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5p
dHkoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgd2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRl
bHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2Fp
dEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMgPSB7IH0pOwogCiAgICAgYm9vbCBzZW5kTWVzc2Fn
ZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0
aW9ucyk7CiAgICAgdm9pZCBzZW5kTWVzc2FnZVdpdGhSZXBseSh1aW50NjRfdCByZXF1ZXN0SUQs
IHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiwgRnVuY3Rpb25EaXNwYXRjaGVyJiByZXBseURpc3Bh
dGNoZXIsIEZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPik+JiYgcmVwbHlI
YW5kbGVyKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gY3JlYXRlU3luY01lc3NhZ2VF
bmNvZGVyKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHVpbnQ2NF90JiBzeW5jUmVx
dWVzdElEKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gc2VuZFN5bmNNZXNzYWdlKHVp
bnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRT
eW5jT3B0aW9ucyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHNlbmRTeW5jTWVzc2Fn
ZSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIFNlY29u
ZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpOwog
ICAgIGJvb2wgc2VuZFN5bmNSZXBseShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4pOwogCiAgICAg
dm9pZCB3YWtlVXBSdW5Mb29wKCk7CkBAIC0yMDgsOSArMjA4LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyKTsKICAgICB2b2lkIHBsYXRmb3JtSW52
YWxpZGF0ZSgpOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0Rm9yTWVz
c2FnZShTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPERlY29kZXI+IHdhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVj
ZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+KTsKICAgICAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvclN5bmNSZXBseSh1aW50NjRfdCBz
eW5jUmVxdWVzdElELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNl
dDxTZW5kU3luY09wdGlvbj4pOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0Rm9y
U3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9u
U2V0PFNlbmRTeW5jT3B0aW9uPik7CiAKICAgICAvLyBDYWxsZWQgb24gdGhlIGNvbm5lY3Rpb24g
d29yayBxdWV1ZS4KICAgICB2b2lkIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uoc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+KTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd2ls
bFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKICAgICB2b2lkIGRp
ZFJlY2VpdmVTeW5jUmVwbHkoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7CiAKLSAgICBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JU
ZXN0aW5nKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpIGNvbnN0OworICAgIFNlY29uZHMgdGlt
ZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoU2Vjb25kcykgY29uc3Q7CiAg
ICAgCiAgICAgQ2xpZW50JiBtX2NsaWVudDsKICAgICBib29sIG1faXNTZXJ2ZXI7CkBAIC0zNjUs
NyArMzY1LDcgQEAgdm9pZCBDb25uZWN0aW9uOjpzZW5kV2l0aFJlcGx5KFQmJiBtZXNzYQogICAg
IH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNlbmRTeW5j
KFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5h
dGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5k
U3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBD
b25uZWN0aW9uOjpzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBs
eSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKIHsKICAgICBDT01QSUxFX0FTU0VSVChUOjpp
c1N5bmMsIFN5bmNNZXNzYWdlRXhwZWN0ZWQpOwogCkBAIC0zODksNyArMzg5LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjpzZQogICAgIHJldHVybiByZXBseURlY29k
ZXItPmRlY29kZShyZXBseSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVj
dGlvbjo6d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGluYXRpb25J
RCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9w
dGlvbj4gd2FpdEZvck9wdGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rp
b246OndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQs
IFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25z
KQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBkZWNvZGVyID0gd2FpdEZvck1lc3Nh
Z2UoVDo6cmVjZWl2ZXJOYW1lKCksIFQ6Om5hbWUoKSwgZGVzdGluYXRpb25JRCwgdGltZW91dCwg
d2FpdEZvck9wdGlvbnMpOwogICAgIGlmICghZGVjb2RlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzOjptYXgoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMg
PSB7IH0pCisgICAgYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkm
JiByZXBseSwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKSwgT3B0aW9uU2V0
PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCiAgICAgewogICAgICAgICBz
dGF0aWNfYXNzZXJ0KFQ6OmlzU3luYywgIk1lc3NhZ2UgaXMgbm90IHN5bmMhIik7CiAKQEAgLTU4
LDcgKzU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwg
dWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0
ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09w
dGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KQorICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3Nh
Z2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNl
Y29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5kU3luY09w
dGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcAkocmV2aXNpb24g
MjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWFQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIEFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvCiAgICAgLy8gY2hvb3NlIHRoZSBtb3N0IHJl
Y2VudCBvbmUsIG9yIHRoZSBvbmUgdGhhdCBpcyBjbG9zZXN0IHRvIG91ciBjdXJyZW50IHNpemUu
CiAKICAgICAvLyBUaGUgdGltZW91dCwgaW4gc2Vjb25kcywgd2UgdXNlIHdoZW4gd2FpdGluZyBm
b3IgYSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIHdoZW4gd2UncmUgYXNrZWQg
dG8gcGFpbnQuCi0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+d2Fp
dEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyg1MDApKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCku
Y29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6RHJh
d2luZ0FyZWFQcm94eTo6RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU+KG1fd2ViUGFnZVByb3h5
LnBhZ2VJRCgpLCBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDUwMCkpOwogfQogCiB2b2lkIEFj
Y2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaGlsZFByb2Nlc3NQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1aW50NjRf
dCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9
IHsgfSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2Fn
ZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMSksIE9wdGlv
blNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6
OlJlcGx5JiYsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29u
ZHMoMSksIE9wdGlvblNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7
IH0pOwogCiAgICAgSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgY29uc3QKICAgICB7CkBA
IC0xMDIsNyArMTAyLDcgQEAgYm9vbCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZChUJiYgbWVzc2Fn
ZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiAKLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNl
bmRTeW5jKFUmJiBtZXNzYWdlLCB0eXBlbmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNl
dDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCitib29sIENoaWxkUHJvY2Vz
c1Byb3h5OjpzZW5kU3luYyhVJiYgbWVzc2FnZSwgdHlwZW5hbWUgVTo6UmVwbHkmJiByZXBseSwg
dWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8SVBDOjpT
ZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJUKFU6
OmlzU3luYywgU3luY01lc3NhZ2VFeHBlY3RlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsOSArNzEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2Nyb2xsT2Zmc2V0KTsKIAogICAgIC8vIFRoZSB0aW1lb3V0IHdlIHVzZSB3aGVuIHdhaXRpbmcg
Zm9yIGEgRGlkVXBkYXRlR2VvbWV0cnkgbWVzc2FnZS4KLSAgICBzdGF0aWMgY29uc3RleHByIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0
KCkgeyByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApOyB9CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBTZWNvbmRzIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpIHsg
cmV0dXJuIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoNTAwKTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIHdhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgPSBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHdhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKFNlY29uZHMgPSBkaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY29sb3JT
cGFjZURpZENoYW5nZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtaW5pbXVtTGF5b3V0U2l6ZURp
ZENoYW5nZSgpIHsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDYsNyArOTA2LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmRQcm9jZXNzV2lsbFN1cwogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSgpLCBNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0
ZDo6Y2hyb25vOjpzZWNvbmRzKDEpKTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSgpLCBNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIFNlY29uZHMo
MSkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZFByZXBhcmVUb1N1c3BlbmQoKQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmFwcAogICAgICAgICAvLyBNYWtlIHN1cmUgYW55IG9uZ29pbmcgd29yayBpbiBv
dXIgcXVldWUgaXMgZmluaXNoZWQgYmVmb3JlIHdlIHRlcm1pbmF0ZS4KICAgICAgICAgc2VtYXBo
b3JlLnNpZ25hbCgpOwogICAgIH0pOwotICAgIHNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6bWF4KCkpOworICAgIHNlbWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZp
bml0eSgpKTsKIH0KIAogU3RyaW5nIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVy
c2lzdGVudFN0b3JhZ2VQYXRoKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2OSw3ICsz
NjksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcm9jZXNzV2lsCiAgICAgICAg
IHJldHVybjsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSgpLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHk6OlJlcGx5
KGhhbmRsZWQpLCAwLCBzdGQ6OmNocm9ubzo6c2Vjb25kcygxKSk7CisgICAgc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCksIE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseTo6UmVw
bHkoaGFuZGxlZCksIDAsIFNlY29uZHMoMSkpOwogfQogICAgIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzZW5kUHJlcGFyZVRvU3VzcGVuZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTg0Myw3ICs4NDMsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjph
cHBsaWNhdGlvbldpbGxUZXJtCiAKICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH0p
OwotICAgIHNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkp
OworICAgIHNlbWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKIH0KIAogU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VBcmVhKiBTdG9yYWdlTWFuYWdlcjo6ZmluZFN0b3JhZ2VBcmVhKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElEKSBjb25zdApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN5bmNocm9uaXplRHluYW1pY1ZpZQogICAgICAgICBkb3VibGUgbmV3U2Nh
bGU7CiAgICAgICAgIEZsb2F0UG9pbnQgbmV3U2Nyb2xsUG9zaXRpb247CiAgICAgICAgIHVpbnQ2
NF90IG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0aW9uSUQ7Ci0gICAgICAgIGlmIChtX3Byb2Nl
c3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpTeW5jaHJvbml6ZUR5bmFtaWNWaWV3cG9y
dFVwZGF0ZSgpLCBNZXNzYWdlczo6V2ViUGFnZTo6U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRV
cGRhdGU6OlJlcGx5KG5ld1NjYWxlLCBuZXdTY3JvbGxQb3NpdGlvbiwgbmV4dFZhbGlkTGF5ZXJU
cmVlVHJhbnNhY3Rpb25JRCksIG1fcGFnZUlELCBzdGQ6OmNocm9ubzo6c2Vjb25kcygyKSkpIHsK
KyAgICAgICAgaWYgKG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlN5bmNo
cm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlKCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTeW5jaHJv
bml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZTo6UmVwbHkobmV3U2NhbGUsIG5ld1Njcm9sbFBvc2l0
aW9uLCBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEKSwgbV9wYWdlSUQsIFNlY29uZHMo
MikpKSB7CiAgICAgICAgICAgICBtX2R5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVXYWl0aW5nRm9y
VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBtX2R5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVM
YXllclRyZWVUcmFuc2FjdGlvbklEID0gbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRDsK
ICAgICAgICAgICAgIG1fcGFnZUNsaWVudC5keW5hbWljVmlld3BvcnRVcGRhdGVDaGFuZ2VkVGFy
Z2V0KG5ld1NjYWxlLCBuZXdTY3JvbGxQb3NpdGlvbiwgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNh
Y3Rpb25JRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAkocmV2aXNpb24gMjA4
MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB1aW50NjRfdCBuZXh0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGVuZGluZ0xheWVyVHJlZVRyYW5zYWN0aW9uSUQgKyAxOyB9CiAgICAgdWludDY0
X3QgbGFzdENvbW1pdHRlZExheWVyVHJlZVRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FDb21taXQ7IH0KIAotICAgIHZvaWQgZGlkUmVmcmVz
aERpc3BsYXkoZG91YmxlIHRpbWVzdGFtcCk7CisgICAgdm9pZCBkaWRSZWZyZXNoRGlzcGxheSgp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNyArODEsNyBAQCAtICh2b2lkKWRlYWxsb2MK
IC0gKHZvaWQpZGlzcGxheUxpbmtGaXJlZDooQ0FEaXNwbGF5TGluayAqKXNlbmRlcgogewogICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIF9kcmF3aW5nQXJlYVByb3h5LT5kaWRSZWZyZXNo
RGlzcGxheShzZW5kZXIudGltZXN0YW1wKTsKKyAgICBfZHJhd2luZ0FyZWFQcm94eS0+ZGlkUmVm
cmVzaERpc3BsYXkoKTsKIH0KIAogLSAodm9pZClpbnZhbGlkYXRlCkBAIC0yMjgsMTEgKzIyOCwx
MSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNvCiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgaWYgKHN0ZDo6ZXhjaGFuZ2UobV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUs
IE5lZWRzRGlkVXBkYXRlKSA9PSBNaXNzZWRDb21taXQpCi0gICAgICAgIGRpZFJlZnJlc2hEaXNw
bGF5KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKKyAgICAgICAgZGlkUmVmcmVzaERp
c3BsYXkoKTsKICAgICBbbV9kaXNwbGF5TGlua0hhbmRsZXIgc2NoZWR1bGVdOwogI2Vsc2UKICAg
ICBtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IE5lZWRzRGlkVXBkYXRlOwotICAgIGRpZFJlZnJl
c2hEaXNwbGF5KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKKyAgICBkaWRSZWZyZXNo
RGlzcGxheSgpOwogI2VuZGlmCiAKICAgICBpZiAoYXV0byBtaWxlc3RvbmVzID0gbGF5ZXJUcmVl
VHJhbnNhY3Rpb24ubmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcygpKQpAQCAtMzk0LDcgKzM5
NCw3IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6aW4KICAgICB9CiB9
CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVmcmVzaERpc3Bs
YXkoZG91YmxlKQordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWZy
ZXNoRGlzcGxheSgpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQyNiwxNiArNDI2LDE2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6d2EKICAgICAvLyBXZSBtdXN0IHNlbmQgdGhlIGRpZFVwZGF0ZSBtZXNz
YWdlIGJlZm9yZSBibG9ja2luZyBvbiB0aGUgbmV4dCBjb21taXQsIG90aGVyd2lzZQogICAgIC8v
IHdlIGNhbiBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIG5leHQgY29tbWl0IHdvbid0IGNvbWUgdW50
aWwgYWZ0ZXIgdGhlIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5IHRpbWVzIG91dC4KICAg
ICBpZiAobV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgIT0gRG9lc05vdE5lZWREaWRVcGRhdGUpCi0g
ICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsK
KyAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKIAotICAgIHN0YXRpYyBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gW10geworICAgIHN0YXRp
YyBTZWNvbmRzIGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gW10gewogICAgICAgICBpZiAo
aWQgdmFsdWUgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RG
b3JLZXk6QCJXZWJLaXRPdmVycmlkZUFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0Il0pCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oW3ZhbHVlIGRvdWJsZVZh
bHVlXSkpOworICAgICAgICAgICAgcmV0dXJuIFNlY29uZHMoW3ZhbHVlIGRvdWJsZVZhbHVlXSk7
CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzKDUwMCk7CisgICAgICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDUw
MCk7CiAjZWxzZQotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygyNTAp
OworICAgICAgICByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygyNTApOwogI2VuZGlm
CiAgICAgfSgpOwogICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndh
aXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5OjpDb21taXRMYXllclRyZWU+KG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBh
Y3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCwgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRX
YWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gRHJhd2luZ0FyZWFQcm94eQogICAg
IHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZTsKICAgICB2b2lkIHNp
emVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JQb3NzaWJsZUdlb21ldHJ5
VXBkYXRlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCA9IGRpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlVGltZW91dCgpKSBvdmVycmlkZTsKKyAgICB2b2lkIHdhaXRGb3JQb3NzaWJs
ZUdlb21ldHJ5VXBkYXRlKFNlY29uZHMgdGltZW91dCA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlVGltZW91dCgpKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbG9yU3BhY2VEaWRDaGFuZ2UoKSBv
dmVycmlkZTsKICAgICB2b2lkIG1pbmltdW1MYXlvdXRTaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWFQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0JKHJldmlzaW9uIDIw
ODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWFQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHk6CiAgICAgc2VuZFVwZGF0ZUdlb21ldHJ5
KCk7CiB9CiAKLXZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZv
clBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0
KQordm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yUG9zc2li
bGVHZW9tZXRyeVVwZGF0ZShTZWNvbmRzIHRpbWVvdXQpCiB7CiAjaWYgIUhBVkUoQ09SRUFOSU1B
VElPTl9GRU5DRVMpCiAgICAgaWYgKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUdlb21ldHJ5KQpA
QCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94
eToKIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yRGlk
VXBkYXRlQWN0aXZpdHlTdGF0ZSgpCiB7Ci0gICAgYXV0byBhY3Rpdml0eVN0YXRlVXBkYXRlVGlt
ZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMjUwKTsKKyAgICBTZWNvbmRzIGFjdGl2
aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygyNTApOwog
ICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNw
YXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFVwZGF0ZUFjdGl2aXR5
U3RhdGU+KG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91
dCwgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2
ZXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gMjA4MzU4KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE5Niw3ICsxOTYsNyBAQCAtICh2b2lkKWltbWVkaWF0ZUFj
dGlvblJlY29nbml6ZXJXaWxsQmVnCiAgICAgLy8gRklYTUU6IENvbm5lY3Rpb24gY2FuIGJlIG51
bGwgaWYgdGhlIHByb2Nlc3MgaXMgY2xvc2VkOyB3ZSBzaG91bGQgY2xlYW4gdXAgYmV0dGVyIGlu
IHRoYXQgY2FzZS4KICAgICBpZiAoX3N0YXRlID09IEltbWVkaWF0ZUFjdGlvblN0YXRlOjpQZW5k
aW5nKSB7CiAgICAgICAgIGlmIChhdXRvKiBjb25uZWN0aW9uID0gX3BhZ2UtPnByb2Nlc3MoKS5j
b25uZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIGJvb2wgcmVjZWl2ZWRSZXBseSA9IGNvbm5lY3Rp
b24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0PihfcGFnZS0+cGFnZUlEKCksIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSk7CisgICAgICAgICAgICBib29sIHJlY2VpdmVkUmVw
bHkgPSBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdD4oX3BhZ2UtPnBh
Z2VJRCgpLCBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDUwMCkpOwogICAgICAgICAgICAgaWYg
KCFyZWNlaXZlZFJlcGx5KQogICAgICAgICAgICAgICAgIF9zdGF0ZSA9IEltbWVkaWF0ZUFjdGlv
blN0YXRlOjpUaW1lZE91dDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyOSw3ICsyMjksNyBAQCBTdHJpbmcgV2ViUGFn
ZVByb3h5OjpzdHJpbmdTZWxlY3Rpb25Gb3JQCiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAg
IHJldHVybiB2YWx1ZTsKICAgICAKLSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3Rk
OjpjaHJvbm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQo
MjApOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0U3RyaW5n
U2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpLCBNZXNzYWdlczo6V2ViUGFnZTo6R2V0U3RyaW5nU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZDo6UmVwbHkodmFsdWUpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVv
dXQpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAgLTI0MCw3ICsyNDAsNyBAQCBSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQYWdlUHJvCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICB1aW50NjRfdCBzaXplID0gMDsK
LSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMjAp
OworICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMjApOwogICAgIHByb2Nlc3MoKS5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6R2V0RGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQo
cGFzdGVib2FyZFR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2U6OkdldERhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJk
OjpSZXBseShoYW5kbGUsIHNpemUpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIGlm
IChoYW5kbGUuaXNOdWxsKCkpCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6
OnJlYWRTZWxlY3Rpb25Gcm9tUGFzdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgIGNvbnN0IGF1dG8gbWVzc2FnZVRpbWVvdXQgPSBzdGQ6OmNo
cm9ubzo6c2Vjb25kcygyMCk7CisgICAgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGltZW91dCgyMCk7
CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZWFkU2VsZWN0aW9u
RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFnZTo6UmVhZFNl
bGVjdGlvbkZyb21QYXN0ZWJvYXJkOjpSZXBseShyZXN1bHQpLCBtX3BhZ2VJRCwgbWVzc2FnZVRp
bWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00MDgsNyArNDA4LDcgQEAgYm9vbCBX
ZWJQYWdlUHJveHk6OnNob3VsZERlbGF5V2luZG93T3JkZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGNvbnN0IGF1dG8gbWVzc2FnZVRpbWVv
dXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygzKTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VU
aW1lb3V0KDMpOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6U2hv
dWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KGV2ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlNo
b3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIG1l
c3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDE5LDcgKzQxOSw3IEBA
IGJvb2wgV2ViUGFnZVByb3h5OjphY2NlcHRzRmlyc3RNb3VzZShpbnQKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRvIG1lc3Nh
Z2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMyk7CisgICAgY29uc3QgU2Vjb25kcyBt
ZXNzYWdlVGltZW91dCgzKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2U6OkFjY2VwdHNGaXJzdE1vdXNlKGV2ZW50TnVtYmVyLCBldmVudCksIE1lc3NhZ2VzOjpXZWJQ
YWdlOjpBY2NlcHRzRmlyc3RNb3VzZTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIG1lc3NhZ2VU
aW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyAr
MzU0LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbgogCiAgICAg
SGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAotICAgIGlmICgh
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKG1l
c3NhZ2UsIHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWw6OlJlcGx5KHNob3VsZENsb3NlKSwgbV9wYWdlLT5wYWdl
SUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRp
b246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKKyAgICBpZiAoIVdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChtZXNzYWdlLCB3
ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5s
b2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRDbG9zZSksIG1fcGFnZS0+cGFnZUlEKCksIFNl
Y29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJv
Y2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHNo
b3VsZENsb3NlOwpAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5K
YXZhU2NyaXB0QWxlcnQKIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9u
RGlzYWJsZXI7CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUo
ZnJhbWUpLCBhbGVydFRleHQpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
QWxlcnQ6OlJlcGx5KCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxs
U3VzcGVuZCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFs
ZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGZy
YW1lKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFs
ZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6
OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CiB9CiAK
IGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSogZnJhbWUs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTQxNyw3ICs0MTcsNyBAQCBib29sIFdlYkNocm9t
ZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpCiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhh
bmdEZXRlY3Rpb25EaXNhYmxlcjsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFt
ZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIG1lc3Nh
Z2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6UmVwbHko
cmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4
KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5k
KSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25m
aXJtKHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGZy
YW1lKSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25m
aXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgp
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC00MzYsNyAr
NDM2LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcAogCiAgICAg
SGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAotICAgIGlmICgh
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+
ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIG1lc3NhZ2Us
IGRlZmF1bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9t
cHQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NX
aWxsU3VzcGVuZCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZh
U2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJv
bUZyYW1lKGZyYW1lKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQo
KSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZv
cm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gIXJlc3VsdC5pc051bGwoKTsKQEAgLTY2OCw3ICs2NjgsNyBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6cHJpbnQoRnJhbWUqIGZyYW1lCiAgICAgfQogI2VuZGlmCiAKLSAgICBtX3BhZ2UtPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWUod2ViRnJhbWUtPmZyYW1l
SUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWU6OlJlcGx5KCksIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1Q
bGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lKHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lOjpSZXBseSgpLCBTZWNvbmRzOjppbmZpbml0eSgp
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7
CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgRGF0YWJhc2VEZXRhaWxzIGRldGFp
bHMpCkBAIC02ODgsNyArNjg4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0
YWJhc2VRdQogICAgIGlmICghbmV3UXVvdGEpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoCiAgICAgICAgICAgICBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVvdGEod2ViRnJhbWUtPmZy
YW1lSUQoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgZGF0YWJhc2VOYW1lLCBkZXRh
aWxzLmRpc3BsYXlOYW1lKCksIGN1cnJlbnRRdW90YSwgY3VycmVudE9yaWdpblVzYWdlLCBkZXRh
aWxzLmN1cnJlbnRVc2FnZSgpLCBkZXRhaWxzLmV4cGVjdGVkVXNhZ2UoKSksCi0gICAgICAgICAg
ICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVvdGE6OlJlcGx5KG5l
d1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4
KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5k
KTsKKyAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0YWJhc2VR
dW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0
eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVu
ZCk7CiAgICAgfQogCiAgICAgZGJNYW5hZ2VyLnNldFF1b3RhKG9yaWdpbiwgbmV3UXVvdGEpOwpA
QCAtNzEzLDcgKzcxMyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRp
b24KICAgICB1aW50NjRfdCBuZXdRdW90YSA9IDA7CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoCiAgICAgICAgIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEob3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgY3VycmVudFF1b3RhLCB0b3RhbEJ5dGVzTmVlZGVkKSwK
LSAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZv
cm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
ZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFn
ZS0+cGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246Oklu
Zm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKIAogICAgIGNhY2hlU3RvcmFnZS5zdG9y
ZVVwZGF0ZWRRdW90YUZvck9yaWdpbihvcmlnaW4sIG5ld1F1b3RhKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDcgKzY5MCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGVjaWQKIAogICAgIFJlZjxXZWJGcmFtZT4gcHJvdGVjdCgqbV9mcmFt
ZSk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgp
OwotICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jKG1fZnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmln
aW5EYXRhOjpmcm9tRnJhbWUoY29yZUZyYW1lKSwgcmVzcG9uc2UsIHJlcXVlc3QsIGNhblNob3dN
SU1FVHlwZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJh
bnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSwgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jOjpSZXBseShyZWNlaXZl
ZFBvbGljeUFjdGlvbiwgcG9saWN5QWN0aW9uLCBkb3dubG9hZElEKSwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJv
Y2Vzc1dpbGxTdXNwZW5kKSkgeworICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jKG1fZnJhbWUtPmZyYW1l
SUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoY29yZUZyYW1lKSwgcmVzcG9uc2Us
IHJlcXVlc3QsIGNhblNob3dNSU1FVHlwZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VT
eW5jOjpSZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgcG9saWN5QWN0aW9uLCBkb3dubG9hZElE
KSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZv
cm1Qcm9jZXNzV2lsbFN1c3BlbmQpKSB7CiAgICAgICAgIG1fZnJhbWUtPmRpZFJlY2VpdmVQb2xp
Y3lEZWNpc2lvbihsaXN0ZW5lcklELCBQb2xpY3lJZ25vcmUsIDAsIHsgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi0K
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCkBAIC01NTM2LDcgKzU1MzUsNyBAQCB2b2lkIFdlYlBhZ2U6OnBvc3RTeW5j
aHJvbm91c01lc3NhZ2VGb3JUCiAgICAgVXNlckRhdGEgcmV0dXJuVXNlckRhdGE7CiAKICAgICBh
dXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKCFzZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UobWVz
c2FnZU5hbWUsIFVzZXJEYXRhKHdlYlByb2Nlc3MudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyht
ZXNzYWdlQm9keSkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlU3luY2hyb25vdXNN
ZXNzYWdlOjpSZXBseShyZXR1cm5Vc2VyRGF0YSksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpVc2VGdWxseVN5bmNocm9ub3VzTW9kZUZvclRl
c3RpbmcpKQorICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxl
U3luY2hyb25vdXNNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YSh3ZWJQcm9jZXNzLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZTo6UmVwbHkocmV0dXJuVXNlckRhdGEpLCBTZWNv
bmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpVc2VGdWxseVN5bmNocm9ub3Vz
TW9kZUZvclRlc3RpbmcpKQogICAgICAgICByZXR1cm5EYXRhID0gbnVsbHB0cjsKICAgICBlbHNl
CiAgICAgICAgIHJldHVybkRhdGEgPSB3ZWJQcm9jZXNzLnRyYW5zZm9ybUhhbmRsZXNUb09iamVj
dHMocmV0dXJuVXNlckRhdGEub2JqZWN0KCkpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzgzKQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMTEtMDQgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEY6OlBhcmtpbmdMb3Qgc2hv
dWxkIHN0b3AgdXNpbmcgc3RkOjpjaHJvbm8gYmVjYXVzZSBzdGQ6OmNocm9ubzo6ZHVyYXRpb24g
Y2FzdHMgYXJlIHByb25lIHRvIG92ZXJmbG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMDQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24u
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdG9wUHJvZHVjaW5nKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3BDb25zdW1pbmcpOgorCiAyMDE2LTEx
LTA0ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2lu
XSBQYWdlIHZpc2liaWxpdHkgdGVzdHMgYXJlIHRpbWluZyBvdXQuCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDgsOSArNDgsOSBAQCBlbnVtIE5vdGlmeVN0eWxlIHsKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci12b2lkIHdhaXQoQ29uZGl0aW9uJiBjb25kaXRpb24sIHN0ZDo6dW5pcXVl
X2xvY2s8TG9jaz4mIGxvY2tlciwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlLCBzdGQ6OmNocm9u
bzo6bWljcm9zZWNvbmRzIHRpbWVvdXQpCit2b2lkIHdhaXQoQ29uZGl0aW9uJiBjb25kaXRpb24s
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4mIGxvY2tlciwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRl
LCBTZWNvbmRzIHRpbWVvdXQpCiB7Ci0gICAgaWYgKHRpbWVvdXQgPT0gc3RkOjpjaHJvbm86Om1p
Y3Jvc2Vjb25kczo6bWF4KCkpCisgICAgaWYgKHRpbWVvdXQgPT0gU2Vjb25kczo6aW5maW5pdHko
KSkKICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyLCBwcmVkaWNhdGUpOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBUaGlzIHRlc3RzIHRpbWVvdXRzIGluIHRoZSBzZW5zZSB0aGF0IGl0IHZl
cmlmaWVzIHRoYXQgd2UgY2FuIGNhbGwgd2FpdCgpIGFnYWluIGFmdGVyIGEKQEAgLTgwLDggKzgw
LDggQEAgdm9pZCBydW5UZXN0KAogICAgIHVuc2lnbmVkIG1heFF1ZXVlU2l6ZSwKICAgICB1bnNp
Z25lZCBudW1NZXNzYWdlc1BlclByb2R1Y2VyLAogICAgIE5vdGlmeVN0eWxlIG5vdGlmeVN0eWxl
LAotICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgdGltZW91dCA9IHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHM6Om1heCgpLAotICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgZGVsYXkg
PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjp6ZXJvKCkpCisgICAgU2Vjb25kcyB0aW1lb3V0
ID0gU2Vjb25kczo6aW5maW5pdHkoKSwKKyAgICBTZWNvbmRzIGRlbGF5ID0gU2Vjb25kcygwKSkK
IHsKICAgICBEZXF1ZTx1bnNpZ25lZD4gcXVldWU7CiAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9
IHRydWU7CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBydW5UZXN0KAogICAgICAgICBjb25zdW1l
clRocmVhZHMuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOwogICAgIH0KIAotICAgIHN0ZDo6dGhp
c190aHJlYWQ6OnNsZWVwX2ZvcihkZWxheSk7CisgICAgZGVsYXkuc2xlZXAoKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0tOykgewogICAgICAgICBUaHJlYWRJZGVu
dGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoCkBAIC0xODYsOCArMTg2LDgg
QEAgVEVTVChXVEZfQ29uZGl0aW9uLCBPbmVQcm9kdWNlck9uZUNvbnN1bQogewogICAgIHJ1blRl
c3QoCiAgICAgICAgIDEsIDEsIDEsIDEwMDAwMCwgVGFjdGljYWxseU5vdGlmeUFsbCwKLSAgICAg
ICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwMCksCi0gICAgICAgIHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHMoMTAwMDAwMCkpOworICAgICAgICBTZWNvbmRzOjpmcm9tTWlsbGlzZWNv
bmRzKDEwKSwKKyAgICAgICAgU2Vjb25kcygxKSk7CiB9CiAKIFRFU1QoV1RGX0NvbmRpdGlvbiwg
T25lUHJvZHVjZXJPbmVDb25zdW1lckh1bmRyZWRTbG90cykKQEAgLTI0Nyw3ICsyNDcsNyBAQCBU
RVNUKFdURl9Db25kaXRpb24sIFRpbWVvdXRUaW1lc091dCkKIAogICAgIGxvY2subG9jaygpOwog
ICAgIGJvb2wgcmVzdWx0ID0gY29uZGl0aW9uLndhaXRGb3IoCi0gICAgICAgIGxvY2ssIHN0ZDo6
Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMDApLCBbXSAoKSAtPiBib29sIHsgcmV0dXJuIGZhbHNl
OyB9KTsKKyAgICAgICAgbG9jaywgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygxMCksIFtdICgp
IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0pOwogICAgIGxvY2sudW5sb2NrKCk7CiAKICAgICBF
WFBFQ1RfRkFMU0UocmVzdWx0KTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBtX2xvd2VyUXVldWUuY2xvc2UoKTsKLSAgICAgICAg
bV9wcm9kdWNlQ2xvc2VTZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
Om1heCgpKTsKKyAgICAgICAgbV9wcm9kdWNlQ2xvc2VTZW1hcGhvcmUud2FpdChXYWxsVGltZTo6
aW5maW5pdHkoKSk7CiAgICAgICAgIG1fcHJvZHVjZVF1ZXVlID0gbnVsbHB0cjsKICAgICB9CiAg
ICAgCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIG1fdXBwZXJRdWV1ZS5jbG9zZSgpOwotICAgICAgICBtX2NvbnN1bWVDbG9zZVNlbWFw
aG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworICAgICAgICBt
X2NvbnN1bWVDbG9zZVNlbWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKICAgICAg
ICAgbV9jb25zdW1lUXVldWUgPSBudWxscHRyOwogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293911</attachid>
            <date>2016-11-04 12:27:17 -0700</date>
            <delta_ts>2016-11-04 12:57:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>144389</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvYmFibHkg
dGhlIG5pY2VzdCBleGFtcGxlIG9mIHdoeSB0aGlzIHBhdGNoIGlzIGEgZ29vZCBpZGVhIGlzIHRo
ZSBjaGFuZ2UgaW4KKyAgICAgICAgQXRvbWljc09iamVjdC5jcHAuCisKKyAgICAgICAgKiBqaXQv
SUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQXRvbWljc09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2Fp
dCk6CisKIDIwMTYtMTEtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCBy
ZWJhc2UuLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIElDU3RhdHM6OklDU3RhdHMoKQogICAgICAgICBb
dGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yU2Vj
b25kcyhtX2xvY2ssIDEsIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxkU3RvcDsg
fSk7CisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9sb2NrLCBTZWNvbmRzKDEpLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3No
b3VsZFN0b3A7IH0pOwogICAgICAgICAgICAgICAgIGlmIChtX3Nob3VsZFN0b3ApCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsOCArMzA0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgdGltZW91dEluTmFub3NlY29uZHMgPSB0
aW1lb3V0SW5NaWxsaXNlY29uZHMgKiAxMDAwICogMTAwMDsKLQorICAgIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKKyAg
ICAKICAgICAvLyBUaGlzIGNvdmVycyB0aGUgcHJvcG9zZWQgcnVsZToKICAgICAvLwogICAgIC8v
IDQuIElmIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkIG9yIGlzIHVuZGVmaW5lZCB0aGVuIGxldCB0
IGJlICtpbmYuIE90aGVyd2lzZToKQEAgLTMxNCwzMSArMzE0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAvLwogICAgIC8vIGV4ZWMtPmFyZ3VtZW50
KDMpIHJldHVybnMgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IHByb3ZpZGVkIGFuZCBUb051bWJlcih1
bmRlZmluZWQpIHJldHVybnMgTmFOLAogICAgIC8vIHNvIE5hTiBpcyB0aGUgb25seSBzcGVjaWFs
IGNhc2UuCi0gICAgaWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID09IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKQotICAgICAgICB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHN0ZDo6bWF4KDAuLCB0aW1lb3V0
SW5OYW5vc2Vjb25kcyk7CisgICAgaWYgKHRpbWVvdXQgPT0gdGltZW91dCkKKyAgICAgICAgdGlt
ZW91dCA9IHN0ZDo6bWF4KFNlY29uZHMoMCksIHRpbWVvdXQpOwogICAgIGVsc2UKLSAgICAgICAg
dGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Ci0gICAgCi0gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgaXMgYSBwaWxlIG9mIG5vbnNl
bnNlLCBidXQgaXQncyBhbGwgbmVlZGVkIGJlY2F1c2Ugb2YgY29ybmVyIGNhc2VzCi0gICAgLy8g
aW5zaWRlIHN0ZDo6Y2hyb25vLgotICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIHN0ZDo6Y2hyb25v
LgotICAgIAotICAgIFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQ7Ci0gICAg
aWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90
OjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpjaHJv
bm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXRJbk5hbm9zZWNvbmRz
KSk7Ci0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPCBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHM6Onplcm8oKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlVGltZW91dCA+IFBhcmtpbmdMb3Q6OkNsb2Nr
OjpkdXJhdGlvbjo6bWF4KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xv
Y2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OkNsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8UGFya2luZ0xvdDo6Q2xvY2s6OmR1cmF0aW9u
PihyZWxhdGl2ZVRpbWVvdXQpOwotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgICAgICB9Ci0gICAgfQorICAgICAg
ICB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKTsKICAgICAKICAgICBib29sIGRpZFBhc3NW
YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCByZXN1bHQ7CkBA
IC0zNTEsNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
YwogICAgICAgICAgICAgICAgIHJldHVybiBkaWRQYXNzVmFsaWRhdGlvbjsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAg
ICAgICAgIE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dCk7CiAgICAgfQogICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjM5IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6
Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBv
dmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0aW1lIG1lYXN1cmVtZW50
cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAgIHNvbWV0aW1lcyBpdCB3
YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBvZiB0aW1lLCBzb21ldGlt
ZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVwb2NoLiBXaGVuIHdlIHNw
b2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEgbW9ub3RvbmljIGNsb2Nr
IG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdheXMgJ2RvdWJsZScgLSBu
ZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZlbgorICAgICAgICB0aG91
Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50ZXJ2YWwsIG1zIGludGVy
dmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMgc2luY2UgZXBvY2ggb24g
d2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2UgZXBvY2ggbW9ub3Rvbmlj
KS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRob3VnaHQgdGhhdCBpdCB3
b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJsZXMgd2l0aAorICAgICAg
ICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRoaW5ncyB3aXRoIHN0ZDo6
Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAgICBpbmNvbnZlbmllbnQ6
CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5ldmVyIHdhbnQgdG8gc2F5
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIgd2FudCB0byBzYXkKKyAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9pbnQuIFRoZSBzeW50YXgg
Zm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAgICAgICAgICBkdXJhdGlv
bl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
IG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50ZWdlcnMgYnkgZGVmYXVs
dCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNsdW1zeS4gQnV0IHRoZSBp
bnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIHJvdWdoIGVkZ2VzIG9m
IGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3ZWVuIHN0ZDo6Y2hyb25v
IHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNrcyBvdmVyZmxvdworICAg
ICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVudGx5LiBXZSBoYXZlIGV2
ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBo
YWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMgdXAgYmVpbmcgYSBzcGVj
aWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2VzLCB0aGUgb3ZlcmZsb3cg
YWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAgSXQncyBhbiBlcnJvciB0
byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQgaGF2ZSBiZWVuIGV4Y3Vz
YWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0aCB3YXMgbm90IGd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB0aGF0IHdvdWxkCisg
ICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMgYSBjb250aW51b3VzLCBp
bmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAgICAgICAgZm9yIGZsb2F0
aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBwcmVzZXJ2ZXMg
cHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQgZXh0cmVtZSBjYXNlcywg
c28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGltZSBtZWFucyB0aGF0IHVu
aXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAgICAgICAgbG9zc2xlc3Mu
IFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZlcnkgaGFyZCBhYm91dCB3
aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNoLCB3ZSB1c2Ugc2Vjb25k
cyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJvdW5kYXJpZXMsIGxpa2Ug
YW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21ldGhpbmcgb3RoZXIgdGhh
biBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBtYWtlcyBpdCBl
YXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgdGlt
ZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1wbGU6IHdoZW4gd291bGQg
eW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlzIGlzIHRoZQorICAgICAg
ICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBwb3J0IGJvdGggYSB0aW1l
b3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZhcmlhbnQuCisKKyAgICAg
ICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0aGluZ3Mgd2hlbiBtYXRo
IGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAgICAgcHJldHR5IHdlbGwg
b3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdvdWxkIGRvIHdoZW4gY29t
cHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgdXNpbmcgc2Np
ZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBzaWduaWZpY2FudAorICAg
ICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1bmRlciBmbG9hdGluZyBw
b2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAgICAgICBvdGhlciBoYW5k
LCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdlIGJlY2F1c2UgeW91IGhh
dmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxlIHBvc3NpYmxlIFVCIGNv
cm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJbnRlZ2VycyB0aGF0Cisg
ICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGxhcmdlIGFuZCB5
b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAgICAgICAgdGhlbS4gQXQg
dGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBhbSBub3QgY2VydGFpbiB0
aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhlIGNvcm5lciBjYXNlcwor
ICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1la2VlcGluZyBjbGFzc2Vz
IHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAgICBhbGwgaW50ZXJuYWxs
eSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2VicmFpYyB0eXBpbmcuIFRo
ZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25kczogdGhpcyBpcyBmb3Ig
bWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6IHRpbWUgc2luY2UgZXBv
Y2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuCisgICAg
ICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2NvcmRpbmcgdG8gYSBtb25v
dG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRoYXQgc2F5cyBlaXRoZXIg
V2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOiBh
IHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXByZXNlbnRzIGVpdGhlciBh
CisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUuCisgICAgICAgIAorICAg
ICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysgdmFsdWVzIGFuZCBhcmUg
Y2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAgICAgdmVyeSBuZWFybHkg
UE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lvbnMgYmV0d2VlbiB0aGUg
dmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMgaXMgYnkgd2F5IG9mIGFs
Z2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2UgcmVjb2duaXplOgorICAg
ICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29uZHMKKyAgICAgICAgU2Vj
b25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3RvbmljVGltZSA9IE1vbm90
b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAgICAKKyAgICAgICAgV2Ug
c3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMgYmVjYXVzZSBtYXRoLgor
ICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBiZXR3ZWVuIE1vbm90b25p
Y1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgd3Qg
PSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0
byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNsb2NrcyBhbmQgY29udmVy
dCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFueSBvZiBvdXIgQVBJcyB3
b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGltZSB0aGUgdXNlciB3YW50
ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2ggaW5jbHVkZXMgQ29uZGl0
aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS4gWW91
CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRpbWUgb3IgTW9ub3Rvbmlj
VGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhh
dCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246OndhaXRVbnRpbCwgdGhlbiBD
b25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hlbiBpdCBzaG91bGQgd2Fr
ZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgV2FsbFRpbWUgLSBi
dXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4gd2FpdFVudGlsIHdpbGwg
bWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAgICBNb25vdG9uaWNUaW1l
LiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0aGFuIGNocm9ubyBhbGxv
d2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIGEg
ZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5v
dCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8gYW5kIHRoZXNlIG5ldyB0
aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmllbmNlIHNob3dzIHRoYXQg
d2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgICBz
dGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywgSSBkaWRuJ3QgbmVlZCBz
dWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAgcGF0Y2ggb25seSBjb252
ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2luZ0xvdCBhbmQgQ29uZGl0
aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRoYXQgY29kZSBvbnRvIHRo
ZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWwp
OgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToKKyAgICAgICAgKFdURjo6
Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRV
bnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUXVl
dWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1l
LmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0Zi9NZXNzYWdlUXVldWUu
aDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1v
bm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmFwcHJveGlt
YXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNU
aW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpNb25vdG9uaWNUaW1l
KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSk6CisgICAgICAg
IChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAgKFdURjo6TW9ub3Rvbmlj
VGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjph
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoKKyAgICAgICAg
KFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAgICAgICAoV1RGOjpQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1NlY29uZHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6CisgICAgICAgIChXVEY6
OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pY3Jvc2Vj
b25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRzKToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OmZy
b21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMp
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAgICAgIChXVEY6OlNlY29u
ZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcispOgor
ICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci8pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3Bl
cmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yKj0pOgorICAgICAgICAo
V1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcj4p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
dyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVD
bG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6d2FsbFRpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25pY1RpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGlt
YXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91YmxlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VFcG9jaCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogd3RmL1dhbGxU
aW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpub3cpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2xlZXApOgorICAgICAg
ICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OldhbGxU
aW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3VibGUpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2Vjb25k
c1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVXYWxsVGlt
ZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdU
Rjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3YWl0KToKKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0xMS0wMyAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRml4ZXMgdG8gYnVpbGQg
SlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNiBAQAogCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOEIx
REM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87IH07CisJCTBGNjZCMjhE
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07CisJCTBGNjZCMjhGMURD
OTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICov
OyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICov
OyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi87IH07
CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICovOyB9OwogCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNl
dC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZC
NTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJMEY0M0Q4RjAxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9ja1R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ub3Rv
bmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgzMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NzFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FsbFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FsbFRpbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4ODVDRjIwMDQ0RjVFMiAv
KiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJv
b2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNw
cCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJ
CQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAogCQkJCTBG
OEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCkBAIC05
NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0
b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5o
ICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAgLTEwMDcsNiArMTAzMSw4
IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVD
ODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCisJCQkJMEY2NkIyODQx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBGNjZCMjg1MURDOTdCQUIw
MDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJMEY2NkIyODYxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovLAogCQkJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLywKIAkJCQkwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZC
QkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2ICsxMDgyLDggQEAKIAkJ
CQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0Yg
LyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxs
VGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8s
CiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLApAQCAtMTI1OSw3ICsx
Mjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVC
MDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4
QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNDAsNiAr
MTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlCIC8qIExpc3REdW1wLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAKIAkJCQkxNEYzQjBGNzE1
RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiArMTUwMCw3IEBACiAJCQkJ
RTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJQThBNDczQUExNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDUxMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09i
akNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAwNDEy
M0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2MDE1MUE4
MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY0
MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIy
OTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBACiAJCQkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOEYxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFy
dChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChs
b2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09
IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2h1dCB0aGUg
dGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Ns
b2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2NrLCBTZWNvbmRzKDEpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3RpZnkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2luZyB0byBzbGVlcCFcbiIp
OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAtNjQsNiArNjUsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5vbmNv
cHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xMDEs
NiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBTZWNvbmRzLmgKICAgICBT
ZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCkBA
IC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBVbmlxdWVSZWYuaAogICAg
IFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVmVjdG9y
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaAorICAgIFdhbGxUaW1l
LmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29ya1F1ZXVlLmgKQEAgLTE3
Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNzLmNwcAogICAgIEF1dG9t
YXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCiAgICAgTWV0YUFsbG9j
YXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJlck9mQ29yZXMuY3BwCiAg
ICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApAQCAtMjA3LDEyICsyMTQs
MTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAogICAg
IFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNwcAogICAgIFNpeENoYXJh
Y3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKICAg
ICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV2FsbFRpbWUu
Y3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xv
Y2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENs
b2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rvbmlj
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBXVEZfQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX0Nsb2NrVHlwZV9oCisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKworZW51bSBjbGFzcyBDbG9j
a1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tUeXBlKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCisjZW5kaWYgLy8gV1RGX0Ns
b2NrVHlwZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZu
ZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUg
PGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5n
TG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlz
IGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQg
aXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5j
ZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5n
TG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRv
IHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5s
aWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJl
dHRlciB0byB1c2UgTW9ub3RvbmljVGltZS4KKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUg
VGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNp
bmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAg
ICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlm
IHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVj
dCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sg
Zm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBP
cGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9j
aywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlw
ZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsK
ICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygp
KSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsK
ICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ug
ewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJl
dHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0
dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBD
bG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAg
Ym9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7
CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVu
dGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlv
bkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlz
ZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8v
IE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdh
aXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0
aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYg
bG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRp
dmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRp
bChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRl
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9v
bCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7
CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyBy
ZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRp
bChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9j
aywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25k
aXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVu
dGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChs
b2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50
aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0
U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywg
YWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xv
Y2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVU
aW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0g
ICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGlt
ZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRv
dWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMg
KiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJl
bGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFu
ZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5s
b2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3Qg
YmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAg
IC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBw
cmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25v
OjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vj
b25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwg
cHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0
cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0
byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMg
dHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9u
ZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAg
ICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9v
bCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVv
dXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNv
bmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjAp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAw
KSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwg
YXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9j
aygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0
aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQg
aW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2
ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAg
ICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxh
dGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChs
b2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwo
TG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShy
ZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlv
blR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3Qg
RHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRp
dmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xv
Y2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBD
bG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1
bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1
bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5z
aWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBi
ZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAg
ICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAg
ICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGlt
ZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0
OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAK
IGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRR
dWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8
RGF0YVR5cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGlt
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0
aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAg
ICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVl
dWUudGFrZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0
IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KQEAgLTM0
MCw3ICszNDAsNyBAQCB2b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2Nr
OwogICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7Ci0gICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1Nl
Y29uZHMoZmFrZUxvY2ssIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOwor
ICAgIGZha2VDb25kaXRpb24ud2FpdEZvcihmYWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAy
MDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1l
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxs
ZWQoKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUp
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVy
ZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIFdhbGxU
aW1lIGFic29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRl
PgogICAgICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYmKTsKQEAgLTc2LDggKzc3LDYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgaXNFbXB0eSgpIGlzIG9u
bHkgdmFsaWQgaWYgbm8gb3RoZXIgdGhyZWFkIGlzIG1hbmlwdWxhdGluZyB0aGUgcXVldWUgYXQg
dGhlIHNhbWUgdGltZS4KICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICAgICAgc3RhdGlj
IGRvdWJsZSBpbmZpbml0ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46Om1heCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRl
eDsKICAgICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwpAQCAtMTMwLDE0ICsxMjksMTQgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6
d2FpdEZvck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAg
ICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb247IAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGlt
ZW91dChleGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIGlu
ZmluaXRlVGltZSgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiByZXN1bHQg
PSB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10oY29uc3Qg
RGF0YVR5cGUmKSB7IHJldHVybiB0cnVlOyB9LCBXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
ICAgIEFTU0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJl
YXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0
YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2Fp
dFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdl
UXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2Fn
ZVF1ZXVlV2FpdFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFdhbGxUaW1l
IGFic29sdXRlVGltZSkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFs
c2U7CkBAIC0xNTEsMTAgKzE1MCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlm
IChmb3VuZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRz
KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRp
dGlvbi53YWl0VW50aWwobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsK
KyAgICAgICAgQVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogCiAgICAgICAgIGlmIChtX2tpbGxlZCkgewogICAgICAgICAgICAgcmVzdWx0
ID0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01vbm90b25p
Y1RpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vbm90b25p
Y1RpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJl
YW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJX
YWxsVGltZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworTW9ub3RvbmljVGltZSBNb25vdG9uaWNU
aW1lOjpub3coKQoreworICAgIE1vbm90b25pY1RpbWUgcmVzdWx0OworICAgIHJlc3VsdC5tX3Zh
bHVlID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2FsbFRpbWUgTW9ub3RvbmljVGltZTo6YXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBXYWxsVGltZTo6bm93KCk7Cit9CisKK3Zv
aWQgTW9ub3RvbmljVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiTW9ub3RvbmljKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit2b2lkIE1vbm90
b25pY1RpbWU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUo
KnRoaXMpLnNsZWVwKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL01vbm90b25pY1RpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9N
b25vdG9uaWNUaW1lLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTW9ub3Rvbmlj
VGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX01vbm90b25pY1RpbWVf
aAorI2RlZmluZSBXVEZfTW9ub3RvbmljVGltZV9oCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBl
Lmg+CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFdhbGxUaW1lOworY2xhc3MgUHJpbnRTdHJlYW07CisKKy8vIFRoZSBjdXJyZW50IHRpbWUgYWNj
b3JkaW5nIHRvIGEgbW9ub3RvbmljIGNsb2NrLiBNb25vdG9uaWMgY2xvY2tzIGRvbid0IGdvIGJh
Y2t3YXJkcyBhbmQKKy8vIHBvc3NpYmx5IGRvbid0IGNvdW50IGRvd250aW1lLiBUaGlzIHVzZXMg
ZmxvYXRpbmcgcG9pbnQgaW50ZXJuYWxseSBzbyB0aGF0IHlvdSBjYW4gcmVhc29uIGFib3V0Cisv
LyBpbmZpbml0eSBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgYXJpc2UgaW4gbWF0aC4gSXQncyBhY2Nl
cHRhYmxlIHRvIHVzZSB0aGlzIHRvIHdyYXAgTmFOIHRpbWVzLAorLy8gbmVnYXRpdmUgdGltZXMs
IGFuZCBpbmZpbml0ZSB0aW1lcywgc28gbG9uZyBhcyB0aGV5IGFyZSBhbGwgcmVsYXRpdmUgdG8g
dGhlIHNhbWUgY2xvY2suCisvLyBTcGVjaWZpY2FsbHksIE1vbm90b25pY1RpbWUgc2hvdWxkIGJl
IHVzZWQgaW4gYWdyZWVtZW50IHdpdGggdGhlIHByaW5jaXBsZSB0aGF0CisvLyBNb25vdG9uaWNU
aW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgaXMgdGhlIHNhbWUgYXMKKy8v
IFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkuCitjbGFzcyBNb25vdG9uaWNUaW1l
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgQ2xvY2tUeXBlIGNsb2NrVHlwZSA9IENsb2Nr
VHlwZTo6TW9ub3RvbmljOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGVwb2NoLiBTbywgeC5z
ZWNvbmRzU2luY2VFcG9jaCgpIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB4IC0gTW9ub3RvbmljVGlt
ZSgpLgorICAgIE1vbm90b25pY1RpbWUoKSB7IH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYg
eW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgZG91YmxlIHJlcHJlc2VudHMgdGltZSBhY2NvcmRp
bmcgdG8KKyAgICAvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLiBJdCBtdXN0
IGJlIGluIHNlY29uZHMgYW5kIGl0IG11c3QgYmUgZnJvbSB0aGUgc2FtZSB0aW1lCisgICAgLy8g
c291cmNlLgorICAgIHN0YXRpYyBNb25vdG9uaWNUaW1lIGZyb21SYXdEb3VibGUoZG91YmxlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgTW9ub3RvbmljVGltZSBub3coKTsKKyAgICAK
KyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBpbmZpbml0eSgpIHsgcmV0dXJuIGZyb21SYXdEb3Vi
bGUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsgfQorCisgICAgU2Vj
b25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7
IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNv
bnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIGFw
cHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgTW9ub3RvbmljVGlt
ZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBm
cm9tUmF3RG91YmxlKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAg
TW9ub3RvbmljVGltZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBmcm9tUmF3RG91YmxlKG1fdmFsdWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNjYWxhciBhbmQgc2NhbGFycyBjYW4gYmUgbmVnYXRl
ZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20gYWxnZWJyYWljCisgICAgLy8gdHJhbnNmb3JtYXRp
b25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvci0oKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUoLW1fdmFsdWUpOworICAgIH0K
KyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7
CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAg
IE1vbm90b25pY1RpbWUgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBv
cGVyYXRvci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yIT0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I8KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KE1v
bm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShNb25vdG9u
aWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE1vbm90b25pY1Rp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xl
ZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1vbm90b25pY1RpbWU7CisKKyNlbmRp
ZiAvLyBXVEZfTW9ub3RvbmljVGltZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogCiAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyOwogICAgIAotICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7Ci0gICAgc3Rk
Ojpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKyAgICBNdXRleCBwYXJraW5n
TG9jazsKKyAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKIAogICAgIGNvbnN0
IHZvaWQqIGFkZHJlc3MgeyBudWxscHRyIH07CiAgICAgCkBAIC01NjQsNyArNTY0LDcgQEAgTkVW
RVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFyawogICAgIGNvbnN0IHZvaWQqIGFk
ZHJlc3MsCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2woKT4mIHZhbGlkYXRpb24sCiAgICAg
Y29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNsZWVwLAotICAgIENsb2NrOjp0aW1l
X3BvaW50IHRpbWVvdXQpCisgICAgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1l
b3V0KQogewogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIpKTsKQEAgLTU5MiwyMCArNTkyLDE3IEBAIE5FVkVS
X0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsKICAgICAKICAgICBib29sIGRpZEdl
dERlcXVldWVkOwogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBs
b2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzICYmIENs
b2NrOjpub3coKSA8IHRpbWVvdXQpIHsKLSAgICAgICAgICAgIC8vIEZhbGxpbmcgYmFjayB0byB3
YWl0KCkgd29ya3MgYXJvdW5kIGEgYnVnIGluIGxpYnN0ZGMrKyBpbXBsZW1lbnRhdGlvbiBvZiBz
dGQ6OmNvbmRpdGlvbl92YXJpYWJsZS4gU2VlOgotICAgICAgICAgICAgLy8gLSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MDI3Ci0gICAgICAgICAgICAvLyAtIGh0
dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU4OTMxCi0gICAgICAg
ICAgICBpZiAodGltZW91dCA9PSBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpCi0gICAgICAgICAg
ICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXRfdW50aWwobG9ja2Vy
LCB0aW1lb3V0KTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7
CisgICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcyAmJiB0aW1lb3V0Lm5vd1dpdGhTYW1lQ2xvY2so
KSA8IHRpbWVvdXQpIHsKKyAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLnRpbWVkV2Fp
dCgKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2ssIHRpbWVvdXQuYXBwcm94aW1hdGVX
YWxsVGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIGFib3ZlLCB3ZSBkbyB0aGlzIHRoaW5nLCB3aGlj
aCBpcyBoaWxhcmlvdXNseSBhd2Z1bCwgYnV0IGVuc3VyZXMgdGhhdCB0aGUgd29yc3QgY2FzZSBp
cwotICAgICAgICAgICAgLy8gYSBDUFUtZWF0aW5nIHNwaW4gYnV0IG5vdCBhIGRlYWRsb2NrLgot
ICAgICAgICAgICAgbG9ja2VyLnVubG9jaygpOwotICAgICAgICAgICAgbG9ja2VyLmxvY2soKTsK
KyAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIHRoZSBPUyB0byBkZWNpZGUgbm90IHRv
IHdhaXQuIElmIGl0IGRvZXMgdGhhdCB0aGVuIGl0IHdpbGwgYWxzbworICAgICAgICAgICAgLy8g
ZGVjaWRlIG5vdCB0byByZWxlYXNlIHRoZSBsb2NrLiBJZiB0aGVyZSdzIGEgYnVnIGluIHRoZSB0
aW1lIG1hdGgsIHRoZW4gdGhpcyBjb3VsZAorICAgICAgICAgICAgLy8gcmVzdWx0IGluIGEgZGVh
ZGxvY2suIEZsYXNoaW5nIHRoZSBsb2NrIG1lYW5zIHRoYXQgYXQgd29yc3QgaXQncyBqdXN0IGEg
Q1BVLWVhdGluZworICAgICAgICAgICAgLy8gc3Bpbi4KKyAgICAgICAgICAgIG1lLT5wYXJraW5n
TG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1lLT5wYXJraW5nTG9jay5sb2NrKCk7CiAgICAg
ICAgIH0KICAgICAgICAgQVNTRVJUKCFtZS0+YWRkcmVzcyB8fCBtZS0+YWRkcmVzcyA9PSBhZGRy
ZXNzKTsKICAgICAgICAgZGlkR2V0RGVxdWV1ZWQgPSAhbWUtPmFkZHJlc3M7CkBAIC02NDAsMTQg
KzYzNywxNCBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAKICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBubyBtYXR0ZXIgd2hhdCwgbWUtPmFkZHJlc3MgaXMgbnVsbCBh
ZnRlciB0aGlzIHBvaW50LgogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIGlmICghZGlkRGVxdWV1ZSkgewogICAgICAgICAg
ICAgLy8gSWYgd2UgZGlkIG5vdCBkZXF1ZXVlIG91cnNlbHZlcywgdGhlbiBzb21lb25lIGVsc2Ug
ZGlkLiBUaGV5IHdpbGwgc2V0IG91ciBhZGRyZXNzIHRvCiAgICAgICAgICAgICAvLyBudWxsLiBX
ZSBkb24ndCB3YW50IHRvIHByb2NlZWQgdW50aWwgdGhleSBkbyB0aGlzLCBiZWNhdXNlIG90aGVy
d2lzZSwgdGhleSBtYXkgc2V0CiAgICAgICAgICAgICAvLyBvdXIgYWRkcmVzcyB0byBudWxsIGlu
IHNvbWUgZGlzdGFudCBmdXR1cmUgd2hlbiB3ZSdyZSBhbHJlYWR5IHRyeWluZyB0byB3YWl0IGZv
cgogICAgICAgICAgICAgLy8gb3RoZXIgdGhpbmdzLgogICAgICAgICAgICAgd2hpbGUgKG1lLT5h
ZGRyZXNzKQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2Vy
KTsKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KG1lLT5wYXJraW5n
TG9jayk7CiAgICAgICAgIH0KICAgICAgICAgbWUtPmFkZHJlc3MgPSBudWxscHRyOwogICAgIH0K
QEAgLTY5NSwxMSArNjkyLDExIEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpVbnBhcmtSZXN1
bHQgUGEKICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgCiAgICAgewotICAg
ICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJr
aW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5n
TG9jayk7CiAgICAgICAgIHRocmVhZERhdGEtPmFkZHJlc3MgPSBudWxscHRyOwogICAgICAgICB0
aHJlYWREYXRhLT50b2tlbiA9IDA7CiAgICAgfQotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25k
aXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2ln
bmFsKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzQxLDExICs3MzgsMTEgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrT25lSQogICAgIEFTU0VSVCh0aHJlYWRE
YXRhLT5hZGRyZXNzKTsKICAgICAKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3Rk
OjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKICAgICAgICAgdGhyZWFkRGF0
YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgfQogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSB0
aHJlYWREYXRhIG1heSBkaWUuIEdvb2QgdGhpbmcgd2UgaGF2ZSBhIFJlZlB0cjw+IG9uIGl0Lgot
ICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVh
ZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiB9CiAKIE5FVkVSX0lOTElORSB1bnNp
Z25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2b2lkKiBhZGRyZXNzLCB1bnNpZ25l
ZCBjb3VudCkKQEAgLTc3OSwxMCArNzc2LDEwIEBAIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJr
aW5nTG90Ojp1bnBhcmsKICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVh
ZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLmdldCgpKSwgIiB3aXRo
IGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwogICAg
ICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdM
b2NrKTsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5n
TG9jayk7CiAgICAgICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsKICAgICAg
ICAgfQotICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsK
KyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAK
ICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHJldmlzaW9uIDIwODM1OCkK
KysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEg
KzI2LDExIEBACiAjaWZuZGVmIFdURl9QYXJraW5nTG90X2gKICNkZWZpbmUgV1RGX1BhcmtpbmdM
b3RfaAogCi0jaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVk
ZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5LDcgKzM5LDE1IEBAIGNsYXNzIFBhcmtp
bmdMb3QgewogICAgIFBhcmtpbmdMb3QoY29uc3QgUGFya2luZ0xvdCYpID0gZGVsZXRlOwogCiBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrIENsb2NrOworICAg
IC8vIFBhcmtpbmdMb3Qgd2lsbCBhY2NlcHQgYW55IGtpbmQgb2YgdGltZSBhbmQgY29udmVydCBp
dCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxzCisgICAgLy8geW91IHdoYXQga2lu
ZCBvZiB0aW1lIFBhcmtpbmdMb3Qgd291bGQgYmUgYWJsZSB0byB1c2Ugd2l0aG91dCBjb252ZXJz
aW9ucy4gSXQncyBzYWQgdGhhdAorICAgIC8vIHRoaXMgaXMgV2FsbFRpbWUgbm90IE1vbm90b25p
Y1RpbWUsIGJ1dCB0aGF0J3MganVzdCBob3cgT1Mgd2FpdCBmdW5jdGlvbnMgd29yay4gSG93ZXZl
ciwKKyAgICAvLyBiZWNhdXNlIFBhcmtpbmdMb3QgZXZhbHVhdGVzIHdoZXRoZXIgaXQgc2hvdWxk
IHdhaXQgYnkgY2hlY2tpbmcgaWYgeW91ciB0aW1lIGhhcyBwYXNzZWQKKyAgICAvLyB1c2luZyB3
aGF0ZXZlciBjbG9jayB5b3UgdXNlZCwgc3BlY2lmeWluZyB0aW1lb3V0cyBpbiBNb25vdG9uaWNU
aW1lIGlzIHNlbWFudGljYWxseSBiZXR0ZXIuCisgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSB1
c2VyIHNldHMgaGlzIGNvbXB1dGVyJ3MgY2xvY2sgYmFjayBkdXJpbmcgdGhlIHRpbWUgdGhhdCB5
b3Ugd2FudGVkIHRvCisgICAgLy8gd2FpdCBmb3Igb25lIHNlY29uZCwgYW5kIHlvdSBzcGVjaWZp
ZWQgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIE1vbm90b25pY1RpbWUsIHRoZW4gUGFya2luZ0xvdAor
ICAgIC8vIHdpbGwgYmUgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCB5b3VyIG9uZSBzZWNvbmQg
aGFzIGVsYXBzZWQuCisgICAgdHlwZWRlZiBXYWxsVGltZSBUaW1lOwogICAgIAogICAgIC8vIFBh
cmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJl
c3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLiBUaGUKICAgICAvLyBwYXJraW5nIG9ubHkgc3VjY2Vl
ZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoaWxlIHRoZSBxdWV1
ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3Qg
dm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3QgVmFsaWRhdGlvbkZ1bmN0b3ImIHZhbGlkYXRp
b24sCiAgICAgICAgIGNvbnN0IEJlZm9yZVNsZWVwRnVuY3RvciYgYmVmb3JlU2xlZXAsCi0gICAg
ICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgICAgIGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKICAgICB7CiAgICAgICAgIHJldHVybiBwYXJrQ29uZGl0
aW9uYWxseUltcGwoCiAgICAgICAgICAgICBhZGRyZXNzLApAQCAtODksNyArOTcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IGV4cGVjdGVkOwogICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgIFtdICgpIHsgfSwKLSAgICAgICAgICAgIENsb2NrOjp0aW1lX3Bv
aW50OjptYXgoKSk7CisgICAgICAgICAgICBUaW1lOjppbmZpbml0eSgpKTsKICAgICB9CiAKICAg
ICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdpdmVuIHRvIHlvdSBhbnl0aW1lIHlvdSB1bnBhcmtPbmUo
KS4KQEAgLTE1OCw3ICsxNjYsNyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCB2b2lkKiBhZGRy
ZXNzLAogICAgICAgICBjb25zdCBTY29wZWRMYW1iZGE8Ym9vbCgpPiYgdmFsaWRhdGlvbiwKICAg
ICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNsZWVwLAotICAgICAgICBD
bG9jazo6dGltZV9wb2ludCB0aW1lb3V0KTsKKyAgICAgICAgY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJiB0aW1lb3V0KTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3Qg
U2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+JiBjYWxsYmFjayk7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
ZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWNv
bmRzLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgIk1vbm90b25pY1Rp
bWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxUaW1lLmgiCisKK25hbWVzcGFjZSBXVEYgewor
CitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvcisoV2FsbFRpbWUgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3Bl
cmF0b3IrKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsg
KnRoaXM7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBTZWNvbmRzOjpvcGVyYXRvciso
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gb3RoZXIgKyAqdGhpczsKK30KKworV2FsbFRpbWUgU2Vjb25kczo6b3BlcmF0b3ItKFdhbGxU
aW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd0RvdWJsZSh2
YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKK30KKworTW9ub3Rv
bmljVGltZSBTZWNvbmRzOjpvcGVyYXRvci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSh2YWx1ZSgpIC0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKK30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlIFNlY29uZHM6Om9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiBvdGhlci53aXRoU2FtZUNsb2NrQW5kUmF3RG91Ymxl
KHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQorCit2b2lk
IFNlY29uZHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
bV92YWx1ZSwgIiBzZWMiKTsKK30KKwordm9pZCBTZWNvbmRzOjpzbGVlcCgpIGNvbnN0Cit7Cisg
ICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
ZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU2Vjb25kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgTW9ub3RvbmljVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworY2xhc3MgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlOworY2xhc3MgV2FsbFRpbWU7CisKK2NsYXNzIFNlY29uZHMgeworcHVibGlj
OgorICAgIFNlY29uZHMoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBjb25zdGV4cHIgU2Vjb25k
cyhkb3VibGUgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAK
KyAgICBkb3VibGUgc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBkb3Vi
bGUgbWlsbGlzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gc2Vjb25kcygpICogMTAwMDsgfQorICAg
IGRvdWJsZSBtaWNyb3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWxsaXNlY29uZHMoKSAqIDEw
MDA7IH0KKyAgICBkb3VibGUgbmFub3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWNyb3NlY29u
ZHMoKSAqIDEwMDA7IH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZnJvbU1p
bGxpc2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2
YWx1ZSAvIDEwMDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMg
ZnJvbU1pY3Jvc2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gZnJv
bU1pbGxpc2Vjb25kcyh2YWx1ZSAvIDEwMDApOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29u
c3RleHByIFNlY29uZHMgZnJvbU5hbm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmcm9tTWljcm9zZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBpbmZpbml0eSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gU2Vjb25kcyhzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOwor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX3ZhbHVlOyB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgKyBvdGhlci52YWx1
ZSgpKTsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgLSBvdGhlci52YWx1
ZSgpKTsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFNlY29uZHMoLXZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBJ
dCBtYWtlcyBzZW5zZSB0byBjb25zaWRlciBzY2FsaW5nIGEgZHVyYXRpb24sIGxpa2UsICJJIHdh
bnQgdG8gd2FpdCA1IHRpbWVzIGFzIGxvbmcgYXMKKyAgICAvLyBsYXN0IHRpbWUhIi4KKyAgICBT
ZWNvbmRzIG9wZXJhdG9yKihkb3VibGUgc2NhbGFyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFNlY29uZHModmFsdWUoKSAqIHNjYWxhcik7CisgICAgfQorICAgIAorICAgIFNlY29uZHMg
b3BlcmF0b3IvKGRvdWJsZSBzY2FsYXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vj
b25kcyh2YWx1ZSgpIC8gc2NhbGFyKTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyByZWFzb25h
YmxlIHRvIHRoaW5rIGFib3V0IHJhdGlvcyBiZXR3ZWVuIFNlY29uZHMuCisgICAgZG91YmxlIG9w
ZXJhdG9yLyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
KCkgLyBvdGhlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvcis9
KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90
aGVyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICAgIH0KKyAg
ICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvcio9KGRvdWJsZSBzY2FsYXIpCisgICAgeworICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyAqIHNjYWxhcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25k
cyYgb3BlcmF0b3IvPShkb3VibGUgc2NhbGFyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlz
ID0gKnRoaXMgLyBzY2FsYXI7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBX
YWxsVGltZSBvcGVyYXRvcisoV2FsbFRpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKyhNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKyhjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgV2FsbFRpbWUgb3BlcmF0b3ItKFdhbGxUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgTW9ub3RvbmljVGltZSBvcGVyYXRvci0oTW9ub3RvbmljVGltZSkgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0o
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0o
U2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90
aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFNlY29uZHMgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KFNlY29uZHMgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I8PShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj49KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZG91Ymxl
IG1fdmFsdWUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFlIFdURgorCit1c2luZyBXVEY6OlNl
Y29uZHM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKKyNpbmNsdWRlICJDb25kaXRpb24u
aCIKKyNpbmNsdWRlICJMb2NrLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKworbmFtZXNw
YWNlIFdURiB7CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGU6Om5vdyhDbG9ja1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIENsb2NrVHlwZTo6V2FsbDoKKyAgICAgICAgcmV0dXJuIFdhbGxUaW1lOjpub3coKTsKKyAg
ICBjYXNlIENsb2NrVHlwZTo6TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgpOworfQorCitUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpub3dXaXRoU2FtZUNsb2NrKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbm93KGNsb2NrVHlwZSgpKTsKK30KKworV2FsbFRpbWUgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlOjp3YWxsVGltZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV90eXBlID09IENsb2NrVHlwZTo6V2FsbCk7CisgICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9t
UmF3RG91YmxlKG1fdmFsdWUpOworfQorCitNb25vdG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZTo6bW9ub3RvbmljVGltZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90
eXBlID09IENsb2NrVHlwZTo6TW9ub3RvbmljKTsKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6
ZnJvbVJhd0RvdWJsZShtX3ZhbHVlKTsKK30KKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlOjphcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlw
ZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUo
KTsKKyAgICBjYXNlIENsb2NrVHlwZTo6TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gbW9ub3Rv
bmljVGltZSgpLmFwcHJveGltYXRlV2FsbFRpbWUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV2FsbFRpbWUoKTsKK30KKworTW9ub3Rvbmlj
VGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2Fs
bDoKKyAgICAgICAgcmV0dXJuIHdhbGxUaW1lKCkuYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCk7
CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25p
Y1RpbWUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gTW9ub3RvbmljVGltZSgpOworfQorCitTZWNvbmRzIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZTo6b3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAg
cmV0dXJuIFNlY29uZHMobV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOworfQorCitib29sIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVy
Lm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworfQorCitib29s
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09
IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworfQor
Citib29sIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8PShjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVlIDw9IG90aGVyLm1fdmFs
dWU7Cit9CisKK2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcj49KGNvbnN0
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3Ro
ZXIubV92YWx1ZTsKK30KKwordm9pZCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiKCIsIG1fdmFs
dWUsICIgc2VjKSIpOworfQorCit2b2lkIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXAo
KSBjb25zdAoreworICAgIExvY2sgZmFrZUxvY2s7CisgICAgQ29uZGl0aW9uIGZha2VDb25kaXRp
b247CisgICAgTG9ja0hvbGRlciBmYWtlTG9ja2VyKGZha2VMb2NrKTsKKyAgICBmYWtlQ29uZGl0
aW9uLndhaXRVbnRpbChmYWtlTG9jaywgKnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGVfaAorI2RlZmluZSBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gKKworI2luY2x1ZGUg
PHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9XYWxsVGltZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJl
YW07CisKK2NsYXNzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSB7CitwdWJsaWM6CisgICAgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlKCkgeyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlKFdhbGxUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1ZSh0aW1lLnNlY29uZHNTaW5j
ZUVwb2NoKCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5cGUoQ2xvY2tUeXBlOjpXYWxsKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKE1vbm90b25pY1Rp
bWUgdGltZSkKKyAgICAgICAgOiBtX3ZhbHVlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKQorICAgICAgICAsIG1fdHlwZShDbG9ja1R5cGU6Ok1vbm90b25pYykKKyAgICB7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgZnJvbVJhd0RvdWJs
ZShkb3VibGUgdmFsdWUsIENsb2NrVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IHR5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVy
biBTZWNvbmRzKG1fdmFsdWUpOyB9CisgICAgQ2xvY2tUeXBlIGNsb2NrVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG5vdyhDbG9ja1R5cGUpOworICAgIAorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93V2l0aFNhbWVDbG9jaygpIGNv
bnN0OworICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSB3aXRoU2FtZUNsb2NrQW5k
UmF3RG91YmxlKGRvdWJsZSB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU6OmZyb21SYXdEb3VibGUodmFsdWUsIGNsb2NrVHlwZSgpKTsK
KyAgICB9CisgICAgCisgICAgLy8gQXNzZXJ0cyB0aGF0IHRoZSB0aW1lIGlzIG9mIHRoZSB0eXBl
IHlvdSB3YW50LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSB3YWxsVGltZSgpIGNv
bnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIG1vbm90b25pY1RpbWUo
KSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgYXBwcm94aW1h
dGVXYWxsVGltZSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1l
IGFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd0RvdWJsZShtX3ZhbHVlICsgb3Ro
ZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBv
cGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRo
U2FtZUNsb2NrQW5kUmF3RG91YmxlKG1fdmFsdWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGltZSBpcyBhIHNjYWxhciBhbmQgc2NhbGFycyBjYW4gYmUgbmVnYXRlZCBh
cyB0aGlzIGNvdWxkIGFyaXNlIGZyb20gYWxnZWJyYWljCisgICAgLy8gdHJhbnNmb3JtYXRpb25z
LiBTbywgd2UgYWxsb3cgaXQuCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9y
LSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd0RvdWJs
ZSgtbV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBv
cGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAq
dGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUg
b3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0g
KnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFNlY29u
ZHMgb3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAg
IAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1
ZQorICAgICAgICAgICAgJiYgbV90eXBlID09IG90aGVyLm1fdHlwZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
ICAgIAorICAgIC8vIFRvIGRvIHJlbGF0aXZlIGNvbXBhcmlzb25zLCB5b3UgbXVzdCBiZSB1c2lu
ZyB0aW1lcyB3aXRoIHRoZSBzYW1lIGNsb2NrIHR5cGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIG9wZXJhdG9yPj0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07CisgICAgQ2xvY2tU
eXBlIG1fdHlwZSB7IENsb2NrVHlwZTo6V2FsbCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOworCisjZW5kaWYgLy8gV1RG
X1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGlt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYWxsVGltZS5oIgorCisjaW5jbHVk
ZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisjaW5jbHVkZSAi
UHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKK1dhbGxUaW1lIFdhbGxUaW1lOjpub3coKQoreworICAgIFdhbGxU
aW1lIHJlc3VsdDsKKyAgICByZXN1bHQubV92YWx1ZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworTW9ub3RvbmljVGltZSBXYWxsVGltZTo6YXBwcm94aW1hdGVNb25v
dG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIE1vbm90b25p
Y1RpbWU6Om5vdygpOworfQorCit2b2lkIFdhbGxUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJXYWxsKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQor
Cit2b2lkIFdhbGxUaW1lOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1dhbGxUaW1lLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvV2FsbFRpbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9XYWxsVGltZV9oCisjZGVmaW5lIFdU
Rl9XYWxsVGltZV9oCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+CisjaW5jbHVkZSA8d3Rm
L1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1vbm90b25pY1RpbWU7Citj
bGFzcyBQcmludFN0cmVhbTsKKworLy8gVGhlIGN1cnJlbnQgdGltZSBhY2NvcmRpbmcgdG8gYSB3
YWxsIGNsb2NrIChha2EgcmVhbCB0aW1lIGNsb2NrKS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50
CisvLyBpbnRlcm5hbGx5IHNvIHRoYXQgeW91IGNhbiByZWFzb24gYWJvdXQgaW5maW5pdHkgYW5k
IG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0J3MKKy8vIGFjY2VwdGFibGUgdG8g
dXNlIHRoaXMgdG8gd3JhcCBOYU4gdGltZXMsIG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUg
dGltZXMsIHNvIGxvbmcgYXMgdGhleQorLy8gYXJlIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2Nr
LiBTcGVjaWZpY2FsbHksIFdhbGxUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRo
IHRoZQorLy8gcHJpbmNpcGxlIHRoYXQgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSBpcyB0aGUgc2FtZSBhcyBXVEY6OmN1cnJlbnRUaW1lKCkuCitjbGFzcyBXYWxs
VGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBjbG9ja1R5cGUgPSBD
bG9ja1R5cGU6OldhbGw7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgZXBvY2guIFNvLCB4LnNl
Y29uZHNTaW5jZUVwb2NoKCkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHggLSBXYWxsVGltZSgpLgor
ICAgIFdhbGxUaW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IGZv
ciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUgYWNjb3JkaW5nIHRvCisgICAg
Ly8gV1RGOjpjdXJyZW50VGltZSgpLiBJdCBtdXN0IGJlIGluIHNlY29uZHMgYW5kIGl0IG11c3Qg
YmUgZnJvbSB0aGUgc2FtZSB0aW1lIHNvdXJjZS4KKyAgICBzdGF0aWMgV2FsbFRpbWUgZnJvbVJh
d0RvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBXYWxsVGltZSByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2FsbFRpbWUgbm93KCk7
CisgICAgCisgICAgc3RhdGljIFdhbGxUaW1lIGluZmluaXR5KCkgeyByZXR1cm4gZnJvbVJhd0Rv
dWJsZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisgICAgCisg
ICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92
YWx1ZSk7IH0KKyAgICAKKyAgICBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBh
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgV2FsbFRp
bWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbVJhd0RvdWJsZShtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAg
IFdhbGxUaW1lIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZyb21SYXdEb3VibGUobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAg
ICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFz
IHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMu
IFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBXYWxsVGltZSBvcGVyYXRvci0oKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZyb21SYXdEb3VibGUoLW1fdmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBXYWxsVGltZSYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV2FsbFRpbWUmIG9w
ZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0
aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3ItKFdhbGxUaW1l
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAtIG90
aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oV2FsbFRpbWUg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oV2FsbFRpbWUgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcj4oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I8PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+PShX
YWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90
aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2FsbFRpbWU7CisKKyNlbmRp
ZiAvLyBXVEZfV2FsbFRpbWVfaApJbmRleDogU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlT
ZW1hcGhvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5
U2VtYXBob3JlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhyZWFk
cy9CaW5hcnlTZW1hcGhvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxMyArNDUsMTQgQEAgdm9p
ZCBCaW5hcnlTZW1hcGhvcmU6OnNpZ25hbCgpCiAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7CiB9
CiAKLWJvb2wgQmluYXJ5U2VtYXBob3JlOjp3YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCitib29s
IEJpbmFyeVNlbWFwaG9yZTo6d2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgYWJzb2x1dGVU
aW1lKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKIAogICAgIGJvb2wgdGlt
ZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAoIW1faXNTZXQpIHsKLSAgICAgICAgdGltZWRPdXQg
PSAhbV9jb25kaXRpb24udGltZWRXYWl0KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAg
IHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgIG1fbXV0ZXgs
IGFic29sdXRlVGltZS5hcHByb3hpbWF0ZVdhbGxUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpKTsKICAgICAgICAgaWYgKHRpbWVkT3V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBC
aW5hcnlTZW1hcGhvcmVfaAogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzksNyArNDAsNyBAQCBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5CaW5hcnlTZW1hcGhvcmUoKTsKIAogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNpZ25hbCgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIHdhaXQoZG91YmxlIGFic29sdXRlVGltZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgd2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUpOwogCiBwcml2YXRlOgogICAgIGJvb2wg
bV9pc1NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE2LTExLTA0
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5n
TG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1
cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLiBJIHdpbGwg
d3JpdGUgdW5pdCB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OmJsb2JTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRUaW1lci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1RocmVhZFRpbWVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRUaW1lcnM6OnVwZGF0
ZVNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9NYWluVGhyZWFkU2hhcmVkVGlt
ZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZp
cmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1l
ckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZp
cmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGlt
ZXJHTGliLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0
RmlyZUludGVydmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTWFpblRocmVhZFNoYXJlZFRp
bWVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0
RmlyZUludGVydmFsKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cnVuSW5Nb2RlKToKKwogMjAxNi0xMS0wMyAg
UnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMjA4MzAyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVCbG9i
UmVnaXN0cgogICAgICAgICAgICAgcmVzdWx0U2l6ZSA9IGJsb2JSZWdpc3RyeSgpLmJsb2JTaXpl
KHVybCk7CiAgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgICAgIH0pOwotICAg
ICAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsK
KyAgICAgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0U2l6ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01h
aW5UaHJlYWRTaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBNYWluVGhyZWFkU2hhcmVkVGltZXImIHNpbmdsZXRvbigpOwogCiAgICAg
dm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
RmlyZUludGVydmFsKFNlY29uZHMpIG92ZXJyaWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRl
OwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZFRpbWVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CiAKICAg
ICAvLyBUaGUgZmlyZSBpbnRlcnZhbCBpcyBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBjdXJy
ZW50IG1vbm90b25pYyBjbG9jayB0aW1lLgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlSW50ZXJ2
YWwoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRz
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZSgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGlt
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1l
cnMuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRUaW1lcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgVGhyZWFkVGltZXJz
Ojp1cGRhdGVTaGFyZWRUaW1lcigpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
IAogICAgICAgICBtX3BlbmRpbmdTaGFyZWRUaW1lckZpcmVUaW1lID0gbmV4dEZpcmVUaW1lOwot
ICAgICAgICBtX3NoYXJlZFRpbWVyLT5zZXRGaXJlSW50ZXJ2YWwoc3RkOjptYXgobmV4dEZpcmVU
aW1lIC0gY3VycmVudE1vbm90b25pY1RpbWUsIDAuMCkpOworICAgICAgICBtX3NoYXJlZFRpbWVy
LT5zZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyhzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJyZW50
TW9ub3RvbmljVGltZSwgMC4wKSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvTWFpblRocmVhZFNo
YXJlZFRpbWVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkz
LDExICs5MywxMSBAQCB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6aW52YWxpZGF0ZSgpCiAg
ICAgc2hhcmVkVGltZXIgPSBudWxscHRyOwogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1l
cjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJl
ZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBBU1NFUlQo
bV9maXJlZEZ1bmN0aW9uKTsKIAotICAgIENGQWJzb2x1dGVUaW1lIGZpcmVEYXRlID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbDsKKyAgICBDRkFic29sdXRlVGltZSBmaXJl
RGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWwudmFsdWUoKTsKICAg
ICBpZiAoIXNoYXJlZFRpbWVyKSB7CiAgICAgICAgIHNoYXJlZFRpbWVyID0gQ0ZSdW5Mb29wVGlt
ZXJDcmVhdGUobnVsbHB0ciwgZmlyZURhdGUsIGtDRlRpbWVJbnRlcnZhbERpc3RhbnRGdXR1cmUs
IDAsIDAsIHRpbWVyRmlyZWQsIG51bGxwdHIpOwogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVk
VGltZXJFZmwuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2
ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMjAwOCBBZm9uc28gUmFiZWxvIENvc3RhIEpyLgog
ICogICAgICAgICAgIChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAq
ICAgICAgICAgICAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEwICs1NCwxMCBAQCB2b2lkIE1haW5UaHJlYWRTaGFy
ZWRUaW1lcjo6c3RvcCgpCiAgICAgfQogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJlZFRp
bWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBzdG9wKCk7Ci0g
ICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRlcnZhbCwgdGltZXJFdmVu
dCwgbnVsbHB0cik7CisgICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRl
cnZhbC52YWx1ZSgpLCB0aW1lckV2ZW50LCBudWxscHRyKTsKIH0KIAogdm9pZCBNYWluVGhyZWFk
U2hhcmVkVGltZXI6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRT
aGFyZWRUaW1lckdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zOSwxMCArMzksMTAgQEAgTWFpblRo
cmVhZFNoYXJlZFRpbWVyOjpNYWluVGhyZWFkU2hhcmVkVAogICAgIG1fdGltZXIuc2V0UHJpb3Jp
dHkoR19QUklPUklUWV9ISUdIX0lETEUgKyAyMCk7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNoYXJl
ZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhyZWFk
U2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIEFT
U0VSVChtX2ZpcmVkRnVuY3Rpb24pOwotICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGludGVydmFs
KTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbC52YWx1ZSgpKTsKIH0KIAogdm9p
ZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnN0b3AoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAJKHJl
dmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhyZWFk
U2hhcmVkVGltZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSwxMiArMTIxLDEyIEBAIHN0
YXRpYyB2b2lkIE5UQVBJIHF1ZXVlVGltZXJQcm9jKFBWT0lELCAKICAgICAgICAgUG9zdE1lc3Nh
Z2UodGltZXJXaW5kb3dIYW5kbGUsIHRpbWVyRmlyZWRNZXNzYWdlLCAwLCAwKTsKIH0KIAotdm9p
ZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwp
Cit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKFNlY29uZHMgaW50
ZXJ2YWxTZWNvbmRzKQogewogICAgIEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24pOwogCisgICAgZG91
YmxlIGludGVydmFsID0gaW50ZXJ2YWxJblNlY29uZHMubWlsbGlzZWNvbmRzKCk7CiAgICAgdW5z
aWduZWQgaW50ZXJ2YWxJbk1TOwotICAgIGludGVydmFsICo9IDEwMDA7CiAgICAgaWYgKGludGVy
dmFsID4gVVNFUl9USU1FUl9NQVhJTVVNKQogICAgICAgICBpbnRlcnZhbEluTVMgPSBVU0VSX1RJ
TUVSX01BWElNVU07CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clJ1bkxvb3AuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDksMTYgKzUwLDE2IEBAIGNsYXNz
IFdvcmtlclNoYXJlZFRpbWVyIGZpbmFsIDogcHVibGljIFMKIHB1YmxpYzoKICAgICAvLyBTaGFy
ZWRUaW1lciBpbnRlcmZhY2UuCiAgICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiYmIGZ1bmN0aW9uKSBvdmVycmlkZSB7IG1fc2hhcmVkVGltZXJGdW5jdGlvbiA9
IFdURk1vdmUoZnVuY3Rpb24pOyB9Ci0gICAgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGlu
dGVydmFsKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gaW50ZXJ2YWwgKyBjdXJyZW50VGlt
ZSgpOyB9Ci0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGUgeyBtX25leHRGaXJlVGltZSA9IDA7IH0K
KyAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKSBvdmVycmlkZSB7IG1f
bmV4dEZpcmVUaW1lID0gaW50ZXJ2YWwgKyBXYWxsVGltZTo6bm93KCk7IH0KKyAgICB2b2lkIHN0
b3AoKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gV2FsbFRpbWUoKTsgfQogCiAgICAgYm9v
bCBpc0FjdGl2ZSgpIHsgcmV0dXJuIG1fc2hhcmVkVGltZXJGdW5jdGlvbiAmJiBtX25leHRGaXJl
VGltZTsgfQotICAgIGRvdWJsZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9
CisgICAgV2FsbFRpbWUgZmlyZVRpbWUoKSB7IHJldHVybiBtX25leHRGaXJlVGltZTsgfQogICAg
IHZvaWQgZmlyZSgpIHsgbV9zaGFyZWRUaW1lckZ1bmN0aW9uKCk7IH0KIAogcHJpdmF0ZToKICAg
ICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9zaGFyZWRUaW1lckZ1bmN0aW9uOwotICAgIGRvdWJs
ZSBtX25leHRGaXJlVGltZSB7IDAgfTsKKyAgICBXYWxsVGltZSBtX25leHRGaXJlVGltZTsKIH07
CiAKIGNsYXNzIE1vZGVQcmVkaWNhdGUgewpAQCAtMTU3LDE1ICsxNTgsMTYgQEAgTWVzc2FnZVF1
ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydQogICAgICAgICBnX21haW5fY29udGV4dF9p
dGVyYXRpb24obWFpbkNvbnRleHQsIEZBTFNFKTsKICNlbmRpZgogCi0gICAgZG91YmxlIGRlYWRs
aW5lID0gTWVzc2FnZVF1ZXVlPFRhc2s+OjppbmZpbml0ZVRpbWUoKTsKKyAgICBXYWxsVGltZSBk
ZWFkbGluZSA9IFdhbGxUaW1lOjppbmZpbml0eSgpOwogCiAjaWYgVVNFKENGKQogICAgIENGQWJz
b2x1dGVUaW1lIG5leHRDRlJ1bkxvb3BUaW1lckZpcmVEYXRlID0gQ0ZSdW5Mb29wR2V0TmV4dFRp
bWVyRmlyZURhdGUoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUp
OwogICAgIGRvdWJsZSB0aW1lVW50aWxOZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMgPSBuZXh0
Q0ZSdW5Mb29wVGltZXJGaXJlRGF0ZSAtIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotICAg
IGRlYWRsaW5lID0gY3VycmVudFRpbWUoKSArIHN0ZDo6bWF4KDAuMCwgdGltZVVudGlsTmV4dENG
UnVuTG9vcFRpbWVySW5TZWNvbmRzKTsKKyAgICBkZWFkbGluZSA9IFdhbGxUaW1lOjpub3coKSAr
IHN0ZDo6bWF4KAorICAgICAgICBTZWNvbmRzKDApLCBTZWNvbmRzKHRpbWVVbnRpbE5leHRDRlJ1
bkxvb3BUaW1lckluU2Vjb25kcykpOwogI2VuZGlmCiAKLSAgICBkb3VibGUgYWJzb2x1dGVUaW1l
ID0gMC4wOworICAgIFdhbGxUaW1lIGFic29sdXRlVGltZTsKICAgICBpZiAod2FpdE1vZGUgPT0g
V2FpdEZvck1lc3NhZ2UpIHsKICAgICAgICAgaWYgKHByZWRpY2F0ZS5pc0RlZmF1bHRNb2RlKCkg
JiYgbV9zaGFyZWRUaW1lci0+aXNBY3RpdmUoKSkKICAgICAgICAgICAgIGFic29sdXRlVGltZSA9
IHN0ZDo6bWluKGRlYWRsaW5lLCBtX3NoYXJlZFRpbWVyLT5maXJlVGltZSgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVz
aW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBw
cm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoSVBDOjpD
b25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjp3YWl0KToKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp0aW1lb3V0UmVz
cGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rp
b246OndhaXRGb3JNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZFN5bmNN
ZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseSk6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6c2VuZFN5bmMpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlz
cGF0Y2hJbW1lZGlhdGVseSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIu
aDoKKyAgICAgICAgKElQQzo6TWVzc2FnZVNlbmRlcjo6c2VuZFN5bmMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9DaGlsZFByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nl
c3NQcm94eTo6c2VuZFN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSk6CisgICAgICAgICogVUlQcm9jZXNzL1N0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdl
cjo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpzZW5kUHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW06Cisg
ICAgICAgICgtW1dLT25lU2hvdERpc3BsYXlMaW5rSGFuZGxlciBkaXNwbGF5TGlua0ZpcmVkOl0p
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojpjb21t
aXRMYXllclRyZWUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHku
bW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHk6
OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyIGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJXaWxsQmVnaW5BbmltYXRp
b246XSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9h
cmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9tUGFz
dGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkRGVsYXlXaW5k
b3dPcmRlcmluZ0ZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2Nl
cHRzRmlyc3RNb3VzZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVu
dDo6cnVuSmF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpydW5KYXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVu
dDo6cnVuSmF2YVNjcmlwdFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVu
dDo6cHJpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0
YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKToKKwogMjAxNi0xMS0wMyAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmludGlu
ZyB0byBQREYgc2hvdWxkIHByb2R1Y2UgaW50ZXJuYWwgbGlua3Mgd2hlbiBIVE1MIGhhcyBpbnRl
cm5hbCBsaW5rcwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9u
LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV93YWl0Rm9yU3luY1JlcGx5U2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH0KIAotICAgIGJv
b2wgd2FpdChkb3VibGUgYWJzb2x1dGVUaW1lKQorICAgIGJvb2wgd2FpdChUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUgYWJzb2x1dGVUaW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fd2FpdEZv
clN5bmNSZXBseVNlbWFwaG9yZS53YWl0KGFic29sdXRlVGltZSk7CiAgICAgfQpAQCAtMzc2LDcg
KzM3Niw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWUKICAgICAg
ICAgYXV0byB3cmFwcGVkTWVzc2FnZSA9IGNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcigiSVBDIiwg
IldyYXBwZWRBc3luY01lc3NhZ2VGb3JUZXN0aW5nIiwgZW5jb2Rlci0+ZGVzdGluYXRpb25JRCgp
LCBzeW5jUmVxdWVzdElEKTsKICAgICAgICAgd3JhcHBlZE1lc3NhZ2UtPnNldEZ1bGx5U3luY2hy
b25vdXNNb2RlRm9yVGVzdGluZygpOwogICAgICAgICB3cmFwcGVkTWVzc2FnZS0+d3JhcEZvclRl
c3RpbmcoV1RGTW92ZShlbmNvZGVyKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29s
PihzZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZSh3cmFwcGVkTWVzc2FnZSks
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCB7IH0pKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KHNlbmRTeW5jTWVzc2FnZShzeW5jUmVxdWVzdElELCBXVEZNb3Zl
KHdyYXBwZWRNZXNzYWdlKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgeyB9KSk7CiAgICAgfQogCiAg
ICAgaWYgKHNlbmRPcHRpb25zLmNvbnRhaW5zKFNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2
ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSkKQEAgLTQyMCwxMiArNDIwLDEyIEBAIGJvb2wgQ29u
bmVjdGlvbjo6c2VuZFN5bmNSZXBseShzdGQ6OnVuaXEKICAgICByZXR1cm4gc2VuZE1lc3NhZ2Uo
V1RGTW92ZShlbmNvZGVyKSwgeyB9KTsKIH0KIAotc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBD
b25uZWN0aW9uOjp0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyhzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQpIGNvbnN0CitTZWNvbmRzIENvbm5lY3Rpb246
OnRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKFNlY29uZHMgdGltZW91
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcgPyBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSA6IHRpbWVvdXQ7CisgICAgcmV0dXJuIG1faWdu
b3JlVGltZW91dHNGb3JUZXN0aW5nID8gU2Vjb25kczo6aW5maW5pdHkoKSA6IHRpbWVvdXQ7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShT
dHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKK3N0ZDo6
dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lLCB1
aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9y
T3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCkBAIC00NzAsOSArNDcwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rp
b246OndhaQogICAgIH0KIAogICAgIC8vIENsYW1wIHRoZSB0aW1lb3V0IHRvIGhvd2V2ZXIgbXVj
aCB0aW1lIGlzIHJlbWFpbmluZyBvbiBvdXIgY2xvY2suCi0gICAgYXV0byBub3cgPSBDb25kaXRp
b246OkNsb2NrOjpub3coKTsKLSAgICBhdXRvIHJlbWFpbmluZ0Nsb2NrVGltZSA9IHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KENvbmRpdGlvbjo6
Q2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpIC0gbm93KTsKLSAgICBhdXRvIGFic29sdXRlVGltZW91
dCA9IG5vdyArIHN0ZDo6bWluKHJlbWFpbmluZ0Nsb2NrVGltZSwgdGltZW91dCk7CisgICAgTW9u
b3RvbmljVGltZSBhYnNvbHV0ZVRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVv
dXQ7CiAKICAgICAvLyBOb3cgd2FpdCBmb3IgaXQgdG8gYmUgc2V0LgogICAgIHdoaWxlICh0cnVl
KSB7CkBAIC00OTYsNyArNDk0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rp
b246OndhaQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rl
cj4gQ29ubmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0
ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQorc3Rk
Ojp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZSh1aW50NjRf
dCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlciwgU2Vjb25k
cyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC01NDEsMTAgKzUzOSwxMCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6c2VuCiAgICAgcmV0dXJuIHJlcGx5
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNS
ZXBseSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRp
bWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQorc3RkOjp1
bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qg
c3luY1JlcXVlc3RJRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+
IHNlbmRTeW5jT3B0aW9ucykKIHsKICAgICB0aW1lb3V0ID0gdGltZW91dFJlc3BlY3RpbmdJZ25v
cmVUaW1lb3V0c0ZvclRlc3RpbmcodGltZW91dCk7Ci0gICAgZG91YmxlIGFic29sdXRlVGltZSA9
IGN1cnJlbnRUaW1lKCkgKyAodGltZW91dC5jb3VudCgpIC8gMTAwMC4wKTsKKyAgICBXYWxsVGlt
ZSBhYnNvbHV0ZVRpbWUgPSBXYWxsVGltZTo6bm93KCkgKyB0aW1lb3V0OwogCiAgICAgd2lsbFNl
bmRTeW5jTWVzc2FnZShzZW5kU3luY09wdGlvbnMpOwogICAgIApJbmRleDogU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTE2
NiwxMyArMTY2LDEzIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
c2VuZChUJiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgT3B0aW9uU2V0PFNlbmRP
cHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IHNlbmRXaXRoUmVwbHkoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIEZ1bmN0
aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNwYXRjaGVyLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDx0
eXBlbmFtZSBDb2RpbmdUeXBlPHR5cGVuYW1lIFQ6OlJlcGx5Pjo6VHlwZT4pPiYmIHJlcGx5SGFu
ZGxlcik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2Fn
ZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
czo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBl
bmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRp
bWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNl
bmRTeW5jT3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCB3YWl0
Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucyA9IHsgfSk7
CiAKICAgICBib29sIHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiwgT3B0aW9u
U2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlV2l0aFJl
cGx5KHVpbnQ2NF90IHJlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBGdW5jdGlv
bkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+KT4mJiByZXBseUhhbmRsZXIpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbmNv
ZGVyPiBjcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRp
b25JRCwgdWludDY0X3QmIHN5bmNSZXF1ZXN0SUQpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNv
ZGVyPiBzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlxdWVf
cHRyPEVuY29kZXI+LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNl
dDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGVjb2Rlcj4gc2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6dW5p
cXVlX3B0cjxFbmNvZGVyPiwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRp
b24+IHNlbmRTeW5jT3B0aW9ucyk7CiAgICAgYm9vbCBzZW5kU3luY1JlcGx5KHN0ZDo6dW5pcXVl
X3B0cjxFbmNvZGVyPik7CiAKICAgICB2b2lkIHdha2VVcFJ1bkxvb3AoKTsKQEAgLTIwOCw5ICsy
MDgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIp
OwogICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+IHdhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JP
cHRpb24+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvck1lc3NhZ2UoU3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
TmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8
V2FpdEZvck9wdGlvbj4pOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0
Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPERlY29kZXI+IHdhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1JlcXVlc3RJRCwg
U2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKIAogICAgIC8vIENh
bGxlZCBvbiB0aGUgY29ubmVjdGlvbiB3b3JrIHF1ZXVlLgogICAgIHZvaWQgcHJvY2Vzc0luY29t
aW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4pOwpAQCAtMjM4LDcgKzIzOCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB3aWxsU2VuZFN5bmNNZXNzYWdlKE9wdGlvblNldDxTZW5kU3lu
Y09wdGlvbj4pOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+KTsKIAotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dFJlc3Bl
Y3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3Rpbmcoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcykg
Y29uc3Q7CisgICAgU2Vjb25kcyB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVz
dGluZyhTZWNvbmRzKSBjb25zdDsKICAgICAKICAgICBDbGllbnQmIG1fY2xpZW50OwogICAgIGJv
b2wgbV9pc1NlcnZlcjsKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIENvbm5lY3Rpb246OnNlbmRX
aXRoUmVwbHkoVCYmIG1lc3NhCiAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJv
b2wgQ29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYg
cmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0
eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQogewog
ICAgIENPTVBJTEVfQVNTRVJUKFQ6OmlzU3luYywgU3luY01lc3NhZ2VFeHBlY3RlZCk7CiAKQEAg
LTM4OSw3ICszODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNl
CiAgICAgcmV0dXJuIHJlcGx5RGVjb2Rlci0+ZGVjb2RlKHJlcGx5KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVs
eSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVv
dXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHko
dWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZv
ck9wdGlvbj4gd2FpdEZvck9wdGlvbnMpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+
IGRlY29kZXIgPSB3YWl0Rm9yTWVzc2FnZShUOjpyZWNlaXZlck5hbWUoKSwgVDo6bmFtZSgpLCBk
ZXN0aW5hdGlvbklELCB0aW1lb3V0LCB3YWl0Rm9yT3B0aW9ucyk7CiAgICAgaWYgKCFkZWNvZGVy
KQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5oCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNl
bmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5
cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91
dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2VuZFN5bmNP
cHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKKyAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNz
YWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRz
OjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9
IHsgfSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoVDo6aXNTeW5jLCAiTWVzc2FnZSBp
cyBub3Qgc3luYyEiKTsKIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBl
bmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgo
KSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCisgICAg
Ym9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHko
KSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCiAgICAg
ewogICAgICAgICBBU1NFUlQobWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2
LDcgKzIzNiw3IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm8KICAg
ICAvLyBjaG9vc2UgdGhlIG1vc3QgcmVjZW50IG9uZSwgb3IgdGhlIG9uZSB0aGF0IGlzIGNsb3Nl
c3QgdG8gb3VyIGN1cnJlbnQgc2l6ZS4KIAogICAgIC8vIFRoZSB0aW1lb3V0LCBpbiBzZWNvbmRz
LCB3ZSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1l
c3NhZ2Ugd2hlbiB3ZSdyZSBhc2tlZCB0byBwYWludC4KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9j
ZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU+KG1fd2ViUGFn
ZVByb3h5LnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIFNlY29uZHM6OmZyb21NaWxsaXNlY29u
ZHMoNTAwKSk7CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJl
ZUNvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNz
UHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0No
aWxkUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgdGVybWluYXRlKCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNl
bmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxJUEM6OlNl
bmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBi
b29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNo
cm9ubzo6c2Vjb25kcygxKSwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5j
T3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhU
JiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
U2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kcygxKSwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRp
b24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24oKSBjb25zdAogICAgIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIENoaWxkUHJvY2Vz
c1Byb3h5OjpzZW5kKFQmJiBtZXNzYWdlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFU+IAotYm9v
bCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZFN5bmMoVSYmIG1lc3NhZ2UsIHR5cGVuYW1lIFU6OlJl
cGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0
aW9ucykKK2Jvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBtZXNzYWdlLCB0eXBl
bmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRp
bWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7
CiAgICAgQ09NUElMRV9BU1NFUlQoVTo6aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCiAgICAgLy8gVGhlIHRpbWVv
dXQgd2UgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVHZW9tZXRyeSBtZXNzYWdlLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSB7IHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDUwMCk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGVUaW1lb3V0KCkgeyByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1
MDApOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUo
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGlt
ZW91dCgpKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRh
dGUoU2Vjb25kcyA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpKSB7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIG1pbmltdW1MYXlvdXRTaXplRGlkQ2hhbmdlKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZFByb2Nlc3NX
aWxsU3VzCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5KCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
OjpSZXBseShoYW5kbGVkKSwgMCwgc3RkOjpjaHJvbm86OnNlY29uZHMoMSkpOworICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCks
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5OjpSZXBs
eShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpz
ZW5kUHJlcGFyZVRvU3VzcGVuZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwCiAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSBhbnkgb25nb2luZyB3b3JrIGluIG91ciBxdWV1ZSBpcyBmaW5pc2hlZCBiZWZvcmUgd2UgdGVy
bWluYXRlLgogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2VtYXBo
b3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2VtYXBo
b3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogfQogCiBTdHJpbmcgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpwZXJzaXN0ZW50U3RvcmFnZVBhdGgoY29uc3QgU3RyaW5nJiBs
YWJlbCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2VuZFByb2Nlc3NXaWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0ZDo6Y2hyb25vOjpzZWNvbmRz
KDEpKTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5OjpSZXBseShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9CiAg
ICAgCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNwZW5kKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFu
YWdlci5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQzLDcgKzg0Myw3IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm0KIAogICAgICAgICBzZW1h
cGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogfQogCiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5h
Z2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5Miw3ICsyOTIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3luY2hyb25pemVEeW5hbWljVmll
CiAgICAgICAgIGRvdWJsZSBuZXdTY2FsZTsKICAgICAgICAgRmxvYXRQb2ludCBuZXdTY3JvbGxQ
b3NpdGlvbjsKICAgICAgICAgdWludDY0X3QgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25J
RDsKLSAgICAgICAgaWYgKG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlN5
bmNocm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlKCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTeW5j
aHJvbml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZTo6UmVwbHkobmV3U2NhbGUsIG5ld1Njcm9sbFBv
c2l0aW9uLCBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEKSwgbV9wYWdlSUQsIHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDIpKSkgeworICAgICAgICBpZiAobV9wcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZTo6U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGUoKSwgTWVz
c2FnZXM6OldlYlBhZ2U6OlN5bmNocm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlOjpSZXBseShu
ZXdTY2FsZSwgbmV3U2Nyb2xsUG9zaXRpb24sIG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0aW9u
SUQpLCBtX3BhZ2VJRCwgU2Vjb25kcygyKSkpIHsKICAgICAgICAgICAgIG1fZHluYW1pY1ZpZXdw
b3J0U2l6ZVVwZGF0ZVdhaXRpbmdGb3JUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgIG1fZHlu
YW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUxheWVyVHJlZVRyYW5zYWN0aW9uSUQgPSBuZXh0VmFsaWRM
YXllclRyZWVUcmFuc2FjdGlvbklEOwogICAgICAgICAgICAgbV9wYWdlQ2xpZW50LmR5bmFtaWNW
aWV3cG9ydFVwZGF0ZUNoYW5nZWRUYXJnZXQobmV3U2NhbGUsIG5ld1Njcm9sbFBvc2l0aW9uLCBu
ZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IG5leHRMYXllclRyZWVU
cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rp
b25JRCArIDE7IH0KICAgICB1aW50NjRfdCBsYXN0Q29tbWl0dGVkTGF5ZXJUcmVlVHJhbnNhY3Rp
b25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdDsg
fQogCi0gICAgdm9pZCBkaWRSZWZyZXNoRGlzcGxheShkb3VibGUgdGltZXN0YW1wKTsKKyAgICB2
b2lkIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzaXplRGlkQ2hh
bmdlKCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4
MSw3IEBAIC0gKHZvaWQpZGVhbGxvYwogLSAodm9pZClkaXNwbGF5TGlua0ZpcmVkOihDQURpc3Bs
YXlMaW5rICopc2VuZGVyCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgX2RyYXdp
bmdBcmVhUHJveHktPmRpZFJlZnJlc2hEaXNwbGF5KHNlbmRlci50aW1lc3RhbXApOworICAgIF9k
cmF3aW5nQXJlYVByb3h5LT5kaWRSZWZyZXNoRGlzcGxheSgpOwogfQogCiAtICh2b2lkKWludmFs
aWRhdGUKQEAgLTIyOCwxMSArMjI4LDExIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eTo6Y28KIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBpZiAoc3RkOjpleGNoYW5nZSht
X2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSwgTmVlZHNEaWRVcGRhdGUpID09IE1pc3NlZENvbW1pdCkK
LSAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
OworICAgICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwogICAgIFttX2Rpc3BsYXlMaW5rSGFuZGxl
ciBzY2hlZHVsZV07CiAjZWxzZQogICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTmVlZHNE
aWRVcGRhdGU7Ci0gICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpOworICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRv
IG1pbGVzdG9uZXMgPSBsYXllclRyZWVUcmFuc2FjdGlvbi5uZXdseVJlYWNoZWRMYXlvdXRNaWxl
c3RvbmVzKCkpCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5OjppbgogICAgIH0KIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheShkb3VibGUpCit2b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KCkKIHsKICAgICBpZiAoIW1fd2ViUGFn
ZVByb3h5LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDI2LDE2ICs0MjYsMTYgQEAg
dm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp3YQogICAgIC8vIFdlIG11c3Qg
c2VuZCB0aGUgZGlkVXBkYXRlIG1lc3NhZ2UgYmVmb3JlIGJsb2NraW5nIG9uIHRoZSBuZXh0IGNv
bW1pdCwgb3RoZXJ3aXNlCiAgICAgLy8gd2UgY2FuIGJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgbmV4
dCBjb21taXQgd29uJ3QgY29tZSB1bnRpbCBhZnRlciB0aGUgd2FpdEZvckFuZERpc3BhdGNoSW1t
ZWRpYXRlbHkgdGltZXMgb3V0LgogICAgIGlmIChtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSAhPSBE
b2VzTm90TmVlZERpZFVwZGF0ZSkKLSAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwogCi0g
ICAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRp
bWVvdXQgPSBbXSB7CisgICAgc3RhdGljIFNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVv
dXQgPSBbXSB7CiAgICAgICAgIGlmIChpZCB2YWx1ZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIldlYktpdE92ZXJyaWRlQWN0aXZpdHlTdGF0
ZVVwZGF0ZVRpbWVvdXQiXSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248
ZG91YmxlPihbdmFsdWUgZG91YmxlVmFsdWVdKSk7CisgICAgICAgICAgICByZXR1cm4gU2Vjb25k
cyhbdmFsdWUgZG91YmxlVmFsdWVdKTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgcmV0
dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKTsKKyAgICAgICAgcmV0dXJuIFNlY29u
ZHM6OmZyb21NaWxsaXNlY29uZHMoNTAwKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKDI1MCk7CisgICAgICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKDI1MCk7CiAjZW5kaWYKICAgICB9KCk7CiAgICAgbV93ZWJQYWdlUHJveHkucHJv
Y2VzcygpLmNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2Fn
ZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OkNvbW1pdExheWVyVHJlZT4obV93
ZWJQYWdlUHJveHkucGFnZUlEKCksIGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0LCBJUEM6Oldh
aXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Rp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBEcmF3aW5nQXJlYVByb3h5CiAgICAgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
d2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0
aW1lb3V0ID0gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkpIG92ZXJyaWRlOwor
ICAgIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoU2Vjb25kcyB0aW1lb3V0ID0g
ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y29sb3JTcGFjZURpZENoYW5nZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbWluaW11bUxheW91dFNp
emVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWFQcm94eS5tbQkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03MCw3ICs3MCw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eToK
ICAgICBzZW5kVXBkYXRlR2VvbWV0cnkoKTsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHk6OndhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKFNlY29uZHMgdGltZW91dCkK
IHsKICNpZiAhSEFWRShDT1JFQU5JTUFUSU9OX0ZFTkNFUykKICAgICBpZiAoIW1faXNXYWl0aW5n
Rm9yRGlkVXBkYXRlR2VvbWV0cnkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYVByb3h5OgogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhUHJveHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKCkKIHsKLSAgICBhdXRv
IGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygy
NTApOworICAgIFNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBTZWNvbmRzOjpm
cm9tTWlsbGlzZWNvbmRzKDI1MCk7CiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5l
Y3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkVXBkYXRlQWN0aXZpdHlTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIGFj
dGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdh
aXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dL
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk2LDcgKzE5Niw3
IEBAIC0gKHZvaWQpaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcldpbGxCZWcKICAgICAvLyBGSVhN
RTogQ29ubmVjdGlvbiBjYW4gYmUgbnVsbCBpZiB0aGUgcHJvY2VzcyBpcyBjbG9zZWQ7IHdlIHNo
b3VsZCBjbGVhbiB1cCBiZXR0ZXIgaW4gdGhhdCBjYXNlLgogICAgIGlmIChfc3RhdGUgPT0gSW1t
ZWRpYXRlQWN0aW9uU3RhdGU6OlBlbmRpbmcpIHsKICAgICAgICAgaWYgKGF1dG8qIGNvbm5lY3Rp
b24gPSBfcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkgewotICAgICAgICAgICAgYm9vbCBy
ZWNlaXZlZFJlcGx5ID0gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q+
KF9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApKTsKKyAgICAg
ICAgICAgIGJvb2wgcmVjZWl2ZWRSZXBseSA9IGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRj
aEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0PihfcGFnZS0+cGFnZUlEKCksIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMo
NTAwKSk7CiAgICAgICAgICAgICBpZiAoIXJlY2VpdmVkUmVwbHkpCiAgICAgICAgICAgICAgICAg
X3N0YXRlID0gSW1tZWRpYXRlQWN0aW9uU3RhdGU6OlRpbWVkT3V0OwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI5LDcg
KzIyOSw3IEBAIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0cmluZ1NlbGVjdGlvbkZvclAKICAgICBp
ZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIAotICAgIGNvbnN0IGF1
dG8gbWVzc2FnZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygyMCk7CisgICAgY29uc3Qg
U2Vjb25kcyBtZXNzYWdlVGltZW91dCgyMCk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpHZXRTdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCksIE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRTdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkOjpSZXBseSh2YWx1ZSks
IG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjQw
LDcgKzI0MCw3IEBAIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBhZ2VQcm8KICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwog
ICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAgIGNvbnN0IGF1dG8gbWVzc2FnZVRpbWVvdXQgPSBz
dGQ6OmNocm9ubzo6c2Vjb25kcygyMCk7CisgICAgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGltZW91
dCgyMCk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXREYXRh
U2VsZWN0aW9uRm9yUGFzdGVib2FyZChwYXN0ZWJvYXJkVHlwZSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZTo6R2V0RGF0
YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIG1fcGFnZUlELCBt
ZXNzYWdlVGltZW91dCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKQEAgLTI1NSw3ICsyNTUs
NyBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgY29uc3QgYXV0byBt
ZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNv
bmRzIG1lc3NhZ2VUaW1lb3V0KDIwKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2U6OlJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpSZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHJlc3Vs
dCksIG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTQwOCw3ICs0MDgsNyBAQCBib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkRGVsYXlXaW5kb3dPcmRl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAg
Y29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDMpOworICAg
IGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMyk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQoZXZlbnQp
LCBNZXNzYWdlczo6V2ViUGFnZTo6U2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50OjpSZXBs
eShyZXN1bHQpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC00MTksNyArNDE5LDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmFjY2VwdHNGaXJzdE1v
dXNlKGludAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNl
OwotICAgIGNvbnN0IGF1dG8gbWVzc2FnZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygz
KTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDMpOwogICAgIHByb2Nlc3MoKS5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6QWNjZXB0c0ZpcnN0TW91c2UoZXZlbnROdW1iZXIs
IGV2ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OkFjY2VwdHNGaXJzdE1vdXNlOjpSZXBseShyZXN1
bHQpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1NCw3ICszNTQsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVu
QmVmb3JlVW5sb2FkQ29uCiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlv
bkRpc2FibGVyOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hv
dWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjpt
YXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3Bl
bmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKG1lc3NhZ2UsIHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw6OlJlcGx5KHNob3VsZENsb3Nl
KSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09w
dGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gc2hvdWxkQ2xvc2U7CkBAIC00MDAsNyArNDAwLDcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydAogCiAgICAgSGFuZ0RldGVjdGlv
bkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246Oklu
Zm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBhbGVydFRleHQpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQ6OlJlcGx5KCksIG1fcGFnZS0+cGFnZUlEKCksIFNl
Y29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJv
Y2Vzc1dpbGxTdXNwZW5kKTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3Jp
cHRDb25maXJtKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDE3LDcg
KzQxNyw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmkKICAgICBI
YW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogCiAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkph
dmFTY3JpcHRDb25maXJtKHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6
ZnJvbUZyYW1lKGZyYW1lKSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkph
dmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlE
KCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTQzNiw3ICs0MzYsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVu
SmF2YVNjcmlwdFByb21wCiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlv
bkRpc2FibGVyOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZh
U2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJv
bUZyYW1lKGZyYW1lKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQo
KSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwg
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlLCBkZWZhdWx0VmFs
dWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShy
ZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRT
eW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhcmVzdWx0LmlzTnVsbCgpOwpAQCAtNjY4LDcgKzY2
OCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUKICAgICB9CiAj
ZW5kaWYKIAotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJp
bnRGcmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJp
bnRGcmFtZTo6UmVwbHkoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6
U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBt
X3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWUod2ViRnJh
bWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWU6OlJlcGx5
KCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBEYXRhYmFzZURldGFpbHMgZGV0YWlscykKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgaWYgKCFuZXdRdW90YSkgewogICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYygKICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0
YWJhc2VRdW90YSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpLCBkYXRhYmFzZU5hbWUsIGRldGFpbHMuZGlzcGxheU5hbWUoKSwgY3VycmVudFF1b3RhLCBj
dXJyZW50T3JpZ2luVXNhZ2UsIGRldGFpbHMuY3VycmVudFVzYWdlKCksIGRldGFpbHMuZXhwZWN0
ZWRVc2FnZSgpKSwKLSAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVk
RGF0YWJhc2VRdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFn
ZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBs
YXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKICAgICB9CiAKICAgICBkYk1hbmFnZXIuc2V0UXVv
dGEob3JpZ2luLCBuZXdRdW90YSk7CkBAIC03MTMsNyArNzEzLDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbgogICAgIHVpbnQ2NF90IG5ld1F1b3RhID0gMDsKICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYygKICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YShvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBjdXJyZW50UXVv
dGEsIHRvdGFsQnl0ZXNOZWVkZWQpLAotICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
ZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFn
ZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRT
eW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgICAgIE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGE6
OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwg
SVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwog
CiAgICAgY2FjaGVTdG9yYWdlLnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgbmV3
UXVvdGEpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlz
aW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsNyArNjkwLDcg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogCiAgICAgUmVmPFdl
YkZyYW1lPiBwcm90ZWN0KCptX2ZyYW1lKTsKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1l
ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJQYWdlLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmMobV9mcmFtZS0+
ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShjb3JlRnJhbWUpLCByZXNw
b25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdl
dCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNw
b25zZVN5bmM6OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBwb2xpY3lBY3Rpb24sIGRvd25s
b2FkSUQpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09w
dGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKSB7CisgICAgaWYgKCF3ZWJQ
YWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNw
b25zZVN5bmMobV9mcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFt
ZShjb3JlRnJhbWUpLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBsaXN0ZW5l
cklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9I
YW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
ZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBw
b2xpY3lBY3Rpb24sIGRvd25sb2FkSUQpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRT
eW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpIHsKICAgICAgICAg
bV9mcmFtZS0+ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGxpc3RlbmVySUQsIFBvbGljeUlnbm9y
ZSwgMCwgeyB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDMgQEAKLQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU1MzYsNyArNTUzNSw3IEBA
IHZvaWQgV2ViUGFnZTo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclQKICAgICBVc2VyRGF0YSBy
ZXR1cm5Vc2VyRGF0YTsKIAogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKTsKLSAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhhbmRs
ZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEod2ViUHJvY2Vzcy50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5KHJldHVyblVzZXJEYXRhKSwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OlVzZUZ1
bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZykpCisgICAgaWYgKCFzZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UobWVzc2FnZU5hbWUsIFVz
ZXJEYXRhKHdlYlByb2Nlc3MudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkp
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlOjpSZXBs
eShyZXR1cm5Vc2VyRGF0YSksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRp
b246OlVzZUZ1bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZykpCiAgICAgICAgIHJldHVybkRh
dGEgPSBudWxscHRyOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuRGF0YSA9IHdlYlByb2Nlc3Mu
dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyhyZXR1cm5Vc2VyRGF0YS5vYmplY3QoKSk7CkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDgzODMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxNi0xMS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdURjo6UGFya2luZ0xvdCBzaG91bGQgc3RvcCB1c2luZyBzdGQ6OmNocm9ubyBiZWNhdXNl
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBjYXN0cyBhcmUgcHJvbmUgdG8gb3ZlcmZsb3dzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIwNDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3BQ
cm9kdWNpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3Rv
cENvbnN1bWluZyk6CisKIDIwMTYtMTEtMDQgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXaW5dIFBhZ2UgdmlzaWJpbGl0eSB0ZXN0cyBhcmUgdGltaW5n
IG91dC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cAkocmV2aXNpb24gMjA4MzU4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
ZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCw5IEBAIGVudW0gTm90aWZ5U3R5bGUg
ewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgd2FpdChDb25kaXRpb24m
IGNvbmRpdGlvbiwgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiYgbG9ja2VyLCBjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgdGltZW91dCkKK3ZvaWQgd2Fp
dChDb25kaXRpb24mIGNvbmRpdGlvbiwgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiYgbG9ja2VyLCBj
b25zdCBGdW5jdG9yJiBwcmVkaWNhdGUsIFNlY29uZHMgdGltZW91dCkKIHsKLSAgICBpZiAodGlt
ZW91dCA9PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKSkKKyAgICBpZiAodGltZW91
dCA9PSBTZWNvbmRzOjppbmZpbml0eSgpKQogICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIs
IHByZWRpY2F0ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFRoaXMgdGVzdHMgdGltZW91dHMg
aW4gdGhlIHNlbnNlIHRoYXQgaXQgdmVyaWZpZXMgdGhhdCB3ZSBjYW4gY2FsbCB3YWl0KCkgYWdh
aW4gYWZ0ZXIgYQpAQCAtODAsOCArODAsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgdW5zaWduZWQg
bWF4UXVldWVTaXplLAogICAgIHVuc2lnbmVkIG51bU1lc3NhZ2VzUGVyUHJvZHVjZXIsCiAgICAg
Tm90aWZ5U3R5bGUgbm90aWZ5U3R5bGUsCi0gICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyB0
aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6bWF4KCksCi0gICAgc3RkOjpjaHJv
bm86Om1pY3Jvc2Vjb25kcyBkZWxheSA9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM6Onplcm8o
KSkKKyAgICBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLAorICAgIFNlY29u
ZHMgZGVsYXkgPSBTZWNvbmRzKDApKQogewogICAgIERlcXVlPHVuc2lnbmVkPiBxdWV1ZTsKICAg
ICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIHJ1
blRlc3QoCiAgICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7
CiAgICAgfQogCi0gICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKGRlbGF5KTsKKyAgICBk
ZWxheS5zbGVlcCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJzOyBpLS07
KSB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRo
cmVhZCgKQEAgLTE4Niw4ICsxODYsOCBAQCBURVNUKFdURl9Db25kaXRpb24sIE9uZVByb2R1Y2Vy
T25lQ29uc3VtCiB7CiAgICAgcnVuVGVzdCgKICAgICAgICAgMSwgMSwgMSwgMTAwMDAwLCBUYWN0
aWNhbGx5Tm90aWZ5QWxsLAotICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAw
KSwKLSAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwMDAwKSk7CisgICAgICAg
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMTApLAorICAgICAgICBTZWNvbmRzKDEpKTsKIH0K
IAogVEVTVChXVEZfQ29uZGl0aW9uLCBPbmVQcm9kdWNlck9uZUNvbnN1bWVySHVuZHJlZFNsb3Rz
KQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIFRFU1QoV1RGX0NvbmRpdGlvbiwgVGltZW91dFRpbWVzT3V0
KQogCiAgICAgbG9jay5sb2NrKCk7CiAgICAgYm9vbCByZXN1bHQgPSBjb25kaXRpb24ud2FpdEZv
cigKLSAgICAgICAgbG9jaywgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwMCksIFtdICgp
IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0pOworICAgICAgICBsb2NrLCBTZWNvbmRzOjpmcm9t
TWlsbGlzZWNvbmRzKDEwKSwgW10gKCkgLT4gYm9vbCB7IHJldHVybiBmYWxzZTsgfSk7CiAgICAg
bG9jay51bmxvY2soKTsKIAogICAgIEVYUEVDVF9GQUxTRShyZXN1bHQpOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyAr
MTE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1fbG93ZXJR
dWV1ZS5jbG9zZSgpOwotICAgICAgICBtX3Byb2R1Y2VDbG9zZVNlbWFwaG9yZS53YWl0KHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworICAgICAgICBtX3Byb2R1Y2VDbG9zZVNl
bWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKICAgICAgICAgbV9wcm9kdWNlUXVl
dWUgPSBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV91cHBlclF1ZXVlLmNsb3NlKCk7Ci0gICAg
ICAgIG1fY29uc3VtZUNsb3NlU2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjptYXgoKSk7CisgICAgICAgIG1fY29uc3VtZUNsb3NlU2VtYXBob3JlLndhaXQoV2FsbFRp
bWU6OmluZmluaXR5KCkpOwogICAgICAgICBtX2NvbnN1bWVRdWV1ZSA9IG51bGxwdHI7CiAgICAg
fQogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293913</attachid>
            <date>2016-11-04 12:57:55 -0700</date>
            <delta_ts>2016-11-04 13:39:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>145187</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvYmFibHkg
dGhlIG5pY2VzdCBleGFtcGxlIG9mIHdoeSB0aGlzIHBhdGNoIGlzIGEgZ29vZCBpZGVhIGlzIHRo
ZSBjaGFuZ2UgaW4KKyAgICAgICAgQXRvbWljc09iamVjdC5jcHAuCisKKyAgICAgICAgKiBqaXQv
SUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQXRvbWljc09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2Fp
dCk6CisKIDIwMTYtMTEtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCBy
ZWJhc2UuLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIElDU3RhdHM6OklDU3RhdHMoKQogICAgICAgICBb
dGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yU2Vj
b25kcyhtX2xvY2ssIDEsIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxkU3RvcDsg
fSk7CisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9sb2NrLCBTZWNvbmRzKDEpLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3No
b3VsZFN0b3A7IH0pOwogICAgICAgICAgICAgICAgIGlmIChtX3Nob3VsZFN0b3ApCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsOCArMzA0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgdGltZW91dEluTmFub3NlY29uZHMgPSB0
aW1lb3V0SW5NaWxsaXNlY29uZHMgKiAxMDAwICogMTAwMDsKLQorICAgIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKKyAg
ICAKICAgICAvLyBUaGlzIGNvdmVycyB0aGUgcHJvcG9zZWQgcnVsZToKICAgICAvLwogICAgIC8v
IDQuIElmIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkIG9yIGlzIHVuZGVmaW5lZCB0aGVuIGxldCB0
IGJlICtpbmYuIE90aGVyd2lzZToKQEAgLTMxNCwzMSArMzE0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAvLwogICAgIC8vIGV4ZWMtPmFyZ3VtZW50
KDMpIHJldHVybnMgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IHByb3ZpZGVkIGFuZCBUb051bWJlcih1
bmRlZmluZWQpIHJldHVybnMgTmFOLAogICAgIC8vIHNvIE5hTiBpcyB0aGUgb25seSBzcGVjaWFs
IGNhc2UuCi0gICAgaWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID09IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKQotICAgICAgICB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHN0ZDo6bWF4KDAuLCB0aW1lb3V0
SW5OYW5vc2Vjb25kcyk7CisgICAgaWYgKHRpbWVvdXQgPT0gdGltZW91dCkKKyAgICAgICAgdGlt
ZW91dCA9IHN0ZDo6bWF4KFNlY29uZHMoMCksIHRpbWVvdXQpOwogICAgIGVsc2UKLSAgICAgICAg
dGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Ci0gICAgCi0gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgaXMgYSBwaWxlIG9mIG5vbnNl
bnNlLCBidXQgaXQncyBhbGwgbmVlZGVkIGJlY2F1c2Ugb2YgY29ybmVyIGNhc2VzCi0gICAgLy8g
aW5zaWRlIHN0ZDo6Y2hyb25vLgotICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIHN0ZDo6Y2hyb25v
LgotICAgIAotICAgIFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQ7Ci0gICAg
aWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90
OjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpjaHJv
bm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXRJbk5hbm9zZWNvbmRz
KSk7Ci0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPCBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHM6Onplcm8oKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlVGltZW91dCA+IFBhcmtpbmdMb3Q6OkNsb2Nr
OjpkdXJhdGlvbjo6bWF4KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xv
Y2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OkNsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8UGFya2luZ0xvdDo6Q2xvY2s6OmR1cmF0aW9u
PihyZWxhdGl2ZVRpbWVvdXQpOwotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgICAgICB9Ci0gICAgfQorICAgICAg
ICB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKTsKICAgICAKICAgICBib29sIGRpZFBhc3NW
YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCByZXN1bHQ7CkBA
IC0zNTEsNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
YwogICAgICAgICAgICAgICAgIHJldHVybiBkaWRQYXNzVmFsaWRhdGlvbjsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAg
ICAgICAgIE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dCk7CiAgICAgfQogICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjM5IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6
Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBv
dmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0aW1lIG1lYXN1cmVtZW50
cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAgIHNvbWV0aW1lcyBpdCB3
YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBvZiB0aW1lLCBzb21ldGlt
ZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVwb2NoLiBXaGVuIHdlIHNw
b2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEgbW9ub3RvbmljIGNsb2Nr
IG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdheXMgJ2RvdWJsZScgLSBu
ZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZlbgorICAgICAgICB0aG91
Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50ZXJ2YWwsIG1zIGludGVy
dmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMgc2luY2UgZXBvY2ggb24g
d2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2UgZXBvY2ggbW9ub3Rvbmlj
KS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRob3VnaHQgdGhhdCBpdCB3
b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJsZXMgd2l0aAorICAgICAg
ICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRoaW5ncyB3aXRoIHN0ZDo6
Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAgICBpbmNvbnZlbmllbnQ6
CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5ldmVyIHdhbnQgdG8gc2F5
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIgd2FudCB0byBzYXkKKyAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9pbnQuIFRoZSBzeW50YXgg
Zm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAgICAgICAgICBkdXJhdGlv
bl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
IG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50ZWdlcnMgYnkgZGVmYXVs
dCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNsdW1zeS4gQnV0IHRoZSBp
bnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIHJvdWdoIGVkZ2VzIG9m
IGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3ZWVuIHN0ZDo6Y2hyb25v
IHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNrcyBvdmVyZmxvdworICAg
ICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVudGx5LiBXZSBoYXZlIGV2
ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBo
YWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMgdXAgYmVpbmcgYSBzcGVj
aWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2VzLCB0aGUgb3ZlcmZsb3cg
YWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAgSXQncyBhbiBlcnJvciB0
byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQgaGF2ZSBiZWVuIGV4Y3Vz
YWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0aCB3YXMgbm90IGd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB0aGF0IHdvdWxkCisg
ICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMgYSBjb250aW51b3VzLCBp
bmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAgICAgICAgZm9yIGZsb2F0
aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBwcmVzZXJ2ZXMg
cHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQgZXh0cmVtZSBjYXNlcywg
c28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGltZSBtZWFucyB0aGF0IHVu
aXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAgICAgICAgbG9zc2xlc3Mu
IFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZlcnkgaGFyZCBhYm91dCB3
aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNoLCB3ZSB1c2Ugc2Vjb25k
cyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJvdW5kYXJpZXMsIGxpa2Ug
YW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21ldGhpbmcgb3RoZXIgdGhh
biBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBtYWtlcyBpdCBl
YXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgdGlt
ZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1wbGU6IHdoZW4gd291bGQg
eW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlzIGlzIHRoZQorICAgICAg
ICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBwb3J0IGJvdGggYSB0aW1l
b3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZhcmlhbnQuCisKKyAgICAg
ICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0aGluZ3Mgd2hlbiBtYXRo
IGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAgICAgcHJldHR5IHdlbGwg
b3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdvdWxkIGRvIHdoZW4gY29t
cHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgdXNpbmcgc2Np
ZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBzaWduaWZpY2FudAorICAg
ICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1bmRlciBmbG9hdGluZyBw
b2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAgICAgICBvdGhlciBoYW5k
LCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdlIGJlY2F1c2UgeW91IGhh
dmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxlIHBvc3NpYmxlIFVCIGNv
cm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJbnRlZ2VycyB0aGF0Cisg
ICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGxhcmdlIGFuZCB5
b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAgICAgICAgdGhlbS4gQXQg
dGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBhbSBub3QgY2VydGFpbiB0
aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhlIGNvcm5lciBjYXNlcwor
ICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1la2VlcGluZyBjbGFzc2Vz
IHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAgICBhbGwgaW50ZXJuYWxs
eSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2VicmFpYyB0eXBpbmcuIFRo
ZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25kczogdGhpcyBpcyBmb3Ig
bWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6IHRpbWUgc2luY2UgZXBv
Y2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuCisgICAg
ICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2NvcmRpbmcgdG8gYSBtb25v
dG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRoYXQgc2F5cyBlaXRoZXIg
V2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOiBh
IHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXByZXNlbnRzIGVpdGhlciBh
CisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUuCisgICAgICAgIAorICAg
ICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysgdmFsdWVzIGFuZCBhcmUg
Y2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAgICAgdmVyeSBuZWFybHkg
UE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lvbnMgYmV0d2VlbiB0aGUg
dmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMgaXMgYnkgd2F5IG9mIGFs
Z2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2UgcmVjb2duaXplOgorICAg
ICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29uZHMKKyAgICAgICAgU2Vj
b25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3RvbmljVGltZSA9IE1vbm90
b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAgICAKKyAgICAgICAgV2Ug
c3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMgYmVjYXVzZSBtYXRoLgor
ICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBiZXR3ZWVuIE1vbm90b25p
Y1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgd3Qg
PSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0
byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNsb2NrcyBhbmQgY29udmVy
dCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFueSBvZiBvdXIgQVBJcyB3
b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGltZSB0aGUgdXNlciB3YW50
ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2ggaW5jbHVkZXMgQ29uZGl0
aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS4gWW91
CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRpbWUgb3IgTW9ub3Rvbmlj
VGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhh
dCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246OndhaXRVbnRpbCwgdGhlbiBD
b25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hlbiBpdCBzaG91bGQgd2Fr
ZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgV2FsbFRpbWUgLSBi
dXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4gd2FpdFVudGlsIHdpbGwg
bWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAgICBNb25vdG9uaWNUaW1l
LiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0aGFuIGNocm9ubyBhbGxv
d2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIGEg
ZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5v
dCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8gYW5kIHRoZXNlIG5ldyB0
aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmllbmNlIHNob3dzIHRoYXQg
d2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgICBz
dGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywgSSBkaWRuJ3QgbmVlZCBz
dWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAgcGF0Y2ggb25seSBjb252
ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2luZ0xvdCBhbmQgQ29uZGl0
aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRoYXQgY29kZSBvbnRvIHRo
ZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWwp
OgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToKKyAgICAgICAgKFdURjo6
Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRV
bnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUXVl
dWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1l
LmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0Zi9NZXNzYWdlUXVldWUu
aDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1v
bm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmFwcHJveGlt
YXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNU
aW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpNb25vdG9uaWNUaW1l
KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSk6CisgICAgICAg
IChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAgKFdURjo6TW9ub3Rvbmlj
VGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjph
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoKKyAgICAgICAg
KFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAgICAgICAoV1RGOjpQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1NlY29uZHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6CisgICAgICAgIChXVEY6
OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pY3Jvc2Vj
b25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRzKToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OmZy
b21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMp
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAgICAgIChXVEY6OlNlY29u
ZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcispOgor
ICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci8pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3Bl
cmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yKj0pOgorICAgICAgICAo
V1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcj4p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
dyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVD
bG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6d2FsbFRpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25pY1RpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGlt
YXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91YmxlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VFcG9jaCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogd3RmL1dhbGxU
aW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpub3cpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2xlZXApOgorICAgICAg
ICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OldhbGxU
aW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3VibGUpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2Vjb25k
c1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVXYWxsVGlt
ZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdU
Rjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3YWl0KToKKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0xMS0wMyAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRml4ZXMgdG8gYnVpbGQg
SlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNiBAQAogCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOEIx
REM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87IH07CisJCTBGNjZCMjhE
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07CisJCTBGNjZCMjhGMURD
OTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICov
OyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICov
OyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi87IH07
CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICovOyB9OwogCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNl
dC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZC
NTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJMEY0M0Q4RjAxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9ja1R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ub3Rv
bmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgzMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NzFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FsbFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FsbFRpbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4ODVDRjIwMDQ0RjVFMiAv
KiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJv
b2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNw
cCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJ
CQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAogCQkJCTBG
OEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCkBAIC05
NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0
b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5o
ICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAgLTEwMDcsNiArMTAzMSw4
IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVD
ODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCisJCQkJMEY2NkIyODQx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBGNjZCMjg1MURDOTdCQUIw
MDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJMEY2NkIyODYxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovLAogCQkJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLywKIAkJCQkwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZC
QkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2ICsxMDgyLDggQEAKIAkJ
CQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0Yg
LyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxs
VGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8s
CiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLApAQCAtMTI1OSw3ICsx
Mjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVC
MDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4
QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNDAsNiAr
MTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlCIC8qIExpc3REdW1wLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAKIAkJCQkxNEYzQjBGNzE1
RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiArMTUwMCw3IEBACiAJCQkJ
RTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJQThBNDczQUExNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDUxMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09i
akNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAwNDEy
M0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2MDE1MUE4
MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY0
MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIy
OTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBACiAJCQkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOEYxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFy
dChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChs
b2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09
IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2h1dCB0aGUg
dGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Ns
b2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2NrLCBTZWNvbmRzKDEpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3RpZnkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2luZyB0byBzbGVlcCFcbiIp
OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAtNjQsNiArNjUsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5vbmNv
cHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xMDEs
NiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBTZWNvbmRzLmgKICAgICBT
ZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCkBA
IC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBVbmlxdWVSZWYuaAogICAg
IFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVmVjdG9y
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaAorICAgIFdhbGxUaW1l
LmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29ya1F1ZXVlLmgKQEAgLTE3
Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNzLmNwcAogICAgIEF1dG9t
YXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCiAgICAgTWV0YUFsbG9j
YXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJlck9mQ29yZXMuY3BwCiAg
ICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApAQCAtMjA3LDEyICsyMTQs
MTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAogICAg
IFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNwcAogICAgIFNpeENoYXJh
Y3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKICAg
ICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV2FsbFRpbWUu
Y3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xv
Y2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENs
b2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rvbmlj
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBXVEZfQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX0Nsb2NrVHlwZV9oCisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKworZW51bSBjbGFzcyBDbG9j
a1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tUeXBlKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCisjZW5kaWYgLy8gV1RGX0Ns
b2NrVHlwZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZu
ZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUg
PGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5n
TG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlz
IGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQg
aXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5j
ZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5n
TG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRv
IHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5s
aWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJl
dHRlciB0byB1c2UgTW9ub3RvbmljVGltZS4KKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUg
VGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNp
bmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAg
ICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlm
IHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVj
dCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sg
Zm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBP
cGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9j
aywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlw
ZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsK
ICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygp
KSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsK
ICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ug
ewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJl
dHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0
dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBD
bG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAg
Ym9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7
CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVu
dGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlv
bkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlz
ZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8v
IE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdh
aXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0
aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYg
bG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRp
dmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRp
bChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRl
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9v
bCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7
CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyBy
ZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRp
bChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9j
aywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25k
aXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVu
dGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChs
b2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50
aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0
U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywg
YWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xv
Y2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVU
aW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0g
ICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGlt
ZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRv
dWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMg
KiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJl
bGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFu
ZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5s
b2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3Qg
YmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAg
IC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBw
cmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25v
OjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vj
b25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwg
cHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0
cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0
byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMg
dHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9u
ZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAg
ICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9v
bCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVv
dXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNv
bmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjAp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAw
KSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwg
YXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9j
aygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0
aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQg
aW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2
ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAg
ICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxh
dGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChs
b2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwo
TG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShy
ZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlv
blR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3Qg
RHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRp
dmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xv
Y2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBD
bG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1
bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1
bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5z
aWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBi
ZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAg
ICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAg
ICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGlt
ZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0
OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAK
IGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRR
dWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8
RGF0YVR5cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGlt
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0
aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAg
ICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVl
dWUudGFrZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0
IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KQEAgLTM0
MCw3ICszNDAsNyBAQCB2b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2Nr
OwogICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7Ci0gICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1Nl
Y29uZHMoZmFrZUxvY2ssIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOwor
ICAgIGZha2VDb25kaXRpb24ud2FpdEZvcihmYWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAy
MDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1l
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxs
ZWQoKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUp
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVy
ZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIFdhbGxU
aW1lIGFic29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRl
PgogICAgICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYmKTsKQEAgLTc2LDggKzc3LDYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgaXNFbXB0eSgpIGlzIG9u
bHkgdmFsaWQgaWYgbm8gb3RoZXIgdGhyZWFkIGlzIG1hbmlwdWxhdGluZyB0aGUgcXVldWUgYXQg
dGhlIHNhbWUgdGltZS4KICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICAgICAgc3RhdGlj
IGRvdWJsZSBpbmZpbml0ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46Om1heCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRl
eDsKICAgICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwpAQCAtMTMwLDE0ICsxMjksMTQgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6
d2FpdEZvck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAg
ICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb247IAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGlt
ZW91dChleGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIGlu
ZmluaXRlVGltZSgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiByZXN1bHQg
PSB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10oY29uc3Qg
RGF0YVR5cGUmKSB7IHJldHVybiB0cnVlOyB9LCBXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
ICAgIEFTU0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJl
YXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0
YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2Fp
dFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdl
UXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2Fn
ZVF1ZXVlV2FpdFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFdhbGxUaW1l
IGFic29sdXRlVGltZSkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFs
c2U7CkBAIC0xNTEsMTAgKzE1MCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlm
IChmb3VuZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRz
KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRp
dGlvbi53YWl0VW50aWwobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsK
KyAgICAgICAgQVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogCiAgICAgICAgIGlmIChtX2tpbGxlZCkgewogICAgICAgICAgICAgcmVzdWx0
ID0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01vbm90b25p
Y1RpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vbm90b25p
Y1RpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJl
YW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJX
YWxsVGltZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworTW9ub3RvbmljVGltZSBNb25vdG9uaWNU
aW1lOjpub3coKQoreworICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKSk7Cit9CisKK1dhbGxUaW1lIE1vbm90b25pY1RpbWU6OmFwcHJveGltYXRl
V2FsbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAqdGhpcyAtIG5vdygpICsgV2FsbFRpbWU6
Om5vdygpOworfQorCit2b2lkIE1vbm90b25pY1RpbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk1vbm90b25pYygiLCBtX3ZhbHVlLCAiIHNlYykiKTsK
K30KKwordm9pZCBNb25vdG9uaWNUaW1lOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdU
Rl9Nb25vdG9uaWNUaW1lX2gKKyNkZWZpbmUgV1RGX01vbm90b25pY1RpbWVfaAorCisjaW5jbHVk
ZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBUaGUg
Y3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3RvbmljIGNs
b2NrcyBkb24ndCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3NzaWJseSBkb24ndCBjb3VudCBkb3du
dGltZS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2Fu
IHJlYXNvbiBhYm91dAorLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGlu
IG1hdGguIEl0J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywKKy8v
IG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUg
YWxsIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8gU3BlY2lmaWNhbGx5LCBNb25vdG9u
aWNUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUgdGhh
dAorLy8gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIGlz
IHRoZSBzYW1lIGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgorY2xh
c3MgTW9ub3RvbmljVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBj
bG9ja1R5cGUgPSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRo
ZSBlcG9jaC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMg
eCAtIE1vbm90b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNUaW1lKCkgeyB9CisgICAgCisgICAg
Ly8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNl
bnRzIHRpbWUgYWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNh
bWUgdGltZQorICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBmcm9tUmF3
U2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBNb25vdG9uaWNUaW1lIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBNb25vdG9uaWNU
aW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBNb25vdG9uaWNUaW1lIGluZmluaXR5KCkgeyBy
ZXR1cm4gZnJvbVJhd1NlY29uZHMoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpKTsgfQorCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJu
IFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRl
TW9ub3RvbmljVGltZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAg
CisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMobV92YWx1ZSAtIG90
aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBz
Y2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMK
KyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBNb25vdG9uaWNU
aW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29u
ZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItPShTZWNvbmRzIG90
aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9
CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE1vbm90b25pY1RpbWUgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I+KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj49KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1v
bm90b25pY1RpbWU7CisKKyNlbmRpZiAvLyBXVEZfTW9ub3RvbmljVGltZV9oCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
YXJraW5nTG90LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogCiAgICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOwogICAgIAotICAgIHN0ZDo6bXV0ZXgg
cGFya2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlv
bjsKKyAgICBNdXRleCBwYXJraW5nTG9jazsKKyAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0Nv
bmRpdGlvbjsKIAogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MgeyBudWxscHRyIH07CiAgICAgCkBA
IC01NjQsNyArNTY0LDcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFy
awogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2wo
KT4mIHZhbGlkYXRpb24sCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNs
ZWVwLAotICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIpKTsKQEAgLTU5
MiwyMCArNTkyLDE3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsK
ICAgICAKICAgICBib29sIGRpZEdldERlcXVldWVkOwogICAgIHsKLSAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hp
bGUgKG1lLT5hZGRyZXNzICYmIENsb2NrOjpub3coKSA8IHRpbWVvdXQpIHsKLSAgICAgICAgICAg
IC8vIEZhbGxpbmcgYmFjayB0byB3YWl0KCkgd29ya3MgYXJvdW5kIGEgYnVnIGluIGxpYnN0ZGMr
KyBpbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZS4gU2VlOgotICAgICAg
ICAgICAgLy8gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MDI3
Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcu
Y2dpP2lkPTU4OTMxCi0gICAgICAgICAgICBpZiAodGltZW91dCA9PSBDbG9jazo6dGltZV9wb2lu
dDo6bWF4KCkpCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2Nr
ZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0
aW9uLndhaXRfdW50aWwobG9ja2VyLCB0aW1lb3V0KTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcyAmJiB0aW1l
b3V0Lm5vd1dpdGhTYW1lQ2xvY2soKSA8IHRpbWVvdXQpIHsKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nQ29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2ss
IHRpbWVvdXQuYXBwcm94aW1hdGVXYWxsVGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIGFib3ZlLCB3
ZSBkbyB0aGlzIHRoaW5nLCB3aGljaCBpcyBoaWxhcmlvdXNseSBhd2Z1bCwgYnV0IGVuc3VyZXMg
dGhhdCB0aGUgd29yc3QgY2FzZSBpcwotICAgICAgICAgICAgLy8gYSBDUFUtZWF0aW5nIHNwaW4g
YnV0IG5vdCBhIGRlYWRsb2NrLgotICAgICAgICAgICAgbG9ja2VyLnVubG9jaygpOwotICAgICAg
ICAgICAgbG9ja2VyLmxvY2soKTsKKyAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIHRo
ZSBPUyB0byBkZWNpZGUgbm90IHRvIHdhaXQuIElmIGl0IGRvZXMgdGhhdCB0aGVuIGl0IHdpbGwg
YWxzbworICAgICAgICAgICAgLy8gZGVjaWRlIG5vdCB0byByZWxlYXNlIHRoZSBsb2NrLiBJZiB0
aGVyZSdzIGEgYnVnIGluIHRoZSB0aW1lIG1hdGgsIHRoZW4gdGhpcyBjb3VsZAorICAgICAgICAg
ICAgLy8gcmVzdWx0IGluIGEgZGVhZGxvY2suIEZsYXNoaW5nIHRoZSBsb2NrIG1lYW5zIHRoYXQg
YXQgd29yc3QgaXQncyBqdXN0IGEgQ1BVLWVhdGluZworICAgICAgICAgICAgLy8gc3Bpbi4KKyAg
ICAgICAgICAgIG1lLT5wYXJraW5nTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nTG9jay5sb2NrKCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKCFtZS0+YWRkcmVzcyB8
fCBtZS0+YWRkcmVzcyA9PSBhZGRyZXNzKTsKICAgICAgICAgZGlkR2V0RGVxdWV1ZWQgPSAhbWUt
PmFkZHJlc3M7CkBAIC02NDAsMTQgKzYzNywxNCBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBQYXJrCiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBtYXR0ZXIgd2hhdCwg
bWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgogICAgIHsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIGlmICghZGlk
RGVxdWV1ZSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBkZXF1ZXVlIG91cnNlbHZl
cywgdGhlbiBzb21lb25lIGVsc2UgZGlkLiBUaGV5IHdpbGwgc2V0IG91ciBhZGRyZXNzIHRvCiAg
ICAgICAgICAgICAvLyBudWxsLiBXZSBkb24ndCB3YW50IHRvIHByb2NlZWQgdW50aWwgdGhleSBk
byB0aGlzLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhleSBtYXkgc2V0CiAgICAgICAgICAgICAvLyBv
dXIgYWRkcmVzcyB0byBudWxsIGluIHNvbWUgZGlzdGFudCBmdXR1cmUgd2hlbiB3ZSdyZSBhbHJl
YWR5IHRyeWluZyB0byB3YWl0IGZvcgogICAgICAgICAgICAgLy8gb3RoZXIgdGhpbmdzLgogICAg
ICAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzKQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5n
Q29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRp
dGlvbi53YWl0KG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIH0KICAgICAgICAgbWUtPmFkZHJl
c3MgPSBudWxscHRyOwogICAgIH0KQEAgLTY5NSwxMSArNjkyLDExIEBAIE5FVkVSX0lOTElORSBQ
YXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGEKICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVz
cyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgIHRocmVhZERhdGEtPmFkZHJlc3Mg
PSBudWxscHRyOwogICAgICAgICB0aHJlYWREYXRhLT50b2tlbiA9IDA7CiAgICAgfQotICAgIHRo
cmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEt
PnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
NzQxLDExICs3MzgsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrT25l
SQogICAgIEFTU0VSVCh0aHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICAKICAgICB7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdM
b2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2Nr
KTsKICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgfQogICAgIC8v
IEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWREYXRhIG1heSBkaWUuIEdvb2QgdGhpbmcgd2UgaGF2
ZSBhIFJlZlB0cjw+IG9uIGl0LgotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90
aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiB9
CiAKIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2
b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTc3OSwxMCArNzc2LDEwIEBAIE5FVkVS
X0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmsKICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJl
YWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5h
ZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2Vy
KHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgICAgICB0aHJlYWREYXRhLT5hZGRy
ZXNzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29u
ZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlv
bi5zaWduYWwoKTsKICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9QYXJraW5nTG90X2gK
ICNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAogCi0jaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUg
PGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvU2Nv
cGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5LDcg
KzM5LDE1IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFBhcmtpbmdMb3QoY29uc3QgUGFya2lu
Z0xvdCYpID0gZGVsZXRlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6c3Rl
YWR5X2Nsb2NrIENsb2NrOworICAgIC8vIFBhcmtpbmdMb3Qgd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIFBhcmtpbmdMb3Qgd291bGQgYmUgYWJsZSB0
byB1c2Ugd2l0aG91dCBjb252ZXJzaW9ucy4gSXQncyBzYWQgdGhhdAorICAgIC8vIHRoaXMgaXMg
V2FsbFRpbWUgbm90IE1vbm90b25pY1RpbWUsIGJ1dCB0aGF0J3MganVzdCBob3cgT1Mgd2FpdCBm
dW5jdGlvbnMgd29yay4gSG93ZXZlciwKKyAgICAvLyBiZWNhdXNlIFBhcmtpbmdMb3QgZXZhbHVh
dGVzIHdoZXRoZXIgaXQgc2hvdWxkIHdhaXQgYnkgY2hlY2tpbmcgaWYgeW91ciB0aW1lIGhhcyBw
YXNzZWQKKyAgICAvLyB1c2luZyB3aGF0ZXZlciBjbG9jayB5b3UgdXNlZCwgc3BlY2lmeWluZyB0
aW1lb3V0cyBpbiBNb25vdG9uaWNUaW1lIGlzIHNlbWFudGljYWxseSBiZXR0ZXIuCisgICAgLy8g
Rm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHNldHMgaGlzIGNvbXB1dGVyJ3MgY2xvY2sgYmFjayBk
dXJpbmcgdGhlIHRpbWUgdGhhdCB5b3Ugd2FudGVkIHRvCisgICAgLy8gd2FpdCBmb3Igb25lIHNl
Y29uZCwgYW5kIHlvdSBzcGVjaWZpZWQgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIE1vbm90b25pY1Rp
bWUsIHRoZW4gUGFya2luZ0xvdAorICAgIC8vIHdpbGwgYmUgc21hcnQgZW5vdWdoIHRvIGtub3cg
dGhhdCB5b3VyIG9uZSBzZWNvbmQgaGFzIGVsYXBzZWQuCisgICAgdHlwZWRlZiBXYWxsVGltZSBU
aW1lOwogICAgIAogICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLiBUaGUKICAgICAv
LyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJu
cyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3ICs3Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3QgVmFsaWRh
dGlvbkZ1bmN0b3ImIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IEJlZm9yZVNsZWVwRnVuY3Rv
ciYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAg
ICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgICAgICAgICBhZGRyZXNzLApA
QCAtODksNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09
IGV4cGVjdGVkOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFtdICgpIHsgfSwKLSAgICAg
ICAgICAgIENsb2NrOjp0aW1lX3BvaW50OjptYXgoKSk7CisgICAgICAgICAgICBUaW1lOjppbmZp
bml0eSgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdpdmVuIHRvIHlvdSBh
bnl0aW1lIHlvdSB1bnBhcmtPbmUoKS4KQEAgLTE1OCw3ICsxNjYsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAgICBjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bCgpPiYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJl
Zm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KTsKKyAgICAgICAg
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KTsKICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qg
dm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+
JiBjYWxsYmFjayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TZWNvbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWNvbmRzLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgor
I2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2lu
Y2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxUaW1lLmgi
CisKK25hbWVzcGFjZSBXVEYgeworCitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvcisoV2FsbFRp
bWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK01vbm90
b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3IrKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSBTZWNvbmRzOjpvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKworV2FsbFRpbWUgU2Vj
b25kczo6b3BlcmF0b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHModmFsdWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3ItKE1vbm90b25p
Y1RpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdT
ZWNvbmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQor
CitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25kczo6b3BlcmF0b3ItKGNvbnN0IFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyLndp
dGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpOworfQorCit2b2lkIFNlY29uZHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSwgIiBzZWMiKTsKK30KKwordm9pZCBTZWNv
bmRzOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1Nl
Y29uZHNfaAorI2RlZmluZSBXVEZfU2Vjb25kc19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBNb25vdG9uaWNUaW1lOworY2xhc3MgUHJpbnRTdHJlYW07CitjbGFzcyBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGU7CitjbGFzcyBXYWxsVGltZTsKKworY2xhc3MgU2Vjb25kcyB7CitwdWJsaWM6
CisgICAgU2Vjb25kcygpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBTZWNvbmRz
KGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAor
ICAgIGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGRvdWJs
ZSBtaWxsaXNlY29uZHMoKSBjb25zdCB7IHJldHVybiBzZWNvbmRzKCkgKiAxMDAwOyB9CisgICAg
ZG91YmxlIG1pY3Jvc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1pbGxpc2Vjb25kcygpICogMTAw
MDsgfQorICAgIGRvdWJsZSBuYW5vc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1pY3Jvc2Vjb25k
cygpICogMTAwMDsgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tTWls
bGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZh
bHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBm
cm9tTWljcm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9t
TWlsbGlzZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgU2Vjb25kcyBmcm9tTmFub3NlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZyb21NaWNyb3NlY29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGluZmluaXR5KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSArIG90aGVyLnZhbHVl
KCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAtIG90aGVyLnZhbHVl
KCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEl0
IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxpbmcgYSBkdXJhdGlvbiwgbGlrZSwgIkkgd2Fu
dCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcworICAgIC8vIGxhc3QgdGltZSEiLgorICAgIFNl
Y29uZHMgb3BlcmF0b3IqKGRvdWJsZSBzY2FsYXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU2Vjb25kcyh2YWx1ZSgpICogc2NhbGFyKTsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBv
cGVyYXRvci8oZG91YmxlIHNjYWxhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNv
bmRzKHZhbHVlKCkgLyBzY2FsYXIpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCdzIHJlYXNvbmFi
bGUgdG8gdGhpbmsgYWJvdXQgcmF0aW9zIGJldHdlZW4gU2Vjb25kcy4KKyAgICBkb3VibGUgb3Bl
cmF0b3IvKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUo
KSAvIG90aGVyLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMmIG9wZXJhdG9yKj0oZG91YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzICogc2NhbGFyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
JiBvcGVyYXRvci89KGRvdWJsZSBzY2FsYXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyAvIHNjYWxhcjsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdh
bGxUaW1lIG9wZXJhdG9yKyhXYWxsVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKE1vbm90b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXYWxsVGltZSBvcGVyYXRvci0oV2FsbFRpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLShNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShT
ZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoU2Vjb25kcyBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWUgV1RGCisKK3VzaW5nIFdURjo6U2Vj
b25kczsKKworI2VuZGlmIC8vIFdURl9TZWNvbmRzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aCIKKworI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRl
ICJQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93KENsb2NrVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBy
ZXR1cm4gV2FsbFRpbWU6Om5vdygpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Cisg
ICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
KCk7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdAoreworICAgIHJldHVybiBub3coY2xvY2tUeXBl
KCkpOworfQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OndhbGxUaW1lKCkg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpXYWxsKTsK
KyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKG1fdmFsdWUpOworfQorCitNb25v
dG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bW9ub3RvbmljVGltZSgpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlwZTo6TW9ub3RvbmljKTsK
KyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd1NlY29uZHMobV92YWx1ZSk7Cit9CisK
K1dhbGxUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6YXBwcm94aW1hdGVXYWxsVGltZSgp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2Fs
bDoKKyAgICAgICAgcmV0dXJuIHdhbGxUaW1lKCk7CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90
b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKS5hcHByb3hpbWF0ZVdhbGxUaW1l
KCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFdhbGxUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
OjphcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAgICAgIHJldHVybiB3YWxsVGltZSgp
LmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9u
aWM6CisgICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUoKTsKK30KKwor
U2Vjb25kcyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLShjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhl
ci5tX3ZhbHVlKTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9y
PChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVl
IDwgb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9w
ZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBt
X3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICBy
ZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTo6b3BlcmF0b3I+PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90
aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUp
OworICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7Cit9CisKK3ZvaWQgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KG1fdHlwZSwgIigiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBMb2NrIGZha2VMb2Nr
OworICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOworICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7CisgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssICp0aGlz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL1dURi93dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+CisjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgeworcHVibGljOgorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgpIHsgfQor
ICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZShXYWxsVGltZSB0aW1lKQorICAgICAg
ICA6IG1fdmFsdWUodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpCisgICAgICAgICwg
bV90eXBlKENsb2NrVHlwZTo6V2FsbCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZShNb25vdG9uaWNUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1ZSh0
aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5cGUoQ2xvY2tU
eXBlOjpNb25vdG9uaWMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIGZyb21SYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQubV90eXBlID0gdHlw
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBzZWNv
bmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICBD
bG9ja1R5cGUgY2xvY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93KENs
b2NrVHlwZSk7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSBub3dXaXRoU2FtZUNsb2NrKCkgY29uc3Q7CisgICAgCisgICAgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmZyb21S
YXdTZWNvbmRzKHZhbHVlLCBjbG9ja1R5cGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2Vy
dHMgdGhhdCB0aGUgdGltZSBpcyBvZiB0aGUgdHlwZSB5b3Ugd2FudC4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV2FsbFRpbWUgd2FsbFRpbWUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgTW9ub3RvbmljVGltZSBtb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1RpbWUo
KSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJh
dG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1l
Q2xvY2tBbmRSYXdTZWNvbmRzKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAg
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKG1f
dmFsdWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNj
YWxhciBhbmQgc2NhbGFycyBjYW4gYmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20g
YWxnZWJyYWljCisgICAgLy8gdHJhbnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9Cisg
ICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhl
cikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQor
ICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBTZWNvbmRzIG9wZXJhdG9yLShjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWUKKyAgICAgICAgICAgICYmIG1fdHlw
ZSA9PSBvdGhlci5tX3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBUbyBkbyByZWxh
dGl2ZSBjb21wYXJpc29ucywgeW91IG11c3QgYmUgdXNpbmcgdGltZXMgd2l0aCB0aGUgc2FtZSBj
bG9jayB0eXBlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPChjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGRvdWJsZSBtX3ZhbHVlIHsgMCB9OworICAgIENsb2NrVHlwZSBtX3R5cGUgeyBDbG9ja1R5cGU6
OldhbGwgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTsKKworI2VuZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGVfaApJbmRleDogU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9XYWxsVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5j
bHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVk
ZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXYWxs
VGltZSBXYWxsVGltZTo6bm93KCkKK3sKKyAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoY3VycmVu
dFRpbWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgV2FsbFRpbWU6OmFwcHJveGltYXRlTW9ub3Rv
bmljVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBNb25vdG9uaWNU
aW1lOjpub3coKTsKK30KKwordm9pZCBXYWxsVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiV2FsbCgiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwor
dm9pZCBXYWxsVGltZTo6c2xlZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSgqdGhpcykuc2xlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDog
U291cmNlL1dURi93dGYvV2FsbFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9X
YWxsVGltZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfV2FsbFRpbWVfaAorI2RlZmluZSBXVEZf
V2FsbFRpbWVfaAorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9uaWNUaW1lOworY2xh
c3MgUHJpbnRTdHJlYW07CisKKy8vIFRoZSBjdXJyZW50IHRpbWUgYWNjb3JkaW5nIHRvIGEgd2Fs
bCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuIFRoaXMgdXNlcyBmbG9hdGluZyBwb2ludAor
Ly8gaW50ZXJuYWxseSBzbyB0aGF0IHlvdSBjYW4gcmVhc29uIGFib3V0IGluZmluaXR5IGFuZCBv
dGhlciB0aGluZ3MgdGhhdCBhcmlzZSBpbiBtYXRoLiBJdCdzCisvLyBhY2NlcHRhYmxlIHRvIHVz
ZSB0aGlzIHRvIHdyYXAgTmFOIHRpbWVzLCBuZWdhdGl2ZSB0aW1lcywgYW5kIGluZmluaXRlIHRp
bWVzLCBzbyBsb25nIGFzIHRoZXkKKy8vIGFyZSByZWxhdGl2ZSB0byB0aGUgc2FtZSBjbG9jay4g
U3BlY2lmaWNhbGx5LCBXYWxsVGltZSBzaG91bGQgYmUgdXNlZCBpbiBhZ3JlZW1lbnQgd2l0aCB0
aGUKKy8vIHByaW5jaXBsZSB0aGF0IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkgaXMgdGhlIHNhbWUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgorY2xhc3MgV2FsbFRp
bWUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBDbG9ja1R5cGUgY2xvY2tUeXBlID0gQ2xv
Y2tUeXBlOjpXYWxsOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGVwb2NoLiBTbywgeC5zZWNv
bmRzU2luY2VFcG9jaCgpIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB4IC0gV2FsbFRpbWUoKS4KKyAg
ICBXYWxsVGltZSgpIHsgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyBmb3Ig
c3VyZSB0aGF0IHRoZSBkb3VibGUgcmVwcmVzZW50cyB0aW1lIGFjY29yZGluZyB0bworICAgIC8v
IFdURjo6Y3VycmVudFRpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJl
IGZyb20gdGhlIHNhbWUgdGltZSBzb3VyY2UuCisgICAgc3RhdGljIFdhbGxUaW1lIGZyb21SYXdT
ZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXYWxsVGltZSBub3coKTsK
KyAgICAKKyAgICBzdGF0aWMgV2FsbFRpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9tUmF3U2Vj
b25kcyhzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisgICAgCisg
ICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92
YWx1ZSk7IH0KKyAgICAKKyAgICBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBh
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgV2FsbFRp
bWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbVJhd1NlY29uZHMobV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAg
ICBXYWxsVGltZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQor
ICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQg
YXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0aW9u
cy4gU28sIHdlIGFsbG93IGl0LgorICAgIFdhbGxUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBXYWxsVGltZSYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV2FsbFRpbWUm
IG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3ItKFdhbGxU
aW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAt
IG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oV2FsbFRp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oV2FsbFRpbWUgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChXYWxsVGltZSBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj4oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I8PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+
PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2FsbFRpbWU7CisKKyNl
bmRpZiAvLyBXVEZfV2FsbFRpbWVfaApJbmRleDogU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5h
cnlTZW1hcGhvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmlu
YXJ5U2VtYXBob3JlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhy
ZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxMyArNDUsMTQgQEAg
dm9pZCBCaW5hcnlTZW1hcGhvcmU6OnNpZ25hbCgpCiAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7
CiB9CiAKLWJvb2wgQmluYXJ5U2VtYXBob3JlOjp3YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCiti
b29sIEJpbmFyeVNlbWFwaG9yZTo6d2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgYWJzb2x1
dGVUaW1lKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKIAogICAgIGJvb2wg
dGltZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAoIW1faXNTZXQpIHsKLSAgICAgICAgdGltZWRP
dXQgPSAhbV9jb25kaXRpb24udGltZWRXYWl0KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAg
ICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgIG1fbXV0
ZXgsIGFic29sdXRlVGltZS5hcHByb3hpbWF0ZVdhbGxUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpKTsKICAgICAgICAgaWYgKHRpbWVkT3V0KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUu
aAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1h
cGhvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBCaW5hcnlTZW1hcGhvcmVfaAogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzksNyArNDAsNyBAQCBw
dWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5CaW5hcnlTZW1hcGhvcmUoKTsKIAogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNpZ25hbCgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHdhaXQoZG91YmxlIGFic29sdXRlVGltZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgd2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUpOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE2LTEx
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJr
aW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86
OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLiBJIHdp
bGwgd3JpdGUgdW5pdCB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogZmlsZWFwaS9UaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OmJsb2JTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGlt
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRUaW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL1RocmVhZFRpbWVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRUaW1lcnM6OnVw
ZGF0ZVNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9NYWluVGhyZWFkU2hhcmVk
VGltZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNl
dEZpcmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRU
aW1lckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNl
dEZpcmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVk
VGltZXJHTGliLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTWFpblRocmVhZFNoYXJl
ZFRpbWVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cnVuSW5Nb2RlKToKKwogMjAxNi0xMS0w
MyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMjA4MzAyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVC
bG9iUmVnaXN0cgogICAgICAgICAgICAgcmVzdWx0U2l6ZSA9IGJsb2JSZWdpc3RyeSgpLmJsb2JT
aXplKHVybCk7CiAgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgICAgIH0pOwot
ICAgICAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgp
KTsKKyAgICAgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0U2l6ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01haW5UaHJlYWRTaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBNYWluVGhyZWFkU2hhcmVkVGltZXImIHNpbmdsZXRvbigpOwogCiAg
ICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0RmlyZUludGVydmFsKFNlY29uZHMpIG92ZXJyaWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CiAK
ICAgICAvLyBUaGUgZmlyZSBpbnRlcnZhbCBpcyBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IG1vbm90b25pYyBjbG9jayB0aW1lLgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlSW50
ZXJ2YWwoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNv
bmRzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZSgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
VGltZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRU
aW1lcnMuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
aHJlYWRUaW1lcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgVGhyZWFkVGlt
ZXJzOjp1cGRhdGVTaGFyZWRUaW1lcigpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IAogICAgICAgICBtX3BlbmRpbmdTaGFyZWRUaW1lckZpcmVUaW1lID0gbmV4dEZpcmVUaW1l
OwotICAgICAgICBtX3NoYXJlZFRpbWVyLT5zZXRGaXJlSW50ZXJ2YWwoc3RkOjptYXgobmV4dEZp
cmVUaW1lIC0gY3VycmVudE1vbm90b25pY1RpbWUsIDAuMCkpOworICAgICAgICBtX3NoYXJlZFRp
bWVyLT5zZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyhzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJy
ZW50TW9ub3RvbmljVGltZSwgMC4wKSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvTWFpblRocmVh
ZFNoYXJlZFRpbWVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTkzLDExICs5MywxMSBAQCB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6aW52YWxpZGF0ZSgp
CiAgICAgc2hhcmVkVGltZXIgPSBudWxscHRyOwogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRU
aW1lcjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBBU1NF
UlQobV9maXJlZEZ1bmN0aW9uKTsKIAotICAgIENGQWJzb2x1dGVUaW1lIGZpcmVEYXRlID0gQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbDsKKyAgICBDRkFic29sdXRlVGltZSBm
aXJlRGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWwudmFsdWUoKTsK
ICAgICBpZiAoIXNoYXJlZFRpbWVyKSB7CiAgICAgICAgIHNoYXJlZFRpbWVyID0gQ0ZSdW5Mb29w
VGltZXJDcmVhdGUobnVsbHB0ciwgZmlyZURhdGUsIGtDRlRpbWVJbnRlcnZhbERpc3RhbnRGdXR1
cmUsIDAsIDAsIHRpbWVyRmlyZWQsIG51bGxwdHIpOwogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hh
cmVkVGltZXJFZmwuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Myw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMjAwOCBBZm9uc28gUmFiZWxvIENvc3RhIEpy
LgogICogICAgICAgICAgIChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
ICAqICAgICAgICAgICAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEwICs1NCwxMCBAQCB2b2lkIE1haW5UaHJlYWRT
aGFyZWRUaW1lcjo6c3RvcCgpCiAgICAgfQogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1l
cjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJl
ZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBzdG9wKCk7
Ci0gICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRlcnZhbCwgdGltZXJF
dmVudCwgbnVsbHB0cik7CisgICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChp
bnRlcnZhbC52YWx1ZSgpLCB0aW1lckV2ZW50LCBudWxscHRyKTsKIH0KIAogdm9pZCBNYWluVGhy
ZWFkU2hhcmVkVGltZXI6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJl
YWRTaGFyZWRUaW1lckdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zOSwxMCArMzksMTAgQEAgTWFp
blRocmVhZFNoYXJlZFRpbWVyOjpNYWluVGhyZWFkU2hhcmVkVAogICAgIG1fdGltZXIuc2V0UHJp
b3JpdHkoR19QUklPUklUWV9ISUdIX0lETEUgKyAyMCk7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhy
ZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAg
IEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24pOwotICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGludGVy
dmFsKTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbC52YWx1ZSgpKTsKIH0KIAog
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnN0b3AoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhy
ZWFkU2hhcmVkVGltZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSwxMiArMTIxLDEyIEBA
IHN0YXRpYyB2b2lkIE5UQVBJIHF1ZXVlVGltZXJQcm9jKFBWT0lELCAKICAgICAgICAgUG9zdE1l
c3NhZ2UodGltZXJXaW5kb3dIYW5kbGUsIHRpbWVyRmlyZWRNZXNzYWdlLCAwLCAwKTsKIH0KIAot
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2
YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKFNlY29uZHMg
aW50ZXJ2YWxTZWNvbmRzKQogewogICAgIEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24pOwogCisgICAg
ZG91YmxlIGludGVydmFsID0gaW50ZXJ2YWxJblNlY29uZHMubWlsbGlzZWNvbmRzKCk7CiAgICAg
dW5zaWduZWQgaW50ZXJ2YWxJbk1TOwotICAgIGludGVydmFsICo9IDEwMDA7CiAgICAgaWYgKGlu
dGVydmFsID4gVVNFUl9USU1FUl9NQVhJTVVNKQogICAgICAgICBpbnRlcnZhbEluTVMgPSBVU0VS
X1RJTUVSX01BWElNVU07CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJSdW5Mb29wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlclJ1bkxvb3AuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclJ1bkxvb3AuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDksMTYgKzUwLDE2IEBAIGNs
YXNzIFdvcmtlclNoYXJlZFRpbWVyIGZpbmFsIDogcHVibGljIFMKIHB1YmxpYzoKICAgICAvLyBT
aGFyZWRUaW1lciBpbnRlcmZhY2UuCiAgICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKSBvdmVycmlkZSB7IG1fc2hhcmVkVGltZXJGdW5jdGlv
biA9IFdURk1vdmUoZnVuY3Rpb24pOyB9Ci0gICAgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoZG91Ymxl
IGludGVydmFsKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gaW50ZXJ2YWwgKyBjdXJyZW50
VGltZSgpOyB9Ci0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGUgeyBtX25leHRGaXJlVGltZSA9IDA7
IH0KKyAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKSBvdmVycmlkZSB7
IG1fbmV4dEZpcmVUaW1lID0gaW50ZXJ2YWwgKyBXYWxsVGltZTo6bm93KCk7IH0KKyAgICB2b2lk
IHN0b3AoKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0gV2FsbFRpbWUoKTsgfQogCiAgICAg
Ym9vbCBpc0FjdGl2ZSgpIHsgcmV0dXJuIG1fc2hhcmVkVGltZXJGdW5jdGlvbiAmJiBtX25leHRG
aXJlVGltZTsgfQotICAgIGRvdWJsZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1l
OyB9CisgICAgV2FsbFRpbWUgZmlyZVRpbWUoKSB7IHJldHVybiBtX25leHRGaXJlVGltZTsgfQog
ICAgIHZvaWQgZmlyZSgpIHsgbV9zaGFyZWRUaW1lckZ1bmN0aW9uKCk7IH0KIAogcHJpdmF0ZToK
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9zaGFyZWRUaW1lckZ1bmN0aW9uOwotICAgIGRv
dWJsZSBtX25leHRGaXJlVGltZSB7IDAgfTsKKyAgICBXYWxsVGltZSBtX25leHRGaXJlVGltZTsK
IH07CiAKIGNsYXNzIE1vZGVQcmVkaWNhdGUgewpAQCAtMTU3LDE1ICsxNTgsMTYgQEAgTWVzc2Fn
ZVF1ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydQogICAgICAgICBnX21haW5fY29udGV4
dF9pdGVyYXRpb24obWFpbkNvbnRleHQsIEZBTFNFKTsKICNlbmRpZgogCi0gICAgZG91YmxlIGRl
YWRsaW5lID0gTWVzc2FnZVF1ZXVlPFRhc2s+OjppbmZpbml0ZVRpbWUoKTsKKyAgICBXYWxsVGlt
ZSBkZWFkbGluZSA9IFdhbGxUaW1lOjppbmZpbml0eSgpOwogCiAjaWYgVVNFKENGKQogICAgIENG
QWJzb2x1dGVUaW1lIG5leHRDRlJ1bkxvb3BUaW1lckZpcmVEYXRlID0gQ0ZSdW5Mb29wR2V0TmV4
dFRpbWVyRmlyZURhdGUoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1v
ZGUpOwogICAgIGRvdWJsZSB0aW1lVW50aWxOZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMgPSBu
ZXh0Q0ZSdW5Mb29wVGltZXJGaXJlRGF0ZSAtIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwot
ICAgIGRlYWRsaW5lID0gY3VycmVudFRpbWUoKSArIHN0ZDo6bWF4KDAuMCwgdGltZVVudGlsTmV4
dENGUnVuTG9vcFRpbWVySW5TZWNvbmRzKTsKKyAgICBkZWFkbGluZSA9IFdhbGxUaW1lOjpub3co
KSArIHN0ZDo6bWF4KAorICAgICAgICBTZWNvbmRzKDApLCBTZWNvbmRzKHRpbWVVbnRpbE5leHRD
RlJ1bkxvb3BUaW1lckluU2Vjb25kcykpOwogI2VuZGlmCiAKLSAgICBkb3VibGUgYWJzb2x1dGVU
aW1lID0gMC4wOworICAgIFdhbGxUaW1lIGFic29sdXRlVGltZTsKICAgICBpZiAod2FpdE1vZGUg
PT0gV2FpdEZvck1lc3NhZ2UpIHsKICAgICAgICAgaWYgKHByZWRpY2F0ZS5pc0RlZmF1bHRNb2Rl
KCkgJiYgbV9zaGFyZWRUaW1lci0+aXNBY3RpdmUoKSkKICAgICAgICAgICAgIGFic29sdXRlVGlt
ZSA9IHN0ZDo6bWluKGRlYWRsaW5lLCBtX3NoYXJlZFRpbWVyLT5maXJlVGltZSgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9w
IHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFy
ZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uOjpTeW5jTWVzc2FnZVN0YXRlOjp3YWl0KToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp0aW1lb3V0
UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyk6CisgICAgICAgIChJUEM6OkNvbm5l
Y3Rpb246OndhaXRGb3JNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZFN5
bmNNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseSk6
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6c2VuZFN5bmMpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5k
ZXIuaDoKKyAgICAgICAgKElQQzo6TWVzc2FnZVNlbmRlcjo6c2VuZFN5bmMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9DaGlsZFByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpDaGlsZFBy
b2Nlc3NQcm94eTo6c2VuZFN5bmMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSk6CisgICAgICAgICogVUlQcm9jZXNz
L1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpzZW5k
UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW06
CisgICAgICAgICgtW1dLT25lU2hvdERpc3BsYXlMaW5rSGFuZGxlciBkaXNwbGF5TGlua0ZpcmVk
Ol0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojpj
b21taXRMYXllclRyZWUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJv
eHkubW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJv
eHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyIGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJXaWxsQmVnaW5Bbmlt
YXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGF0YVNlbGVjdGlvbkZvclBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlYWRTZWxlY3Rpb25Gcm9t
UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkRGVsYXlX
aW5kb3dPcmRlcmluZ0ZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojph
Y2NlcHRzRmlyc3RNb3VzZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1
bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xp
ZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6cnVuSmF2YVNjcmlwdFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6cHJpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVk
RGF0YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVhY2hl
ZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKToKKwogMjAxNi0xMS0w
MyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmlu
dGluZyB0byBQREYgc2hvdWxkIHByb2R1Y2UgaW50ZXJuYWwgbGlua3Mgd2hlbiBIVE1MIGhhcyBp
bnRlcm5hbCBsaW5rcwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0
aW9uLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbV93YWl0Rm9yU3luY1JlcGx5U2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH0KIAotICAg
IGJvb2wgd2FpdChkb3VibGUgYWJzb2x1dGVUaW1lKQorICAgIGJvb2wgd2FpdChUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUgYWJzb2x1dGVUaW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fd2Fp
dEZvclN5bmNSZXBseVNlbWFwaG9yZS53YWl0KGFic29sdXRlVGltZSk7CiAgICAgfQpAQCAtMzc2
LDcgKzM3Niw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWUKICAg
ICAgICAgYXV0byB3cmFwcGVkTWVzc2FnZSA9IGNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcigiSVBD
IiwgIldyYXBwZWRBc3luY01lc3NhZ2VGb3JUZXN0aW5nIiwgZW5jb2Rlci0+ZGVzdGluYXRpb25J
RCgpLCBzeW5jUmVxdWVzdElEKTsKICAgICAgICAgd3JhcHBlZE1lc3NhZ2UtPnNldEZ1bGx5U3lu
Y2hyb25vdXNNb2RlRm9yVGVzdGluZygpOwogICAgICAgICB3cmFwcGVkTWVzc2FnZS0+d3JhcEZv
clRlc3RpbmcoV1RGTW92ZShlbmNvZGVyKSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxi
b29sPihzZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92ZSh3cmFwcGVkTWVzc2Fn
ZSksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCB7IH0pKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGJvb2w+KHNlbmRTeW5jTWVzc2FnZShzeW5jUmVxdWVzdElELCBXVEZN
b3ZlKHdyYXBwZWRNZXNzYWdlKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgeyB9KSk7CiAgICAgfQog
CiAgICAgaWYgKHNlbmRPcHRpb25zLmNvbnRhaW5zKFNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSkKQEAgLTQyMCwxMiArNDIwLDEyIEBAIGJvb2wg
Q29ubmVjdGlvbjo6c2VuZFN5bmNSZXBseShzdGQ6OnVuaXEKICAgICByZXR1cm4gc2VuZE1lc3Nh
Z2UoV1RGTW92ZShlbmNvZGVyKSwgeyB9KTsKIH0KIAotc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBDb25uZWN0aW9uOjp0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyhz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQpIGNvbnN0CitTZWNvbmRzIENvbm5lY3Rp
b246OnRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKFNlY29uZHMgdGlt
ZW91dCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcgPyBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSA6IHRpbWVvdXQ7CisgICAgcmV0dXJuIG1f
aWdub3JlVGltZW91dHNGb3JUZXN0aW5nID8gU2Vjb25kczo6aW5maW5pdHkoKSA6IHRpbWVvdXQ7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2Fn
ZShTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKK3N0
ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZShTdHJpbmdS
ZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1l
LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0
Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCkBAIC00NzAsOSArNDcwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5l
Y3Rpb246OndhaQogICAgIH0KIAogICAgIC8vIENsYW1wIHRoZSB0aW1lb3V0IHRvIGhvd2V2ZXIg
bXVjaCB0aW1lIGlzIHJlbWFpbmluZyBvbiBvdXIgY2xvY2suCi0gICAgYXV0byBub3cgPSBDb25k
aXRpb246OkNsb2NrOjpub3coKTsKLSAgICBhdXRvIHJlbWFpbmluZ0Nsb2NrVGltZSA9IHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KENvbmRpdGlv
bjo6Q2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpIC0gbm93KTsKLSAgICBhdXRvIGFic29sdXRlVGlt
ZW91dCA9IG5vdyArIHN0ZDo6bWluKHJlbWFpbmluZ0Nsb2NrVGltZSwgdGltZW91dCk7CisgICAg
TW9ub3RvbmljVGltZSBhYnNvbHV0ZVRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpub3coKSArIHRp
bWVvdXQ7CiAKICAgICAvLyBOb3cgd2FpdCBmb3IgaXQgdG8gYmUgc2V0LgogICAgIHdoaWxlICh0
cnVlKSB7CkBAIC00OTYsNyArNDk0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5l
Y3Rpb246OndhaQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVj
b2Rlcj4gQ29ubmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQs
IHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQor
c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZSh1aW50
NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlciwgU2Vj
b25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC01NDEsMTAgKzUzOSwxMCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6c2VuCiAgICAgcmV0dXJuIHJl
cGx5OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvclN5
bmNSZXBseSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQorc3Rk
Ojp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkodWludDY0
X3Qgc3luY1JlcXVlc3RJRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRp
b24+IHNlbmRTeW5jT3B0aW9ucykKIHsKICAgICB0aW1lb3V0ID0gdGltZW91dFJlc3BlY3RpbmdJ
Z25vcmVUaW1lb3V0c0ZvclRlc3RpbmcodGltZW91dCk7Ci0gICAgZG91YmxlIGFic29sdXRlVGlt
ZSA9IGN1cnJlbnRUaW1lKCkgKyAodGltZW91dC5jb3VudCgpIC8gMTAwMC4wKTsKKyAgICBXYWxs
VGltZSBhYnNvbHV0ZVRpbWUgPSBXYWxsVGltZTo6bm93KCkgKyB0aW1lb3V0OwogCiAgICAgd2ls
bFNlbmRTeW5jTWVzc2FnZShzZW5kU3luY09wdGlvbnMpOwogICAgIApJbmRleDogU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAg
LTE2NiwxMyArMTY2LDEzIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJv
b2wgc2VuZChUJiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgT3B0aW9uU2V0PFNl
bmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNlbmRXaXRoUmVwbHkoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIEZ1
bmN0aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNwYXRjaGVyLCBGdW5jdGlvbjx2b2lkIChPcHRpb25h
bDx0eXBlbmFtZSBDb2RpbmdUeXBlPHR5cGVuYW1lIFQ6OlJlcGx5Pjo6VHlwZT4pPiYmIHJlcGx5
SGFuZGxlcik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVz
c2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kczo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0g
eyB9KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0
eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRz
IHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+
IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCB3
YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNv
bmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucyA9IHsg
fSk7CiAKICAgICBib29sIHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiwgT3B0
aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlV2l0
aFJlcGx5KHVpbnQ2NF90IHJlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBGdW5j
dGlvbkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlx
dWVfcHRyPERlY29kZXI+KT4mJiByZXBseUhhbmRsZXIpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxF
bmNvZGVyPiBjcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGlu
YXRpb25JRCwgdWludDY0X3QmIHN5bmNSZXF1ZXN0SUQpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxE
ZWNvZGVyPiBzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlx
dWVfcHRyPEVuY29kZXI+LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlv
blNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGVjb2Rlcj4gc2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6
dW5pcXVlX3B0cjxFbmNvZGVyPiwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNP
cHRpb24+IHNlbmRTeW5jT3B0aW9ucyk7CiAgICAgYm9vbCBzZW5kU3luY1JlcGx5KHN0ZDo6dW5p
cXVlX3B0cjxFbmNvZGVyPik7CiAKICAgICB2b2lkIHdha2VVcFJ1bkxvb3AoKTsKQEAgLTIwOCw5
ICsyMDgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZp
ZXIpOwogICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CiAgICAgCi0gICAgc3RkOjp1bmlx
dWVfcHRyPERlY29kZXI+IHdhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVj
ZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRG
b3JPcHRpb24+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvck1lc3NhZ2Uo
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNz
YWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25T
ZXQ8V2FpdEZvck9wdGlvbj4pOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3
YWl0Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7CisgICAgc3RkOjp1
bmlxdWVfcHRyPERlY29kZXI+IHdhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1JlcXVlc3RJ
RCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKIAogICAgIC8v
IENhbGxlZCBvbiB0aGUgY29ubmVjdGlvbiB3b3JrIHF1ZXVlLgogICAgIHZvaWQgcHJvY2Vzc0lu
Y29taW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4pOwpAQCAtMjM4LDcgKzIzOCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsU2VuZFN5bmNNZXNzYWdlKE9wdGlvblNldDxTZW5k
U3luY09wdGlvbj4pOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2Vu
ZFN5bmNPcHRpb24+KTsKIAotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dFJl
c3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3Rpbmcoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cykgY29uc3Q7CisgICAgU2Vjb25kcyB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9y
VGVzdGluZyhTZWNvbmRzKSBjb25zdDsKICAgICAKICAgICBDbGllbnQmIG1fY2xpZW50OwogICAg
IGJvb2wgbV9pc1NlcnZlcjsKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIENvbm5lY3Rpb246OnNl
bmRXaXRoUmVwbHkoVCYmIG1lc3NhCiAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGJvb2wgQ29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5
JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNlbmRTeW5jKFQmJiBtZXNzYWdl
LCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNv
bmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQog
ewogICAgIENPTVBJTEVfQVNTRVJUKFQ6OmlzU3luYywgU3luY01lc3NhZ2VFeHBlY3RlZCk7CiAK
QEAgLTM4OSw3ICszODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246
OnNlCiAgICAgcmV0dXJuIHJlcGx5RGVjb2Rlci0+ZGVjb2RlKHJlcGx5KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlh
dGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRp
bWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRl
bHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2Fp
dEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERlY29k
ZXI+IGRlY29kZXIgPSB3YWl0Rm9yTWVzc2FnZShUOjpyZWNlaXZlck5hbWUoKSwgVDo6bmFtZSgp
LCBkZXN0aW5hdGlvbklELCB0aW1lb3V0LCB3YWl0Rm9yT3B0aW9ucyk7CiAgICAgaWYgKCFkZWNv
ZGVyKQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5o
CShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2Fn
ZVNlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2Us
IHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGlt
ZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKKyAgICBib29sIHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNv
bmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9u
cyA9IHsgfSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoVDo6aXNTeW5jLCAiTWVzc2Fn
ZSBpcyBub3Qgc3luYyEiKTsKIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0
eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjpt
YXgoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCisg
ICAgYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwg
dWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5p
dHkoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCiAg
ICAgewogICAgICAgICBBU1NFUlQobWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM2LDcgKzIzNiw3IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm8K
ICAgICAvLyBjaG9vc2UgdGhlIG1vc3QgcmVjZW50IG9uZSwgb3IgdGhlIG9uZSB0aGF0IGlzIGNs
b3Nlc3QgdG8gb3VyIGN1cnJlbnQgc2l6ZS4KIAogICAgIC8vIFRoZSB0aW1lb3V0LCBpbiBzZWNv
bmRzLCB3ZSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
IG1lc3NhZ2Ugd2hlbiB3ZSdyZSBhc2tlZCB0byBwYWludC4KLSAgICBtX3dlYlBhZ2VQcm94eS5w
cm9jZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNz
YWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU+KG1fd2Vi
UGFnZVByb3h5LnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAg
IG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRj
aEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMoNTAwKSk7CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNz
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2hpbGRQcm9j
ZXNzUHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NoaWxkUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgdGVybWluYXRlKCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29s
IHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxJUEM6
OlNlbmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCB1aW50NjRf
dCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6
OmNocm9ubzo6c2Vjb25kcygxKSwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRT
eW5jT3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3lu
YyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25J
RCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kcygxKSwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNP
cHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24qIGNv
bm5lY3Rpb24oKSBjb25zdAogICAgIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIENoaWxkUHJv
Y2Vzc1Byb3h5OjpzZW5kKFQmJiBtZXNzYWdlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFU+IAot
Ym9vbCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZFN5bmMoVSYmIG1lc3NhZ2UsIHR5cGVuYW1lIFU6
OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5j
T3B0aW9ucykKK2Jvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBtZXNzYWdlLCB0
eXBlbmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMp
CiB7CiAgICAgQ09NUElMRV9BU1NFUlQoVTo6aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCiAgICAgLy8gVGhlIHRp
bWVvdXQgd2UgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVHZW9tZXRyeSBtZXNzYWdl
LgotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSB7IHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzKDUwMCk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkgeyByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25k
cyg1MDApOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRh
dGUoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
VGltZW91dCgpKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlV
cGRhdGUoU2Vjb25kcyA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIG1pbmltdW1MYXlvdXRTaXplRGlkQ2hhbmdlKCkgeyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjA4MzU4KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZFByb2Nl
c3NXaWxsU3VzCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwot
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5KCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5OjpSZXBseShoYW5kbGVkKSwgMCwgc3RkOjpjaHJvbm86OnNlY29uZHMoMSkpOworICAgIHNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
KCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5OjpS
ZXBseShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
OjpzZW5kUHJlcGFyZVRvU3VzcGVuZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSBhbnkgb25nb2luZyB3b3JrIGluIG91ciBxdWV1ZSBpcyBmaW5pc2hlZCBiZWZvcmUgd2Ug
dGVybWluYXRlLgogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2Vt
YXBob3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2Vt
YXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogfQogCiBTdHJpbmcgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJzaXN0ZW50U3RvcmFnZVBhdGgoY29uc3QgU3RyaW5n
JiBsYWJlbCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZFByb2Nlc3NXaWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dp
bGxTdXNwZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0ZDo6Y2hyb25vOjpzZWNv
bmRzKDEpKTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5OjpSZXBseShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9
CiAgICAgCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNwZW5kKCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQzLDcgKzg0Myw3
IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm0KIAogICAgICAgICBz
ZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2VtYXBob3JlLndhaXQoc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6
OmluZmluaXR5KCkpOwogfQogCiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VN
YW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50
NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3
OCw3ICs2NzgsNyBAQCAtIChOU1VJbnRlZ2VyKV93a19wYWdlQ291bnRGb3JQcmludEZvcm1hCiAt
IChDR1BERkRvY3VtZW50UmVmKV93a19wcmludGVkRG9jdW1lbnQKIHsKICAgICBpZiAoX2lzUHJp
bnRpbmdUb1BERikgewotICAgICAgICBpZiAoIV9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigp
LT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
cmF3VG9QREZDYWxsYmFjaz4oX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzOjptYXgoKSkpIHsKKyAgICAgICAgaWYgKCFfcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24o
KS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RHJhd1RvUERGQ2FsbGJhY2s+KF9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5pZmluaXR5KCkp
KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5Miw3ICsyOTIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3luY2hyb25pemVEeW5hbWljVmll
CiAgICAgICAgIGRvdWJsZSBuZXdTY2FsZTsKICAgICAgICAgRmxvYXRQb2ludCBuZXdTY3JvbGxQ
b3NpdGlvbjsKICAgICAgICAgdWludDY0X3QgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25J
RDsKLSAgICAgICAgaWYgKG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlN5
bmNocm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlKCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTeW5j
aHJvbml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZTo6UmVwbHkobmV3U2NhbGUsIG5ld1Njcm9sbFBv
c2l0aW9uLCBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEKSwgbV9wYWdlSUQsIHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDIpKSkgeworICAgICAgICBpZiAobV9wcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZTo6U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGUoKSwgTWVz
c2FnZXM6OldlYlBhZ2U6OlN5bmNocm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlOjpSZXBseShu
ZXdTY2FsZSwgbmV3U2Nyb2xsUG9zaXRpb24sIG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0aW9u
SUQpLCBtX3BhZ2VJRCwgU2Vjb25kcygyKSkpIHsKICAgICAgICAgICAgIG1fZHluYW1pY1ZpZXdw
b3J0U2l6ZVVwZGF0ZVdhaXRpbmdGb3JUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgIG1fZHlu
YW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUxheWVyVHJlZVRyYW5zYWN0aW9uSUQgPSBuZXh0VmFsaWRM
YXllclRyZWVUcmFuc2FjdGlvbklEOwogICAgICAgICAgICAgbV9wYWdlQ2xpZW50LmR5bmFtaWNW
aWV3cG9ydFVwZGF0ZUNoYW5nZWRUYXJnZXQobmV3U2NhbGUsIG5ld1Njcm9sbFBvc2l0aW9uLCBu
ZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IG5leHRMYXllclRyZWVU
cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nTGF5ZXJUcmVlVHJhbnNhY3Rp
b25JRCArIDE7IH0KICAgICB1aW50NjRfdCBsYXN0Q29tbWl0dGVkTGF5ZXJUcmVlVHJhbnNhY3Rp
b25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JREZvclBlbmRpbmdDQUNvbW1pdDsg
fQogCi0gICAgdm9pZCBkaWRSZWZyZXNoRGlzcGxheShkb3VibGUgdGltZXN0YW1wKTsKKyAgICB2
b2lkIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzaXplRGlkQ2hh
bmdlKCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSw3ICs4
MSw3IEBAIC0gKHZvaWQpZGVhbGxvYwogLSAodm9pZClkaXNwbGF5TGlua0ZpcmVkOihDQURpc3Bs
YXlMaW5rICopc2VuZGVyCiB7CiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0gICAgX2RyYXdp
bmdBcmVhUHJveHktPmRpZFJlZnJlc2hEaXNwbGF5KHNlbmRlci50aW1lc3RhbXApOworICAgIF9k
cmF3aW5nQXJlYVByb3h5LT5kaWRSZWZyZXNoRGlzcGxheSgpOwogfQogCiAtICh2b2lkKWludmFs
aWRhdGUKQEAgLTIyOCwxMSArMjI4LDExIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eTo6Y28KIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBpZiAoc3RkOjpleGNoYW5nZSht
X2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSwgTmVlZHNEaWRVcGRhdGUpID09IE1pc3NlZENvbW1pdCkK
LSAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
OworICAgICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwogICAgIFttX2Rpc3BsYXlMaW5rSGFuZGxl
ciBzY2hlZHVsZV07CiAjZWxzZQogICAgIG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlID0gTmVlZHNE
aWRVcGRhdGU7Ci0gICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpOworICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRv
IG1pbGVzdG9uZXMgPSBsYXllclRyZWVUcmFuc2FjdGlvbi5uZXdseVJlYWNoZWRMYXlvdXRNaWxl
c3RvbmVzKCkpCkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5OjppbgogICAgIH0KIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheShkb3VibGUpCit2b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KCkKIHsKICAgICBpZiAoIW1fd2ViUGFn
ZVByb3h5LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDI2LDE2ICs0MjYsMTYgQEAg
dm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp3YQogICAgIC8vIFdlIG11c3Qg
c2VuZCB0aGUgZGlkVXBkYXRlIG1lc3NhZ2UgYmVmb3JlIGJsb2NraW5nIG9uIHRoZSBuZXh0IGNv
bW1pdCwgb3RoZXJ3aXNlCiAgICAgLy8gd2UgY2FuIGJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgbmV4
dCBjb21taXQgd29uJ3QgY29tZSB1bnRpbCBhZnRlciB0aGUgd2FpdEZvckFuZERpc3BhdGNoSW1t
ZWRpYXRlbHkgdGltZXMgb3V0LgogICAgIGlmIChtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSAhPSBE
b2VzTm90TmVlZERpZFVwZGF0ZSkKLSAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkobW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgICAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwogCi0g
ICAgc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRp
bWVvdXQgPSBbXSB7CisgICAgc3RhdGljIFNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVv
dXQgPSBbXSB7CiAgICAgICAgIGlmIChpZCB2YWx1ZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIldlYktpdE92ZXJyaWRlQWN0aXZpdHlTdGF0
ZVVwZGF0ZVRpbWVvdXQiXSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRp
b25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248
ZG91YmxlPihbdmFsdWUgZG91YmxlVmFsdWVdKSk7CisgICAgICAgICAgICByZXR1cm4gU2Vjb25k
cyhbdmFsdWUgZG91YmxlVmFsdWVdKTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgcmV0
dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKTsKKyAgICAgICAgcmV0dXJuIFNlY29u
ZHM6OmZyb21NaWxsaXNlY29uZHMoNTAwKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKDI1MCk7CisgICAgICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKDI1MCk7CiAjZW5kaWYKICAgICB9KCk7CiAgICAgbV93ZWJQYWdlUHJveHkucHJv
Y2VzcygpLmNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2Fn
ZXM6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OkNvbW1pdExheWVyVHJlZT4obV93
ZWJQYWdlUHJveHkucGFnZUlEKCksIGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0LCBJUEM6Oldh
aXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Rp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBEcmF3aW5nQXJlYVByb3h5CiAgICAgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
d2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0
aW1lb3V0ID0gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkpIG92ZXJyaWRlOwor
ICAgIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoU2Vjb25kcyB0aW1lb3V0ID0g
ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y29sb3JTcGFjZURpZENoYW5nZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbWluaW11bUxheW91dFNp
emVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWFQcm94eS5tbQkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03MCw3ICs3MCw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eToK
ICAgICBzZW5kVXBkYXRlR2VvbWV0cnkoKTsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHk6OndhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKFNlY29uZHMgdGltZW91dCkK
IHsKICNpZiAhSEFWRShDT1JFQU5JTUFUSU9OX0ZFTkNFUykKICAgICBpZiAoIW1faXNXYWl0aW5n
Rm9yRGlkVXBkYXRlR2VvbWV0cnkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYVByb3h5OgogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhUHJveHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKCkKIHsKLSAgICBhdXRv
IGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygy
NTApOworICAgIFNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBTZWNvbmRzOjpm
cm9tTWlsbGlzZWNvbmRzKDI1MCk7CiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5l
Y3Rpb24oKS0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkVXBkYXRlQWN0aXZpdHlTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIGFj
dGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdh
aXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dL
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk2LDcgKzE5Niw3
IEBAIC0gKHZvaWQpaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcldpbGxCZWcKICAgICAvLyBGSVhN
RTogQ29ubmVjdGlvbiBjYW4gYmUgbnVsbCBpZiB0aGUgcHJvY2VzcyBpcyBjbG9zZWQ7IHdlIHNo
b3VsZCBjbGVhbiB1cCBiZXR0ZXIgaW4gdGhhdCBjYXNlLgogICAgIGlmIChfc3RhdGUgPT0gSW1t
ZWRpYXRlQWN0aW9uU3RhdGU6OlBlbmRpbmcpIHsKICAgICAgICAgaWYgKGF1dG8qIGNvbm5lY3Rp
b24gPSBfcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkgewotICAgICAgICAgICAgYm9vbCBy
ZWNlaXZlZFJlcGx5ID0gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3Q+
KF9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApKTsKKyAgICAg
ICAgICAgIGJvb2wgcmVjZWl2ZWRSZXBseSA9IGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRj
aEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0PihfcGFnZS0+cGFnZUlEKCksIFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMo
NTAwKSk7CiAgICAgICAgICAgICBpZiAoIXJlY2VpdmVkUmVwbHkpCiAgICAgICAgICAgICAgICAg
X3N0YXRlID0gSW1tZWRpYXRlQWN0aW9uU3RhdGU6OlRpbWVkT3V0OwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjI5LDcg
KzIyOSw3IEBAIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0cmluZ1NlbGVjdGlvbkZvclAKICAgICBp
ZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIAotICAgIGNvbnN0IGF1
dG8gbWVzc2FnZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygyMCk7CisgICAgY29uc3Qg
U2Vjb25kcyBtZXNzYWdlVGltZW91dCgyMCk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpHZXRTdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCksIE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRTdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkOjpSZXBseSh2YWx1ZSks
IG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjQw
LDcgKzI0MCw3IEBAIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBhZ2VQcm8KICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwog
ICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAgIGNvbnN0IGF1dG8gbWVzc2FnZVRpbWVvdXQgPSBz
dGQ6OmNocm9ubzo6c2Vjb25kcygyMCk7CisgICAgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGltZW91
dCgyMCk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXREYXRh
U2VsZWN0aW9uRm9yUGFzdGVib2FyZChwYXN0ZWJvYXJkVHlwZSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZTo6R2V0RGF0
YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIG1fcGFnZUlELCBt
ZXNzYWdlVGltZW91dCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKQEAgLTI1NSw3ICsyNTUs
NyBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgY29uc3QgYXV0byBt
ZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNv
bmRzIG1lc3NhZ2VUaW1lb3V0KDIwKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2U6OlJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpSZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHJlc3Vs
dCksIG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTQwOCw3ICs0MDgsNyBAQCBib29sIFdlYlBhZ2VQcm94eTo6c2hvdWxkRGVsYXlXaW5kb3dPcmRl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAg
Y29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDMpOworICAg
IGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMyk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQoZXZlbnQp
LCBNZXNzYWdlczo6V2ViUGFnZTo6U2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50OjpSZXBs
eShyZXN1bHQpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC00MTksNyArNDE5LDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmFjY2VwdHNGaXJzdE1v
dXNlKGludAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNl
OwotICAgIGNvbnN0IGF1dG8gbWVzc2FnZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcygz
KTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDMpOwogICAgIHByb2Nlc3MoKS5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6QWNjZXB0c0ZpcnN0TW91c2UoZXZlbnROdW1iZXIs
IGV2ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OkFjY2VwdHNGaXJzdE1vdXNlOjpSZXBseShyZXN1
bHQpLCBtX3BhZ2VJRCwgbWVzc2FnZVRpbWVvdXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1NCw3ICszNTQsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVu
QmVmb3JlVW5sb2FkQ29uCiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlv
bkRpc2FibGVyOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hv
dWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjpt
YXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3Bl
bmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKG1lc3NhZ2UsIHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw6OlJlcGx5KHNob3VsZENsb3Nl
KSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09w
dGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gc2hvdWxkQ2xvc2U7CkBAIC00MDAsNyArNDAwLDcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydAogCiAgICAgSGFuZ0RldGVjdGlv
bkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246Oklu
Zm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBhbGVydFRleHQpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQ6OlJlcGx5KCksIG1fcGFnZS0+cGFnZUlEKCksIFNl
Y29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJv
Y2Vzc1dpbGxTdXNwZW5kKTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3Jp
cHRDb25maXJtKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDE3LDcg
KzQxNyw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmkKICAgICBI
YW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogCiAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkph
dmFTY3JpcHRDb25maXJtKHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6
ZnJvbUZyYW1lKGZyYW1lKSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkph
dmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlE
KCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTQzNiw3ICs0MzYsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVu
SmF2YVNjcmlwdFByb21wCiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlv
bkRpc2FibGVyOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZh
U2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJv
bUZyYW1lKGZyYW1lKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQo
KSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwg
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlLCBkZWZhdWx0VmFs
dWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShy
ZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRT
eW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhcmVzdWx0LmlzTnVsbCgpOwpAQCAtNjY4LDcgKzY2
OCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUKICAgICB9CiAj
ZW5kaWYKIAotICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJp
bnRGcmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJp
bnRGcmFtZTo6UmVwbHkoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6
U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBt
X3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWUod2ViRnJh
bWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWU6OlJlcGx5
KCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBEYXRhYmFzZURldGFpbHMgZGV0YWlscykKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgaWYgKCFuZXdRdW90YSkgewogICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYygKICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0
YWJhc2VRdW90YSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpLCBkYXRhYmFzZU5hbWUsIGRldGFpbHMuZGlzcGxheU5hbWUoKSwgY3VycmVudFF1b3RhLCBj
dXJyZW50T3JpZ2luVXNhZ2UsIGRldGFpbHMuY3VycmVudFVzYWdlKCksIGRldGFpbHMuZXhwZWN0
ZWRVc2FnZSgpKSwKLSAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVk
RGF0YWJhc2VRdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFn
ZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBs
YXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKICAgICB9CiAKICAgICBkYk1hbmFnZXIuc2V0UXVv
dGEob3JpZ2luLCBuZXdRdW90YSk7CkBAIC03MTMsNyArNzEzLDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbgogICAgIHVpbnQ2NF90IG5ld1F1b3RhID0gMDsKICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYygKICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YShvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLCBjdXJyZW50UXVv
dGEsIHRvdGFsQnl0ZXNOZWVkZWQpLAotICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
ZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFn
ZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRT
eW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgICAgIE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGE6
OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwg
SVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwog
CiAgICAgY2FjaGVTdG9yYWdlLnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgbmV3
UXVvdGEpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlz
aW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsNyArNjkwLDcg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZAogCiAgICAgUmVmPFdl
YkZyYW1lPiBwcm90ZWN0KCptX2ZyYW1lKTsKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1l
ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCk7Ci0gICAgaWYgKCF3ZWJQYWdlLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmMobV9mcmFtZS0+
ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShjb3JlRnJhbWUpLCByZXNw
b25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdl
dCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNw
b25zZVN5bmM6OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBwb2xpY3lBY3Rpb24sIGRvd25s
b2FkSUQpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09w
dGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKSB7CisgICAgaWYgKCF3ZWJQ
YWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNw
b25zZVN5bmMobV9mcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFt
ZShjb3JlRnJhbWUpLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBsaXN0ZW5l
cklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9I
YW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
ZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBw
b2xpY3lBY3Rpb24sIGRvd25sb2FkSUQpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRT
eW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpIHsKICAgICAgICAg
bV9mcmFtZS0+ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGxpc3RlbmVySUQsIFBvbGljeUlnbm9y
ZSwgMCwgeyB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDMgQEAKLQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU1MzYsNyArNTUzNSw3IEBA
IHZvaWQgV2ViUGFnZTo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclQKICAgICBVc2VyRGF0YSBy
ZXR1cm5Vc2VyRGF0YTsKIAogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKTsKLSAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhhbmRs
ZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEod2ViUHJvY2Vzcy50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5KHJldHVyblVzZXJEYXRhKSwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OlVzZUZ1
bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZykpCisgICAgaWYgKCFzZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UobWVzc2FnZU5hbWUsIFVz
ZXJEYXRhKHdlYlByb2Nlc3MudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkp
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlOjpSZXBs
eShyZXR1cm5Vc2VyRGF0YSksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRp
b246OlVzZUZ1bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZykpCiAgICAgICAgIHJldHVybkRh
dGEgPSBudWxscHRyOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuRGF0YSA9IHdlYlByb2Nlc3Mu
dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyhyZXR1cm5Vc2VyRGF0YS5vYmplY3QoKSk7CkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDgzODMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxNi0xMS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdURjo6UGFya2luZ0xvdCBzaG91bGQgc3RvcCB1c2luZyBzdGQ6OmNocm9ubyBiZWNhdXNl
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBjYXN0cyBhcmUgcHJvbmUgdG8gb3ZlcmZsb3dzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIwNDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1
ZXVlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3BQ
cm9kdWNpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3Rv
cENvbnN1bWluZyk6CisKIDIwMTYtMTEtMDQgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXaW5dIFBhZ2UgdmlzaWJpbGl0eSB0ZXN0cyBhcmUgdGltaW5n
IG91dC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cAkocmV2aXNpb24gMjA4MzU4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29u
ZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCw5IEBAIGVudW0gTm90aWZ5U3R5bGUg
ewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgd2FpdChDb25kaXRpb24m
IGNvbmRpdGlvbiwgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiYgbG9ja2VyLCBjb25zdCBGdW5jdG9y
JiBwcmVkaWNhdGUsIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgdGltZW91dCkKK3ZvaWQgd2Fp
dChDb25kaXRpb24mIGNvbmRpdGlvbiwgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiYgbG9ja2VyLCBj
b25zdCBGdW5jdG9yJiBwcmVkaWNhdGUsIFNlY29uZHMgdGltZW91dCkKIHsKLSAgICBpZiAodGlt
ZW91dCA9PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKSkKKyAgICBpZiAodGltZW91
dCA9PSBTZWNvbmRzOjppbmZpbml0eSgpKQogICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIs
IHByZWRpY2F0ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFRoaXMgdGVzdHMgdGltZW91dHMg
aW4gdGhlIHNlbnNlIHRoYXQgaXQgdmVyaWZpZXMgdGhhdCB3ZSBjYW4gY2FsbCB3YWl0KCkgYWdh
aW4gYWZ0ZXIgYQpAQCAtODAsOCArODAsOCBAQCB2b2lkIHJ1blRlc3QoCiAgICAgdW5zaWduZWQg
bWF4UXVldWVTaXplLAogICAgIHVuc2lnbmVkIG51bU1lc3NhZ2VzUGVyUHJvZHVjZXIsCiAgICAg
Tm90aWZ5U3R5bGUgbm90aWZ5U3R5bGUsCi0gICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyB0
aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6bWF4KCksCi0gICAgc3RkOjpjaHJv
bm86Om1pY3Jvc2Vjb25kcyBkZWxheSA9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM6Onplcm8o
KSkKKyAgICBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLAorICAgIFNlY29u
ZHMgZGVsYXkgPSBTZWNvbmRzKDApKQogewogICAgIERlcXVlPHVuc2lnbmVkPiBxdWV1ZTsKICAg
ICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIHJ1
blRlc3QoCiAgICAgICAgIGNvbnN1bWVyVGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7
CiAgICAgfQogCi0gICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKGRlbGF5KTsKKyAgICBk
ZWxheS5zbGVlcCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJzOyBpLS07
KSB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRo
cmVhZCgKQEAgLTE4Niw4ICsxODYsOCBAQCBURVNUKFdURl9Db25kaXRpb24sIE9uZVByb2R1Y2Vy
T25lQ29uc3VtCiB7CiAgICAgcnVuVGVzdCgKICAgICAgICAgMSwgMSwgMSwgMTAwMDAwLCBUYWN0
aWNhbGx5Tm90aWZ5QWxsLAotICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAw
KSwKLSAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwMDAwKSk7CisgICAgICAg
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMTApLAorICAgICAgICBTZWNvbmRzKDEpKTsKIH0K
IAogVEVTVChXVEZfQ29uZGl0aW9uLCBPbmVQcm9kdWNlck9uZUNvbnN1bWVySHVuZHJlZFNsb3Rz
KQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIFRFU1QoV1RGX0NvbmRpdGlvbiwgVGltZW91dFRpbWVzT3V0
KQogCiAgICAgbG9jay5sb2NrKCk7CiAgICAgYm9vbCByZXN1bHQgPSBjb25kaXRpb24ud2FpdEZv
cigKLSAgICAgICAgbG9jaywgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwMCksIFtdICgp
IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0pOworICAgICAgICBsb2NrLCBTZWNvbmRzOjpmcm9t
TWlsbGlzZWNvbmRzKDEwKSwgW10gKCkgLT4gYm9vbCB7IHJldHVybiBmYWxzZTsgfSk7CiAgICAg
bG9jay51bmxvY2soKTsKIAogICAgIEVYUEVDVF9GQUxTRShyZXN1bHQpOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3luY2hyb25pemVkRml4ZWRR
dWV1ZS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyAr
MTE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1fbG93ZXJR
dWV1ZS5jbG9zZSgpOwotICAgICAgICBtX3Byb2R1Y2VDbG9zZVNlbWFwaG9yZS53YWl0KHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworICAgICAgICBtX3Byb2R1Y2VDbG9zZVNl
bWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKICAgICAgICAgbV9wcm9kdWNlUXVl
dWUgPSBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV91cHBlclF1ZXVlLmNsb3NlKCk7Ci0gICAg
ICAgIG1fY29uc3VtZUNsb3NlU2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjptYXgoKSk7CisgICAgICAgIG1fY29uc3VtZUNsb3NlU2VtYXBob3JlLndhaXQoV2FsbFRp
bWU6OmluZmluaXR5KCkpOwogICAgICAgICBtX2NvbnN1bWVRdWV1ZSA9IG51bGxwdHI7CiAgICAg
fQogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293919</attachid>
            <date>2016-11-04 13:39:25 -0700</date>
            <delta_ts>2016-11-04 14:46:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>145189</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvYmFibHkg
dGhlIG5pY2VzdCBleGFtcGxlIG9mIHdoeSB0aGlzIHBhdGNoIGlzIGEgZ29vZCBpZGVhIGlzIHRo
ZSBjaGFuZ2UgaW4KKyAgICAgICAgQXRvbWljc09iamVjdC5jcHAuCisKKyAgICAgICAgKiBqaXQv
SUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQXRvbWljc09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2Fp
dCk6CisKIDIwMTYtMTEtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCBy
ZWJhc2UuLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIElDU3RhdHM6OklDU3RhdHMoKQogICAgICAgICBb
dGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yU2Vj
b25kcyhtX2xvY2ssIDEsIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxkU3RvcDsg
fSk7CisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9sb2NrLCBTZWNvbmRzKDEpLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3No
b3VsZFN0b3A7IH0pOwogICAgICAgICAgICAgICAgIGlmIChtX3Nob3VsZFN0b3ApCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsOCArMzA0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgdGltZW91dEluTmFub3NlY29uZHMgPSB0
aW1lb3V0SW5NaWxsaXNlY29uZHMgKiAxMDAwICogMTAwMDsKLQorICAgIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKKyAg
ICAKICAgICAvLyBUaGlzIGNvdmVycyB0aGUgcHJvcG9zZWQgcnVsZToKICAgICAvLwogICAgIC8v
IDQuIElmIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkIG9yIGlzIHVuZGVmaW5lZCB0aGVuIGxldCB0
IGJlICtpbmYuIE90aGVyd2lzZToKQEAgLTMxNCwzMSArMzE0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAvLwogICAgIC8vIGV4ZWMtPmFyZ3VtZW50
KDMpIHJldHVybnMgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IHByb3ZpZGVkIGFuZCBUb051bWJlcih1
bmRlZmluZWQpIHJldHVybnMgTmFOLAogICAgIC8vIHNvIE5hTiBpcyB0aGUgb25seSBzcGVjaWFs
IGNhc2UuCi0gICAgaWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID09IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKQotICAgICAgICB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHN0ZDo6bWF4KDAuLCB0aW1lb3V0
SW5OYW5vc2Vjb25kcyk7CisgICAgaWYgKHRpbWVvdXQgPT0gdGltZW91dCkKKyAgICAgICAgdGlt
ZW91dCA9IHN0ZDo6bWF4KFNlY29uZHMoMCksIHRpbWVvdXQpOwogICAgIGVsc2UKLSAgICAgICAg
dGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Ci0gICAgCi0gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgaXMgYSBwaWxlIG9mIG5vbnNl
bnNlLCBidXQgaXQncyBhbGwgbmVlZGVkIGJlY2F1c2Ugb2YgY29ybmVyIGNhc2VzCi0gICAgLy8g
aW5zaWRlIHN0ZDo6Y2hyb25vLgotICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIHN0ZDo6Y2hyb25v
LgotICAgIAotICAgIFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQ7Ci0gICAg
aWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90
OjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpjaHJv
bm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXRJbk5hbm9zZWNvbmRz
KSk7Ci0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPCBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHM6Onplcm8oKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlVGltZW91dCA+IFBhcmtpbmdMb3Q6OkNsb2Nr
OjpkdXJhdGlvbjo6bWF4KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xv
Y2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OkNsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8UGFya2luZ0xvdDo6Q2xvY2s6OmR1cmF0aW9u
PihyZWxhdGl2ZVRpbWVvdXQpOwotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgICAgICB9Ci0gICAgfQorICAgICAg
ICB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKTsKICAgICAKICAgICBib29sIGRpZFBhc3NW
YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCByZXN1bHQ7CkBA
IC0zNTEsNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
YwogICAgICAgICAgICAgICAgIHJldHVybiBkaWRQYXNzVmFsaWRhdGlvbjsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAg
ICAgICAgIE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dCk7CiAgICAgfQogICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjM5IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6
Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBv
dmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0aW1lIG1lYXN1cmVtZW50
cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAgIHNvbWV0aW1lcyBpdCB3
YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBvZiB0aW1lLCBzb21ldGlt
ZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVwb2NoLiBXaGVuIHdlIHNw
b2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEgbW9ub3RvbmljIGNsb2Nr
IG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdheXMgJ2RvdWJsZScgLSBu
ZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZlbgorICAgICAgICB0aG91
Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50ZXJ2YWwsIG1zIGludGVy
dmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMgc2luY2UgZXBvY2ggb24g
d2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2UgZXBvY2ggbW9ub3Rvbmlj
KS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRob3VnaHQgdGhhdCBpdCB3
b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJsZXMgd2l0aAorICAgICAg
ICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRoaW5ncyB3aXRoIHN0ZDo6
Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAgICBpbmNvbnZlbmllbnQ6
CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5ldmVyIHdhbnQgdG8gc2F5
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIgd2FudCB0byBzYXkKKyAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9pbnQuIFRoZSBzeW50YXgg
Zm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAgICAgICAgICBkdXJhdGlv
bl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
IG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50ZWdlcnMgYnkgZGVmYXVs
dCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNsdW1zeS4gQnV0IHRoZSBp
bnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIHJvdWdoIGVkZ2VzIG9m
IGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3ZWVuIHN0ZDo6Y2hyb25v
IHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNrcyBvdmVyZmxvdworICAg
ICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVudGx5LiBXZSBoYXZlIGV2
ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBo
YWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMgdXAgYmVpbmcgYSBzcGVj
aWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2VzLCB0aGUgb3ZlcmZsb3cg
YWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAgSXQncyBhbiBlcnJvciB0
byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQgaGF2ZSBiZWVuIGV4Y3Vz
YWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0aCB3YXMgbm90IGd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB0aGF0IHdvdWxkCisg
ICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMgYSBjb250aW51b3VzLCBp
bmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAgICAgICAgZm9yIGZsb2F0
aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBwcmVzZXJ2ZXMg
cHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQgZXh0cmVtZSBjYXNlcywg
c28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGltZSBtZWFucyB0aGF0IHVu
aXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAgICAgICAgbG9zc2xlc3Mu
IFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZlcnkgaGFyZCBhYm91dCB3
aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNoLCB3ZSB1c2Ugc2Vjb25k
cyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJvdW5kYXJpZXMsIGxpa2Ug
YW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21ldGhpbmcgb3RoZXIgdGhh
biBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBtYWtlcyBpdCBl
YXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgdGlt
ZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1wbGU6IHdoZW4gd291bGQg
eW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlzIGlzIHRoZQorICAgICAg
ICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBwb3J0IGJvdGggYSB0aW1l
b3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZhcmlhbnQuCisKKyAgICAg
ICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0aGluZ3Mgd2hlbiBtYXRo
IGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAgICAgcHJldHR5IHdlbGwg
b3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdvdWxkIGRvIHdoZW4gY29t
cHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgdXNpbmcgc2Np
ZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBzaWduaWZpY2FudAorICAg
ICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1bmRlciBmbG9hdGluZyBw
b2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAgICAgICBvdGhlciBoYW5k
LCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdlIGJlY2F1c2UgeW91IGhh
dmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxlIHBvc3NpYmxlIFVCIGNv
cm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJbnRlZ2VycyB0aGF0Cisg
ICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGxhcmdlIGFuZCB5
b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAgICAgICAgdGhlbS4gQXQg
dGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBhbSBub3QgY2VydGFpbiB0
aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhlIGNvcm5lciBjYXNlcwor
ICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1la2VlcGluZyBjbGFzc2Vz
IHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAgICBhbGwgaW50ZXJuYWxs
eSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2VicmFpYyB0eXBpbmcuIFRo
ZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25kczogdGhpcyBpcyBmb3Ig
bWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6IHRpbWUgc2luY2UgZXBv
Y2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuCisgICAg
ICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2NvcmRpbmcgdG8gYSBtb25v
dG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRoYXQgc2F5cyBlaXRoZXIg
V2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOiBh
IHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXByZXNlbnRzIGVpdGhlciBh
CisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUuCisgICAgICAgIAorICAg
ICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysgdmFsdWVzIGFuZCBhcmUg
Y2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAgICAgdmVyeSBuZWFybHkg
UE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lvbnMgYmV0d2VlbiB0aGUg
dmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMgaXMgYnkgd2F5IG9mIGFs
Z2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2UgcmVjb2duaXplOgorICAg
ICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29uZHMKKyAgICAgICAgU2Vj
b25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3RvbmljVGltZSA9IE1vbm90
b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAgICAKKyAgICAgICAgV2Ug
c3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMgYmVjYXVzZSBtYXRoLgor
ICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBiZXR3ZWVuIE1vbm90b25p
Y1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgd3Qg
PSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0
byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNsb2NrcyBhbmQgY29udmVy
dCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFueSBvZiBvdXIgQVBJcyB3
b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGltZSB0aGUgdXNlciB3YW50
ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2ggaW5jbHVkZXMgQ29uZGl0
aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS4gWW91
CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRpbWUgb3IgTW9ub3Rvbmlj
VGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhh
dCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246OndhaXRVbnRpbCwgdGhlbiBD
b25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hlbiBpdCBzaG91bGQgd2Fr
ZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgV2FsbFRpbWUgLSBi
dXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4gd2FpdFVudGlsIHdpbGwg
bWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAgICBNb25vdG9uaWNUaW1l
LiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0aGFuIGNocm9ubyBhbGxv
d2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIGEg
ZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5v
dCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8gYW5kIHRoZXNlIG5ldyB0
aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmllbmNlIHNob3dzIHRoYXQg
d2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgICBz
dGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywgSSBkaWRuJ3QgbmVlZCBz
dWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAgcGF0Y2ggb25seSBjb252
ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2luZ0xvdCBhbmQgQ29uZGl0
aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRoYXQgY29kZSBvbnRvIHRo
ZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWwp
OgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToKKyAgICAgICAgKFdURjo6
Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRV
bnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUXVl
dWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1l
LmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0Zi9NZXNzYWdlUXVldWUu
aDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1v
bm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmFwcHJveGlt
YXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNU
aW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpNb25vdG9uaWNUaW1l
KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSk6CisgICAgICAg
IChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAgKFdURjo6TW9ub3Rvbmlj
VGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjph
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoKKyAgICAgICAg
KFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAgICAgICAoV1RGOjpQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1NlY29uZHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6CisgICAgICAgIChXVEY6
OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pY3Jvc2Vj
b25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRzKToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OmZy
b21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMp
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAgICAgIChXVEY6OlNlY29u
ZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcispOgor
ICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci8pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3Bl
cmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yKj0pOgorICAgICAgICAo
V1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcj4p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
dyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVD
bG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6d2FsbFRpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25pY1RpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGlt
YXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91YmxlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VFcG9jaCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogd3RmL1dhbGxU
aW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpub3cpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2xlZXApOgorICAgICAg
ICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OldhbGxU
aW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3VibGUpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2Vjb25k
c1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVXYWxsVGlt
ZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdU
Rjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3YWl0KToKKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0xMS0wMyAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRml4ZXMgdG8gYnVpbGQg
SlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNiBAQAogCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOEIx
REM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87IH07CisJCTBGNjZCMjhE
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07CisJCTBGNjZCMjhGMURD
OTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICov
OyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICov
OyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi87IH07
CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICovOyB9OwogCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNl
dC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZC
NTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJMEY0M0Q4RjAxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9ja1R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ub3Rv
bmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgzMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NzFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FsbFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FsbFRpbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4ODVDRjIwMDQ0RjVFMiAv
KiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJv
b2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNw
cCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJ
CQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAogCQkJCTBG
OEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCkBAIC05
NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0
b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5o
ICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAgLTEwMDcsNiArMTAzMSw4
IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVD
ODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCisJCQkJMEY2NkIyODQx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBGNjZCMjg1MURDOTdCQUIw
MDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJMEY2NkIyODYxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovLAogCQkJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLywKIAkJCQkwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZC
QkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2ICsxMDgyLDggQEAKIAkJ
CQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0Yg
LyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxs
VGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8s
CiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLApAQCAtMTI1OSw3ICsx
Mjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVC
MDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4
QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNDAsNiAr
MTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlCIC8qIExpc3REdW1wLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAKIAkJCQkxNEYzQjBGNzE1
RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiArMTUwMCw3IEBACiAJCQkJ
RTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJQThBNDczQUExNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDUxMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09i
akNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAwNDEy
M0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2MDE1MUE4
MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY0
MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIy
OTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBACiAJCQkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOEYxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFy
dChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChs
b2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09
IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2h1dCB0aGUg
dGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Ns
b2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2NrLCBTZWNvbmRzKDEpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3RpZnkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2luZyB0byBzbGVlcCFcbiIp
OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAtNjQsNiArNjUsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5vbmNv
cHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xMDEs
NiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBTZWNvbmRzLmgKICAgICBT
ZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCkBA
IC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBVbmlxdWVSZWYuaAogICAg
IFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVmVjdG9y
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaAorICAgIFdhbGxUaW1l
LmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29ya1F1ZXVlLmgKQEAgLTE3
Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNzLmNwcAogICAgIEF1dG9t
YXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCiAgICAgTWV0YUFsbG9j
YXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJlck9mQ29yZXMuY3BwCiAg
ICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApAQCAtMjA3LDEyICsyMTQs
MTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAogICAg
IFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNwcAogICAgIFNpeENoYXJh
Y3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKICAg
ICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV2FsbFRpbWUu
Y3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xv
Y2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENs
b2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rvbmlj
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBXVEZfQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX0Nsb2NrVHlwZV9oCisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKworZW51bSBjbGFzcyBDbG9j
a1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tUeXBlKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCisjZW5kaWYgLy8gV1RGX0Ns
b2NrVHlwZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZu
ZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUg
PGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5n
TG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlz
IGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQg
aXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5j
ZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5n
TG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRv
IHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5s
aWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJl
dHRlciB0byB1c2UgTW9ub3RvbmljVGltZS4KKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUg
VGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNp
bmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAg
ICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlm
IHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVj
dCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sg
Zm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBP
cGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9j
aywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlw
ZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsK
ICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygp
KSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsK
ICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ug
ewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJl
dHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0
dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBD
bG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAg
Ym9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7
CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVu
dGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlv
bkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlz
ZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8v
IE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdh
aXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0
aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYg
bG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRp
dmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRp
bChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRl
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9v
bCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7
CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyBy
ZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRp
bChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9j
aywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25k
aXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVu
dGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChs
b2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50
aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0
U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywg
YWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xv
Y2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVU
aW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0g
ICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGlt
ZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRv
dWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMg
KiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJl
bGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFu
ZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5s
b2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3Qg
YmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAg
IC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBw
cmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25v
OjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vj
b25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwg
cHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0
cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0
byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMg
dHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9u
ZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAg
ICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9v
bCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVv
dXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNv
bmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjAp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAw
KSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwg
YXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9j
aygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0
aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQg
aW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2
ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAg
ICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxh
dGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChs
b2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwo
TG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShy
ZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlv
blR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3Qg
RHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRp
dmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xv
Y2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBD
bG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1
bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1
bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5z
aWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBi
ZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAg
ICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAg
ICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGlt
ZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0
OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAK
IGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRR
dWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8
RGF0YVR5cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGlt
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0
aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAg
ICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVl
dWUudGFrZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0
IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KQEAgLTM0
MCw3ICszNDAsNyBAQCB2b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2Nr
OwogICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7Ci0gICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1Nl
Y29uZHMoZmFrZUxvY2ssIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOwor
ICAgIGZha2VDb25kaXRpb24ud2FpdEZvcihmYWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAy
MDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1l
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxs
ZWQoKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUp
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVy
ZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIFdhbGxU
aW1lIGFic29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRl
PgogICAgICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYmKTsKQEAgLTc2LDggKzc3LDYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgaXNFbXB0eSgpIGlzIG9u
bHkgdmFsaWQgaWYgbm8gb3RoZXIgdGhyZWFkIGlzIG1hbmlwdWxhdGluZyB0aGUgcXVldWUgYXQg
dGhlIHNhbWUgdGltZS4KICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICAgICAgc3RhdGlj
IGRvdWJsZSBpbmZpbml0ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46Om1heCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRl
eDsKICAgICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwpAQCAtMTMwLDE0ICsxMjksMTQgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6
d2FpdEZvck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAg
ICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb247IAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGlt
ZW91dChleGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIGlu
ZmluaXRlVGltZSgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiByZXN1bHQg
PSB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10oY29uc3Qg
RGF0YVR5cGUmKSB7IHJldHVybiB0cnVlOyB9LCBXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
ICAgIEFTU0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJl
YXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0
YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2Fp
dFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdl
UXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2Fn
ZVF1ZXVlV2FpdFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFdhbGxUaW1l
IGFic29sdXRlVGltZSkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFs
c2U7CkBAIC0xNTEsMTAgKzE1MCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlm
IChmb3VuZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRz
KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRp
dGlvbi53YWl0VW50aWwobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsK
KyAgICAgICAgQVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogCiAgICAgICAgIGlmIChtX2tpbGxlZCkgewogICAgICAgICAgICAgcmVzdWx0
ID0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01vbm90b25p
Y1RpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vbm90b25p
Y1RpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJl
YW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJX
YWxsVGltZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworTW9ub3RvbmljVGltZSBNb25vdG9uaWNU
aW1lOjpub3coKQoreworICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKSk7Cit9CisKK1dhbGxUaW1lIE1vbm90b25pY1RpbWU6OmFwcHJveGltYXRl
V2FsbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAqdGhpcyAtIG5vdygpICsgV2FsbFRpbWU6
Om5vdygpOworfQorCit2b2lkIE1vbm90b25pY1RpbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk1vbm90b25pYygiLCBtX3ZhbHVlLCAiIHNlYykiKTsK
K30KKwordm9pZCBNb25vdG9uaWNUaW1lOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdU
Rl9Nb25vdG9uaWNUaW1lX2gKKyNkZWZpbmUgV1RGX01vbm90b25pY1RpbWVfaAorCisjaW5jbHVk
ZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBUaGUg
Y3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3RvbmljIGNs
b2NrcyBkb24ndCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3NzaWJseSBkb24ndCBjb3VudCBkb3du
dGltZS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2Fu
IHJlYXNvbiBhYm91dAorLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGlu
IG1hdGguIEl0J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywKKy8v
IG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUg
YWxsIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8gU3BlY2lmaWNhbGx5LCBNb25vdG9u
aWNUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUgdGhh
dAorLy8gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIGlz
IHRoZSBzYW1lIGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgorY2xh
c3MgTW9ub3RvbmljVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBj
bG9ja1R5cGUgPSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRo
ZSBlcG9jaC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMg
eCAtIE1vbm90b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNUaW1lKCkgeyB9CisgICAgCisgICAg
Ly8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNl
bnRzIHRpbWUgYWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNh
bWUgdGltZQorICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBmcm9tUmF3
U2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBNb25vdG9uaWNUaW1lIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBNb25vdG9uaWNU
aW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBNb25vdG9uaWNUaW1lIGluZmluaXR5KCkgeyBy
ZXR1cm4gZnJvbVJhd1NlY29uZHMoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpKTsgfQorCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJu
IFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRl
TW9ub3RvbmljVGltZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAg
CisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMobV92YWx1ZSAtIG90
aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBz
Y2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMK
KyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBNb25vdG9uaWNU
aW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29u
ZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItPShTZWNvbmRzIG90
aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9
CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE1vbm90b25pY1RpbWUgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I+KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj49KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1v
bm90b25pY1RpbWU7CisKKyNlbmRpZiAvLyBXVEZfTW9ub3RvbmljVGltZV9oCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
YXJraW5nTG90LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogCiAgICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOwogICAgIAotICAgIHN0ZDo6bXV0ZXgg
cGFya2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlv
bjsKKyAgICBNdXRleCBwYXJraW5nTG9jazsKKyAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0Nv
bmRpdGlvbjsKIAogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MgeyBudWxscHRyIH07CiAgICAgCkBA
IC01NjQsNyArNTY0LDcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFy
awogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2wo
KT4mIHZhbGlkYXRpb24sCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNs
ZWVwLAotICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIpKTsKQEAgLTU5
MiwyMCArNTkyLDE3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsK
ICAgICAKICAgICBib29sIGRpZEdldERlcXVldWVkOwogICAgIHsKLSAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hp
bGUgKG1lLT5hZGRyZXNzICYmIENsb2NrOjpub3coKSA8IHRpbWVvdXQpIHsKLSAgICAgICAgICAg
IC8vIEZhbGxpbmcgYmFjayB0byB3YWl0KCkgd29ya3MgYXJvdW5kIGEgYnVnIGluIGxpYnN0ZGMr
KyBpbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZS4gU2VlOgotICAgICAg
ICAgICAgLy8gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MDI3
Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcu
Y2dpP2lkPTU4OTMxCi0gICAgICAgICAgICBpZiAodGltZW91dCA9PSBDbG9jazo6dGltZV9wb2lu
dDo6bWF4KCkpCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2Nr
ZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0
aW9uLndhaXRfdW50aWwobG9ja2VyLCB0aW1lb3V0KTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcyAmJiB0aW1l
b3V0Lm5vd1dpdGhTYW1lQ2xvY2soKSA8IHRpbWVvdXQpIHsKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nQ29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2ss
IHRpbWVvdXQuYXBwcm94aW1hdGVXYWxsVGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIGFib3ZlLCB3
ZSBkbyB0aGlzIHRoaW5nLCB3aGljaCBpcyBoaWxhcmlvdXNseSBhd2Z1bCwgYnV0IGVuc3VyZXMg
dGhhdCB0aGUgd29yc3QgY2FzZSBpcwotICAgICAgICAgICAgLy8gYSBDUFUtZWF0aW5nIHNwaW4g
YnV0IG5vdCBhIGRlYWRsb2NrLgotICAgICAgICAgICAgbG9ja2VyLnVubG9jaygpOwotICAgICAg
ICAgICAgbG9ja2VyLmxvY2soKTsKKyAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIHRo
ZSBPUyB0byBkZWNpZGUgbm90IHRvIHdhaXQuIElmIGl0IGRvZXMgdGhhdCB0aGVuIGl0IHdpbGwg
YWxzbworICAgICAgICAgICAgLy8gZGVjaWRlIG5vdCB0byByZWxlYXNlIHRoZSBsb2NrLiBJZiB0
aGVyZSdzIGEgYnVnIGluIHRoZSB0aW1lIG1hdGgsIHRoZW4gdGhpcyBjb3VsZAorICAgICAgICAg
ICAgLy8gcmVzdWx0IGluIGEgZGVhZGxvY2suIEZsYXNoaW5nIHRoZSBsb2NrIG1lYW5zIHRoYXQg
YXQgd29yc3QgaXQncyBqdXN0IGEgQ1BVLWVhdGluZworICAgICAgICAgICAgLy8gc3Bpbi4KKyAg
ICAgICAgICAgIG1lLT5wYXJraW5nTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nTG9jay5sb2NrKCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKCFtZS0+YWRkcmVzcyB8
fCBtZS0+YWRkcmVzcyA9PSBhZGRyZXNzKTsKICAgICAgICAgZGlkR2V0RGVxdWV1ZWQgPSAhbWUt
PmFkZHJlc3M7CkBAIC02NDAsMTQgKzYzNywxNCBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBQYXJrCiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBtYXR0ZXIgd2hhdCwg
bWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgogICAgIHsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIGlmICghZGlk
RGVxdWV1ZSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBkZXF1ZXVlIG91cnNlbHZl
cywgdGhlbiBzb21lb25lIGVsc2UgZGlkLiBUaGV5IHdpbGwgc2V0IG91ciBhZGRyZXNzIHRvCiAg
ICAgICAgICAgICAvLyBudWxsLiBXZSBkb24ndCB3YW50IHRvIHByb2NlZWQgdW50aWwgdGhleSBk
byB0aGlzLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhleSBtYXkgc2V0CiAgICAgICAgICAgICAvLyBv
dXIgYWRkcmVzcyB0byBudWxsIGluIHNvbWUgZGlzdGFudCBmdXR1cmUgd2hlbiB3ZSdyZSBhbHJl
YWR5IHRyeWluZyB0byB3YWl0IGZvcgogICAgICAgICAgICAgLy8gb3RoZXIgdGhpbmdzLgogICAg
ICAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzKQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5n
Q29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRp
dGlvbi53YWl0KG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIH0KICAgICAgICAgbWUtPmFkZHJl
c3MgPSBudWxscHRyOwogICAgIH0KQEAgLTY5NSwxMSArNjkyLDExIEBAIE5FVkVSX0lOTElORSBQ
YXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGEKICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVz
cyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgIHRocmVhZERhdGEtPmFkZHJlc3Mg
PSBudWxscHRyOwogICAgICAgICB0aHJlYWREYXRhLT50b2tlbiA9IDA7CiAgICAgfQotICAgIHRo
cmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEt
PnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
NzQxLDExICs3MzgsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrT25l
SQogICAgIEFTU0VSVCh0aHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICAKICAgICB7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdM
b2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2Nr
KTsKICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgfQogICAgIC8v
IEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWREYXRhIG1heSBkaWUuIEdvb2QgdGhpbmcgd2UgaGF2
ZSBhIFJlZlB0cjw+IG9uIGl0LgotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90
aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiB9
CiAKIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2
b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTc3OSwxMCArNzc2LDEwIEBAIE5FVkVS
X0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmsKICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJl
YWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5h
ZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2Vy
KHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgICAgICB0aHJlYWREYXRhLT5hZGRy
ZXNzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29u
ZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlv
bi5zaWduYWwoKTsKICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9QYXJraW5nTG90X2gK
ICNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAogCi0jaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUg
PGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvU2Nv
cGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5LDcg
KzM5LDE1IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFBhcmtpbmdMb3QoY29uc3QgUGFya2lu
Z0xvdCYpID0gZGVsZXRlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6c3Rl
YWR5X2Nsb2NrIENsb2NrOworICAgIC8vIFBhcmtpbmdMb3Qgd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIFBhcmtpbmdMb3Qgd291bGQgYmUgYWJsZSB0
byB1c2Ugd2l0aG91dCBjb252ZXJzaW9ucy4gSXQncyBzYWQgdGhhdAorICAgIC8vIHRoaXMgaXMg
V2FsbFRpbWUgbm90IE1vbm90b25pY1RpbWUsIGJ1dCB0aGF0J3MganVzdCBob3cgT1Mgd2FpdCBm
dW5jdGlvbnMgd29yay4gSG93ZXZlciwKKyAgICAvLyBiZWNhdXNlIFBhcmtpbmdMb3QgZXZhbHVh
dGVzIHdoZXRoZXIgaXQgc2hvdWxkIHdhaXQgYnkgY2hlY2tpbmcgaWYgeW91ciB0aW1lIGhhcyBw
YXNzZWQKKyAgICAvLyB1c2luZyB3aGF0ZXZlciBjbG9jayB5b3UgdXNlZCwgc3BlY2lmeWluZyB0
aW1lb3V0cyBpbiBNb25vdG9uaWNUaW1lIGlzIHNlbWFudGljYWxseSBiZXR0ZXIuCisgICAgLy8g
Rm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHNldHMgaGlzIGNvbXB1dGVyJ3MgY2xvY2sgYmFjayBk
dXJpbmcgdGhlIHRpbWUgdGhhdCB5b3Ugd2FudGVkIHRvCisgICAgLy8gd2FpdCBmb3Igb25lIHNl
Y29uZCwgYW5kIHlvdSBzcGVjaWZpZWQgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIE1vbm90b25pY1Rp
bWUsIHRoZW4gUGFya2luZ0xvdAorICAgIC8vIHdpbGwgYmUgc21hcnQgZW5vdWdoIHRvIGtub3cg
dGhhdCB5b3VyIG9uZSBzZWNvbmQgaGFzIGVsYXBzZWQuCisgICAgdHlwZWRlZiBXYWxsVGltZSBU
aW1lOwogICAgIAogICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLiBUaGUKICAgICAv
LyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJu
cyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3ICs3Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3QgVmFsaWRh
dGlvbkZ1bmN0b3ImIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IEJlZm9yZVNsZWVwRnVuY3Rv
ciYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAg
ICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgICAgICAgICBhZGRyZXNzLApA
QCAtODksNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09
IGV4cGVjdGVkOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFtdICgpIHsgfSwKLSAgICAg
ICAgICAgIENsb2NrOjp0aW1lX3BvaW50OjptYXgoKSk7CisgICAgICAgICAgICBUaW1lOjppbmZp
bml0eSgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdpdmVuIHRvIHlvdSBh
bnl0aW1lIHlvdSB1bnBhcmtPbmUoKS4KQEAgLTE1OCw3ICsxNjYsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAgICBjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bCgpPiYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJl
Zm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KTsKKyAgICAgICAg
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KTsKICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qg
dm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+
JiBjYWxsYmFjayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TZWNvbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWNvbmRzLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgor
I2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2lu
Y2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxUaW1lLmgi
CisKK25hbWVzcGFjZSBXVEYgeworCitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvcisoV2FsbFRp
bWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK01vbm90
b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3IrKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSBTZWNvbmRzOjpvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKworV2FsbFRpbWUgU2Vj
b25kczo6b3BlcmF0b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHModmFsdWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3ItKE1vbm90b25p
Y1RpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdT
ZWNvbmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQor
CitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25kczo6b3BlcmF0b3ItKGNvbnN0IFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyLndp
dGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpOworfQorCit2b2lkIFNlY29uZHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSwgIiBzZWMiKTsKK30KKwordm9pZCBTZWNv
bmRzOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1Nl
Y29uZHNfaAorI2RlZmluZSBXVEZfU2Vjb25kc19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBNb25vdG9uaWNUaW1lOworY2xhc3MgUHJpbnRTdHJlYW07CitjbGFzcyBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGU7CitjbGFzcyBXYWxsVGltZTsKKworY2xhc3MgU2Vjb25kcyB7CitwdWJsaWM6
CisgICAgU2Vjb25kcygpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBTZWNvbmRz
KGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAor
ICAgIGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGRvdWJs
ZSBtaWxsaXNlY29uZHMoKSBjb25zdCB7IHJldHVybiBzZWNvbmRzKCkgKiAxMDAwOyB9CisgICAg
ZG91YmxlIG1pY3Jvc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1pbGxpc2Vjb25kcygpICogMTAw
MDsgfQorICAgIGRvdWJsZSBuYW5vc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1pY3Jvc2Vjb25k
cygpICogMTAwMDsgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tTWls
bGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZh
bHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBm
cm9tTWljcm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9t
TWlsbGlzZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgU2Vjb25kcyBmcm9tTmFub3NlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZyb21NaWNyb3NlY29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGluZmluaXR5KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSArIG90aGVyLnZhbHVl
KCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAtIG90aGVyLnZhbHVl
KCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEl0
IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxpbmcgYSBkdXJhdGlvbiwgbGlrZSwgIkkgd2Fu
dCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcworICAgIC8vIGxhc3QgdGltZSEiLgorICAgIFNl
Y29uZHMgb3BlcmF0b3IqKGRvdWJsZSBzY2FsYXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU2Vjb25kcyh2YWx1ZSgpICogc2NhbGFyKTsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBv
cGVyYXRvci8oZG91YmxlIHNjYWxhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNv
bmRzKHZhbHVlKCkgLyBzY2FsYXIpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCdzIHJlYXNvbmFi
bGUgdG8gdGhpbmsgYWJvdXQgcmF0aW9zIGJldHdlZW4gU2Vjb25kcy4KKyAgICBkb3VibGUgb3Bl
cmF0b3IvKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUo
KSAvIG90aGVyLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMmIG9wZXJhdG9yKj0oZG91YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzICogc2NhbGFyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
JiBvcGVyYXRvci89KGRvdWJsZSBzY2FsYXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyAvIHNjYWxhcjsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdh
bGxUaW1lIG9wZXJhdG9yKyhXYWxsVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKE1vbm90b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXYWxsVGltZSBvcGVyYXRvci0oV2FsbFRpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLShNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShT
ZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoU2Vjb25kcyBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWUgV1RGCisKK3VzaW5nIFdURjo6U2Vj
b25kczsKKworI2VuZGlmIC8vIFdURl9TZWNvbmRzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aCIKKworI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRl
ICJQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93KENsb2NrVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBy
ZXR1cm4gV2FsbFRpbWU6Om5vdygpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Cisg
ICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
KCk7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdAoreworICAgIHJldHVybiBub3coY2xvY2tUeXBl
KCkpOworfQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OndhbGxUaW1lKCkg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpXYWxsKTsK
KyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKG1fdmFsdWUpOworfQorCitNb25v
dG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bW9ub3RvbmljVGltZSgpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlwZTo6TW9ub3RvbmljKTsK
KyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd1NlY29uZHMobV92YWx1ZSk7Cit9CisK
K1dhbGxUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6YXBwcm94aW1hdGVXYWxsVGltZSgp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2Fs
bDoKKyAgICAgICAgcmV0dXJuIHdhbGxUaW1lKCk7CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90
b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKS5hcHByb3hpbWF0ZVdhbGxUaW1l
KCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFdhbGxUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
OjphcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAgICAgIHJldHVybiB3YWxsVGltZSgp
LmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9u
aWM6CisgICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUoKTsKK30KKwor
U2Vjb25kcyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLShjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhl
ci5tX3ZhbHVlKTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9y
PChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVl
IDwgb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9w
ZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBt
X3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICBy
ZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTo6b3BlcmF0b3I+PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90
aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUp
OworICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7Cit9CisKK3ZvaWQgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KG1fdHlwZSwgIigiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBMb2NrIGZha2VMb2Nr
OworICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOworICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7CisgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssICp0aGlz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL1dURi93dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+CisjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgeworcHVibGljOgorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgpIHsgfQor
ICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZShXYWxsVGltZSB0aW1lKQorICAgICAg
ICA6IG1fdmFsdWUodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpCisgICAgICAgICwg
bV90eXBlKENsb2NrVHlwZTo6V2FsbCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZShNb25vdG9uaWNUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1ZSh0
aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5cGUoQ2xvY2tU
eXBlOjpNb25vdG9uaWMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIGZyb21SYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQubV90eXBlID0gdHlw
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBzZWNv
bmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICBD
bG9ja1R5cGUgY2xvY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93KENs
b2NrVHlwZSk7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSBub3dXaXRoU2FtZUNsb2NrKCkgY29uc3Q7CisgICAgCisgICAgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmZyb21S
YXdTZWNvbmRzKHZhbHVlLCBjbG9ja1R5cGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2Vy
dHMgdGhhdCB0aGUgdGltZSBpcyBvZiB0aGUgdHlwZSB5b3Ugd2FudC4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV2FsbFRpbWUgd2FsbFRpbWUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgTW9ub3RvbmljVGltZSBtb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1RpbWUo
KSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJh
dG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1l
Q2xvY2tBbmRSYXdTZWNvbmRzKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAg
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKG1f
dmFsdWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNj
YWxhciBhbmQgc2NhbGFycyBjYW4gYmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20g
YWxnZWJyYWljCisgICAgLy8gdHJhbnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9Cisg
ICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhl
cikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQor
ICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBTZWNvbmRzIG9wZXJhdG9yLShjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWUKKyAgICAgICAgICAgICYmIG1fdHlw
ZSA9PSBvdGhlci5tX3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBUbyBkbyByZWxh
dGl2ZSBjb21wYXJpc29ucywgeW91IG11c3QgYmUgdXNpbmcgdGltZXMgd2l0aCB0aGUgc2FtZSBj
bG9jayB0eXBlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPChjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGRvdWJsZSBtX3ZhbHVlIHsgMCB9OworICAgIENsb2NrVHlwZSBtX3R5cGUgeyBDbG9ja1R5cGU6
OldhbGwgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTsKKworI2VuZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGVfaApJbmRleDogU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9XYWxsVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5j
bHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVk
ZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXYWxs
VGltZSBXYWxsVGltZTo6bm93KCkKK3sKKyAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoY3VycmVu
dFRpbWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgV2FsbFRpbWU6OmFwcHJveGltYXRlTW9ub3Rv
bmljVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBNb25vdG9uaWNU
aW1lOjpub3coKTsKK30KKwordm9pZCBXYWxsVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiV2FsbCgiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwor
dm9pZCBXYWxsVGltZTo6c2xlZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSgqdGhpcykuc2xlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDog
U291cmNlL1dURi93dGYvV2FsbFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9X
YWxsVGltZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfV2FsbFRpbWVfaAorI2RlZmluZSBXVEZf
V2FsbFRpbWVfaAorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9uaWNUaW1lOworY2xh
c3MgUHJpbnRTdHJlYW07CisKKy8vIFRoZSBjdXJyZW50IHRpbWUgYWNjb3JkaW5nIHRvIGEgd2Fs
bCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuIFRoaXMgdXNlcyBmbG9hdGluZyBwb2ludAor
Ly8gaW50ZXJuYWxseSBzbyB0aGF0IHlvdSBjYW4gcmVhc29uIGFib3V0IGluZmluaXR5IGFuZCBv
dGhlciB0aGluZ3MgdGhhdCBhcmlzZSBpbiBtYXRoLiBJdCdzCisvLyBhY2NlcHRhYmxlIHRvIHVz
ZSB0aGlzIHRvIHdyYXAgTmFOIHRpbWVzLCBuZWdhdGl2ZSB0aW1lcywgYW5kIGluZmluaXRlIHRp
bWVzLCBzbyBsb25nIGFzIHRoZXkKKy8vIGFyZSByZWxhdGl2ZSB0byB0aGUgc2FtZSBjbG9jay4g
U3BlY2lmaWNhbGx5LCBXYWxsVGltZSBzaG91bGQgYmUgdXNlZCBpbiBhZ3JlZW1lbnQgd2l0aCB0
aGUKKy8vIHByaW5jaXBsZSB0aGF0IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkgaXMgdGhlIHNhbWUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgorY2xhc3MgV2FsbFRp
bWUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBDbG9ja1R5cGUgY2xvY2tUeXBlID0gQ2xv
Y2tUeXBlOjpXYWxsOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGVwb2NoLiBTbywgeC5zZWNv
bmRzU2luY2VFcG9jaCgpIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB4IC0gV2FsbFRpbWUoKS4KKyAg
ICBXYWxsVGltZSgpIHsgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyBmb3Ig
c3VyZSB0aGF0IHRoZSBkb3VibGUgcmVwcmVzZW50cyB0aW1lIGFjY29yZGluZyB0bworICAgIC8v
IFdURjo6Y3VycmVudFRpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJl
IGZyb20gdGhlIHNhbWUgdGltZSBzb3VyY2UuCisgICAgc3RhdGljIFdhbGxUaW1lIGZyb21SYXdT
ZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXYWxsVGltZSBub3coKTsK
KyAgICAKKyAgICBzdGF0aWMgV2FsbFRpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9tUmF3U2Vj
b25kcyhzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisgICAgCisg
ICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92
YWx1ZSk7IH0KKyAgICAKKyAgICBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBh
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgV2FsbFRp
bWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbVJhd1NlY29uZHMobV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAg
ICBXYWxsVGltZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQor
ICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQg
YXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0aW9u
cy4gU28sIHdlIGFsbG93IGl0LgorICAgIFdhbGxUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBXYWxsVGltZSYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV2FsbFRpbWUm
IG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3ItKFdhbGxU
aW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAt
IG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oV2FsbFRp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oV2FsbFRpbWUgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChXYWxsVGltZSBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj4oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I8PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+
PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2FsbFRpbWU7CisKKyNl
bmRpZiAvLyBXVEZfV2FsbFRpbWVfaApJbmRleDogU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5h
cnlTZW1hcGhvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmlu
YXJ5U2VtYXBob3JlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhy
ZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxMyArNDUsMTQgQEAg
dm9pZCBCaW5hcnlTZW1hcGhvcmU6OnNpZ25hbCgpCiAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7
CiB9CiAKLWJvb2wgQmluYXJ5U2VtYXBob3JlOjp3YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCiti
b29sIEJpbmFyeVNlbWFwaG9yZTo6d2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgYWJzb2x1
dGVUaW1lKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKIAogICAgIGJvb2wg
dGltZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAoIW1faXNTZXQpIHsKLSAgICAgICAgdGltZWRP
dXQgPSAhbV9jb25kaXRpb24udGltZWRXYWl0KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAg
ICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgIG1fbXV0
ZXgsIGFic29sdXRlVGltZS5hcHByb3hpbWF0ZVdhbGxUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpKTsKICAgICAgICAgaWYgKHRpbWVkT3V0KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUu
aAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1h
cGhvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBCaW5hcnlTZW1hcGhvcmVfaAogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzksNyArNDAsNyBAQCBw
dWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5CaW5hcnlTZW1hcGhvcmUoKTsKIAogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNpZ25hbCgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHdhaXQoZG91YmxlIGFic29sdXRlVGltZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgd2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUpOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE2LTEx
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJr
aW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86
OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLiBJIHdp
bGwgd3JpdGUgdW5pdCB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogZmlsZWFwaS9UaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OmJsb2JTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGlt
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRUaW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL1RocmVhZFRpbWVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRUaW1lcnM6OnVw
ZGF0ZVNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9NYWluVGhyZWFkU2hhcmVk
VGltZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNl
dEZpcmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRU
aW1lckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNl
dEZpcmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVk
VGltZXJHTGliLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTWFpblRocmVhZFNoYXJl
ZFRpbWVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cnVuSW5Nb2RlKToKKwogMjAxNi0xMS0w
MyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMjA4MzAyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVC
bG9iUmVnaXN0cgogICAgICAgICAgICAgcmVzdWx0U2l6ZSA9IGJsb2JSZWdpc3RyeSgpLmJsb2JT
aXplKHVybCk7CiAgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgICAgIH0pOwot
ICAgICAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgp
KTsKKyAgICAgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0U2l6ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01haW5UaHJlYWRTaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBNYWluVGhyZWFkU2hhcmVkVGltZXImIHNpbmdsZXRvbigpOwogCiAg
ICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0RmlyZUludGVydmFsKFNlY29uZHMpIG92ZXJyaWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CiAK
ICAgICAvLyBUaGUgZmlyZSBpbnRlcnZhbCBpcyBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IG1vbm90b25pYyBjbG9jayB0aW1lLgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlSW50
ZXJ2YWwoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNv
bmRzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZSgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
VGltZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRU
aW1lcnMuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
aHJlYWRUaW1lcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgVGhyZWFkVGlt
ZXJzOjp1cGRhdGVTaGFyZWRUaW1lcigpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IAogICAgICAgICBtX3BlbmRpbmdTaGFyZWRUaW1lckZpcmVUaW1lID0gbmV4dEZpcmVUaW1l
OwotICAgICAgICBtX3NoYXJlZFRpbWVyLT5zZXRGaXJlSW50ZXJ2YWwoc3RkOjptYXgobmV4dEZp
cmVUaW1lIC0gY3VycmVudE1vbm90b25pY1RpbWUsIDAuMCkpOworICAgICAgICBtX3NoYXJlZFRp
bWVyLT5zZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyhzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJy
ZW50TW9ub3RvbmljVGltZSwgMC4wKSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvTWFpblRocmVh
ZFNoYXJlZFRpbWVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTkzLDExICs5MywxMSBAQCB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6aW52YWxpZGF0ZSgp
CiAgICAgc2hhcmVkVGltZXIgPSBudWxscHRyOwogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRU
aW1lcjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBBU1NF
UlQobV9maXJlZEZ1bmN0aW9uKTsKIAotICAgIENGQWJzb2x1dGVUaW1lIGZpcmVEYXRlID0gQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbDsKKyAgICBDRkFic29sdXRlVGltZSBm
aXJlRGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWwudmFsdWUoKTsK
ICAgICBpZiAoIXNoYXJlZFRpbWVyKSB7CiAgICAgICAgIHNoYXJlZFRpbWVyID0gQ0ZSdW5Mb29w
VGltZXJDcmVhdGUobnVsbHB0ciwgZmlyZURhdGUsIGtDRlRpbWVJbnRlcnZhbERpc3RhbnRGdXR1
cmUsIDAsIDAsIHRpbWVyRmlyZWQsIG51bGxwdHIpOwogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hh
cmVkVGltZXJFZmwuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Myw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMjAwOCBBZm9uc28gUmFiZWxvIENvc3RhIEpy
LgogICogICAgICAgICAgIChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
ICAqICAgICAgICAgICAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEwICs1NCwxMCBAQCB2b2lkIE1haW5UaHJlYWRT
aGFyZWRUaW1lcjo6c3RvcCgpCiAgICAgfQogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1l
cjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJl
ZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBzdG9wKCk7
Ci0gICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRlcnZhbCwgdGltZXJF
dmVudCwgbnVsbHB0cik7CisgICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChp
bnRlcnZhbC52YWx1ZSgpLCB0aW1lckV2ZW50LCBudWxscHRyKTsKIH0KIAogdm9pZCBNYWluVGhy
ZWFkU2hhcmVkVGltZXI6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJl
YWRTaGFyZWRUaW1lckdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zOSwxMCArMzksMTAgQEAgTWFp
blRocmVhZFNoYXJlZFRpbWVyOjpNYWluVGhyZWFkU2hhcmVkVAogICAgIG1fdGltZXIuc2V0UHJp
b3JpdHkoR19QUklPUklUWV9ISUdIX0lETEUgKyAyMCk7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhy
ZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAg
IEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24pOwotICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGludGVy
dmFsKTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbC52YWx1ZSgpKTsKIH0KIAog
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnN0b3AoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhy
ZWFkU2hhcmVkVGltZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSwxMiArMTIxLDEyIEBA
IHN0YXRpYyB2b2lkIE5UQVBJIHF1ZXVlVGltZXJQcm9jKFBWT0lELCAKICAgICAgICAgUG9zdE1l
c3NhZ2UodGltZXJXaW5kb3dIYW5kbGUsIHRpbWVyRmlyZWRNZXNzYWdlLCAwLCAwKTsKIH0KIAot
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2
YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKFNlY29uZHMg
aW50ZXJ2YWxJblNlY29uZHMpCiB7CiAgICAgQVNTRVJUKG1fZmlyZWRGdW5jdGlvbik7CiAKKyAg
ICBkb3VibGUgaW50ZXJ2YWwgPSBpbnRlcnZhbEluU2Vjb25kcy5taWxsaXNlY29uZHMoKTsKICAg
ICB1bnNpZ25lZCBpbnRlcnZhbEluTVM7Ci0gICAgaW50ZXJ2YWwgKj0gMTAwMDsKICAgICBpZiAo
aW50ZXJ2YWwgPiBVU0VSX1RJTUVSX01BWElNVU0pCiAgICAgICAgIGludGVydmFsSW5NUyA9IFVT
RVJfVElNRVJfTUFYSU1VTTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyUnVuTG9vcC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyUnVuTG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSwxNiArNTAsMTYgQEAg
Y2xhc3MgV29ya2VyU2hhcmVkVGltZXIgZmluYWwgOiBwdWJsaWMgUwogcHVibGljOgogICAgIC8v
IFNoYXJlZFRpbWVyIGludGVyZmFjZS4KICAgICB2b2lkIHNldEZpcmVkRnVuY3Rpb24oc3RkOjpm
dW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pIG92ZXJyaWRlIHsgbV9zaGFyZWRUaW1lckZ1bmN0
aW9uID0gV1RGTW92ZShmdW5jdGlvbik7IH0KLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3Vi
bGUgaW50ZXJ2YWwpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRlcnZhbCArIGN1cnJl
bnRUaW1lKCk7IH0KLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0g
MDsgfQorICAgIHZvaWQgc2V0RmlyZUludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIG92ZXJyaWRl
IHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRlcnZhbCArIFdhbGxUaW1lOjpub3coKTsgfQorICAgIHZv
aWQgc3RvcCgpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBXYWxsVGltZSgpOyB9CiAKICAg
ICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gbV9zaGFyZWRUaW1lckZ1bmN0aW9uICYmIG1fbmV4
dEZpcmVUaW1lOyB9Ci0gICAgZG91YmxlIGZpcmVUaW1lKCkgeyByZXR1cm4gbV9uZXh0RmlyZVRp
bWU7IH0KKyAgICBXYWxsVGltZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9
CiAgICAgdm9pZCBmaXJlKCkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24oKTsgfQogCiBwcml2YXRl
OgogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3NoYXJlZFRpbWVyRnVuY3Rpb247Ci0gICAg
ZG91YmxlIG1fbmV4dEZpcmVUaW1lIHsgMCB9OworICAgIFdhbGxUaW1lIG1fbmV4dEZpcmVUaW1l
OwogfTsKIAogY2xhc3MgTW9kZVByZWRpY2F0ZSB7CkBAIC0xNTcsMTUgKzE1OCwxNiBAQCBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1CiAgICAgICAgIGdfbWFpbl9jb250
ZXh0X2l0ZXJhdGlvbihtYWluQ29udGV4dCwgRkFMU0UpOwogI2VuZGlmCiAKLSAgICBkb3VibGUg
ZGVhZGxpbmUgPSBNZXNzYWdlUXVldWU8VGFzaz46OmluZmluaXRlVGltZSgpOworICAgIFdhbGxU
aW1lIGRlYWRsaW5lID0gV2FsbFRpbWU6OmluZmluaXR5KCk7CiAKICNpZiBVU0UoQ0YpCiAgICAg
Q0ZBYnNvbHV0ZVRpbWUgbmV4dENGUnVuTG9vcFRpbWVyRmlyZURhdGUgPSBDRlJ1bkxvb3BHZXRO
ZXh0VGltZXJGaXJlRGF0ZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7CiAgICAgZG91YmxlIHRpbWVVbnRpbE5leHRDRlJ1bkxvb3BUaW1lckluU2Vjb25kcyA9
IG5leHRDRlJ1bkxvb3BUaW1lckZpcmVEYXRlIC0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7
Ci0gICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSgpICsgc3RkOjptYXgoMC4wLCB0aW1lVW50aWxO
ZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMpOworICAgIGRlYWRsaW5lID0gV2FsbFRpbWU6Om5v
dygpICsgc3RkOjptYXgoCisgICAgICAgIFNlY29uZHMoMCksIFNlY29uZHModGltZVVudGlsTmV4
dENGUnVuTG9vcFRpbWVySW5TZWNvbmRzKSk7CiAjZW5kaWYKIAotICAgIGRvdWJsZSBhYnNvbHV0
ZVRpbWUgPSAwLjA7CisgICAgV2FsbFRpbWUgYWJzb2x1dGVUaW1lOwogICAgIGlmICh3YWl0TW9k
ZSA9PSBXYWl0Rm9yTWVzc2FnZSkgewogICAgICAgICBpZiAocHJlZGljYXRlLmlzRGVmYXVsdE1v
ZGUoKSAmJiBtX3NoYXJlZFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgYWJzb2x1dGVU
aW1lID0gc3RkOjptaW4oZGVhZGxpbmUsIG1fc2hhcmVkVGltZXItPmZpcmVUaW1lKCkpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTYtMTEtMDQgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEY6OlBhcmtpbmdMb3Qgc2hvdWxkIHN0
b3AgdXNpbmcgc3RkOjpjaHJvbm8gYmVjYXVzZSBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gY2FzdHMg
YXJlIHByb25lIHRvIG92ZXJmbG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyMDQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJ
UEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OndhaXQpOgorICAgICAgICAoSVBDOjpD
b25uZWN0aW9uOjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnRpbWVv
dXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5k
U3luY01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5
KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpD
b25uZWN0aW9uOjpzZW5kU3luYyk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JB
bmREaXNwYXRjaEltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvTWVzc2FnZVNl
bmRlci5oOgorICAgICAgICAoSVBDOjpNZXNzYWdlU2VuZGVyOjpzZW5kU3luYyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkNoaWxk
UHJvY2Vzc1Byb3h5OjpzZW5kU3luYyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNl
bmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5t
bToKKyAgICAgICAgKC1bV0tPbmVTaG90RGlzcGxheUxpbmtIYW5kbGVyIGRpc3BsYXlMaW5rRmly
ZWQ6XSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6
OmNvbW1pdExheWVyVHJlZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0ltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIgaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcldpbGxCZWdpbkFu
aW1hdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJv
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkYXRhU2VsZWN0aW9uRm9yUGFz
dGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZy
b21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGREZWxh
eVdpbmRvd09yZGVyaW5nRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmFjY2VwdHNGaXJzdE1vdXNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6
cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVD
bGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpwcmludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpyZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcpOgorCiAyMDE2LTEx
LTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFBy
aW50aW5nIHRvIFBERiBzaG91bGQgcHJvZHVjZSBpbnRlcm5hbCBsaW5rcyB3aGVuIEhUTUwgaGFz
IGludGVybmFsIGxpbmtzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgICAgICBtX3dhaXRGb3JTeW5jUmVwbHlTZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfQogCi0g
ICAgYm9vbCB3YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCisgICAgYm9vbCB3YWl0KFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSBhYnNvbHV0ZVRpbWUpCiAgICAgewogICAgICAgICByZXR1cm4gbV93
YWl0Rm9yU3luY1JlcGx5U2VtYXBob3JlLndhaXQoYWJzb2x1dGVUaW1lKTsKICAgICB9CkBAIC0z
NzYsNyArMzc2LDcgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZQog
ICAgICAgICBhdXRvIHdyYXBwZWRNZXNzYWdlID0gY3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKCJJ
UEMiLCAiV3JhcHBlZEFzeW5jTWVzc2FnZUZvclRlc3RpbmciLCBlbmNvZGVyLT5kZXN0aW5hdGlv
bklEKCksIHN5bmNSZXF1ZXN0SUQpOwogICAgICAgICB3cmFwcGVkTWVzc2FnZS0+c2V0RnVsbHlT
eW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKCk7CiAgICAgICAgIHdyYXBwZWRNZXNzYWdlLT53cmFw
Rm9yVGVzdGluZyhXVEZNb3ZlKGVuY29kZXIpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGJvb2w+KHNlbmRTeW5jTWVzc2FnZShzeW5jUmVxdWVzdElELCBXVEZNb3ZlKHdyYXBwZWRNZXNz
YWdlKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHsgfSkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oc2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdU
Rk1vdmUod3JhcHBlZE1lc3NhZ2UpLCBTZWNvbmRzOjppbmZpbml0eSgpLCB7IH0pKTsKICAgICB9
CiAKICAgICBpZiAoc2VuZE9wdGlvbnMuY29udGFpbnMoU2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KQpAQCAtNDIwLDEyICs0MjAsMTIgQEAgYm9v
bCBDb25uZWN0aW9uOjpzZW5kU3luY1JlcGx5KHN0ZDo6dW5pcQogICAgIHJldHVybiBzZW5kTWVz
c2FnZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOwogfQogCi1zdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIENvbm5lY3Rpb246OnRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5n
KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCkgY29uc3QKK1NlY29uZHMgQ29ubmVj
dGlvbjo6dGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoU2Vjb25kcyB0
aW1lb3V0KSBjb25zdAogewotICAgIHJldHVybiBtX2lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyA/
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpIDogdGltZW91dDsKKyAgICByZXR1cm4g
bV9pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcgPyBTZWNvbmRzOjppbmZpbml0eSgpIDogdGltZW91
dDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNz
YWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQor
c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKFN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5h
bWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdh
aXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTQ3MCw5ICs0NzAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29u
bmVjdGlvbjo6d2FpCiAgICAgfQogCiAgICAgLy8gQ2xhbXAgdGhlIHRpbWVvdXQgdG8gaG93ZXZl
ciBtdWNoIHRpbWUgaXMgcmVtYWluaW5nIG9uIG91ciBjbG9jay4KLSAgICBhdXRvIG5vdyA9IENv
bmRpdGlvbjo6Q2xvY2s6Om5vdygpOwotICAgIGF1dG8gcmVtYWluaW5nQ2xvY2tUaW1lID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oQ29uZGl0
aW9uOjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCkgLSBub3cpOwotICAgIGF1dG8gYWJzb2x1dGVU
aW1lb3V0ID0gbm93ICsgc3RkOjptaW4ocmVtYWluaW5nQ2xvY2tUaW1lLCB0aW1lb3V0KTsKKyAg
ICBNb25vdG9uaWNUaW1lIGFic29sdXRlVGltZW91dCA9IE1vbm90b25pY1RpbWU6Om5vdygpICsg
dGltZW91dDsKIAogICAgIC8vIE5vdyB3YWl0IGZvciBpdCB0byBiZSBzZXQuCiAgICAgd2hpbGUg
KHRydWUpIHsKQEAgLTQ5Niw3ICs0OTQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29u
bmVjdGlvbjo6d2FpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxE
ZWNvZGVyPiBDb25uZWN0aW9uOjpzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJ
RCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMp
CitzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKHVp
bnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyLCBT
ZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25z
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTU0MSwxMCArNTM5LDEw
IEBAIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjpzZW4KICAgICByZXR1cm4g
cmVwbHk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9y
U3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCitz
dGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseSh1aW50
NjRfdCBzeW5jUmVxdWVzdElELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09w
dGlvbj4gc2VuZFN5bmNPcHRpb25zKQogewogICAgIHRpbWVvdXQgPSB0aW1lb3V0UmVzcGVjdGlu
Z0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyh0aW1lb3V0KTsKLSAgICBkb3VibGUgYWJzb2x1dGVU
aW1lID0gY3VycmVudFRpbWUoKSArICh0aW1lb3V0LmNvdW50KCkgLyAxMDAwLjApOworICAgIFdh
bGxUaW1lIGFic29sdXRlVGltZSA9IFdhbGxUaW1lOjpub3coKSArIHRpbWVvdXQ7CiAKICAgICB3
aWxsU2VuZFN5bmNNZXNzYWdlKHNlbmRTeW5jT3B0aW9ucyk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpA
QCAtMTY2LDEzICsxNjYsMTMgQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Ym9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8
U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMgPSB7IH0pOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgc2VuZFdpdGhSZXBseShUJiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
RnVuY3Rpb25EaXNwYXRjaGVyJiByZXBseURpc3BhdGNoZXIsIEZ1bmN0aW9uPHZvaWQgKE9wdGlv
bmFsPHR5cGVuYW1lIENvZGluZ1R5cGU8dHlwZW5hbWUgVDo6UmVwbHk+OjpUeXBlPik+JiYgcmVw
bHlIYW5kbGVyKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzOjptYXgoKSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMg
PSB7IH0pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgd2FpdEZvckFuZERpc3BhdGNo
SW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMgPSB7
IH0pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2Us
IHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29u
ZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlv
bj4gc2VuZFN5bmNPcHRpb25zID0geyB9KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29s
IHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0g
eyB9KTsKIAogICAgIGJvb2wgc2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBP
cHRpb25TZXQ8U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMpOwogICAgIHZvaWQgc2VuZE1lc3NhZ2VX
aXRoUmVwbHkodWludDY0X3QgcmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIEZ1
bmN0aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNwYXRjaGVyLCBGdW5jdGlvbjx2b2lkIChzdGQ6OnVu
aXF1ZV9wdHI8RGVjb2Rlcj4pPiYmIHJlcGx5SGFuZGxlcik7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEVuY29kZXI+IGNyZWF0ZVN5bmNNZXNzYWdlRW5jb2RlcihTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0
aW5hdGlvbklELCB1aW50NjRfdCYgc3luY1JlcXVlc3RJRCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PERlY29kZXI+IHNlbmRTeW5jTWVzc2FnZSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OnVu
aXF1ZV9wdHI8RW5jb2Rlcj4sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0
aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxEZWNvZGVyPiBzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3Rk
Ojp1bmlxdWVfcHRyPEVuY29kZXI+LCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3lu
Y09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKTsKICAgICBib29sIHNlbmRTeW5jUmVwbHkoc3RkOjp1
bmlxdWVfcHRyPEVuY29kZXI+KTsKIAogICAgIHZvaWQgd2FrZVVwUnVuTG9vcCgpOwpAQCAtMjA4
LDkgKzIwOCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRp
Zmllcik7CiAgICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKICAgICAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGlu
YXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2Fp
dEZvck9wdGlvbj4pOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0Rm9yTWVzc2Fn
ZShTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlv
blNldDxXYWl0Rm9yT3B0aW9uPik7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+
IHdhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvclN5bmNSZXBseSh1aW50NjRfdCBzeW5jUmVxdWVz
dElELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwogCiAgICAg
Ly8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHdvcmsgcXVldWUuCiAgICAgdm9pZCBwcm9jZXNz
SW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPik7CkBAIC0yMzgsNyArMjM4
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxTZW5kU3luY01lc3NhZ2UoT3B0aW9uU2V0PFNl
bmRTeW5jT3B0aW9uPik7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxT
ZW5kU3luY09wdGlvbj4pOwogCi0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0
UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyhzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKSBjb25zdDsKKyAgICBTZWNvbmRzIHRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNG
b3JUZXN0aW5nKFNlY29uZHMpIGNvbnN0OwogICAgIAogICAgIENsaWVudCYgbV9jbGllbnQ7CiAg
ICAgYm9vbCBtX2lzU2VydmVyOwpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgQ29ubmVjdGlvbjo6
c2VuZFdpdGhSZXBseShUJiYgbWVzc2EKICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCBDb25uZWN0aW9uOjpzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVw
bHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3Nh
Z2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMp
CiB7CiAgICAgQ09NUElMRV9BU1NFUlQoVDo6aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsK
IApAQCAtMzg5LDcgKzM4OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlv
bjo6c2UKICAgICByZXR1cm4gcmVwbHlEZWNvZGVyLT5kZWNvZGUocmVwbHkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OndhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlh
dGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxX
YWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVj
b2Rlcj4gZGVjb2RlciA9IHdhaXRGb3JNZXNzYWdlKFQ6OnJlY2VpdmVyTmFtZSgpLCBUOjpuYW1l
KCksIGRlc3RpbmF0aW9uSUQsIHRpbWVvdXQsIHdhaXRGb3JPcHRpb25zKTsKICAgICBpZiAoIWRl
Y29kZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVy
LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9NZXNz
YWdlU2VuZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBzZW5kU3luYyhUJiYgbWVzc2Fn
ZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0
aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIE9wdGlvblNldDxTZW5k
U3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KQorICAgIGJvb2wgc2VuZFN5bmMoVCYm
IG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIFNlY29uZHMgdGltZW91dCA9IFNl
Y29uZHM6OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRp
b25zID0geyB9KQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChUOjppc1N5bmMsICJNZXNz
YWdlIGlzIG5vdCBzeW5jISIpOwogCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2Us
IHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Om1heCgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkK
KyAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5
LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZp
bml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpKTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJh
d2luZ0FyZWFQcm94eS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzYsNyArMjM2LDcgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRG
bwogICAgIC8vIGNob29zZSB0aGUgbW9zdCByZWNlbnQgb25lLCBvciB0aGUgb25lIHRoYXQgaXMg
Y2xvc2VzdCB0byBvdXIgY3VycmVudCBzaXplLgogCiAgICAgLy8gVGhlIHRpbWVvdXQsIGluIHNl
Y29uZHMsIHdlIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFza2VkIHRvIHBhaW50LgotICAgIG1fd2ViUGFnZVByb3h5
LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZT4obV93
ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSk7Cisg
ICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+d2FpdEZvckFuZERpc3Bh
dGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgU2Vjb25kczo6ZnJvbU1pbGxp
c2Vjb25kcyg1MDApKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5
ZXJUcmVlQ29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaGlsZFByb2Nl
c3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaGlsZFBy
b2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ2hpbGRQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJv
b2wgc2VuZChUJiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgT3B0aW9uU2V0PElQ
Qzo6U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMgPSB7IH0pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIHVpbnQ2
NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCA9IHN0
ZDo6Y2hyb25vOjpzZWNvbmRzKDEpLCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlvbj4gc2Vu
ZFN5bmNPcHRpb25zID0geyB9KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRT
eW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCB1aW50NjRfdCBkZXN0aW5hdGlv
bklELCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzKDEpLCBPcHRpb25TZXQ8SVBDOjpTZW5kU3lu
Y09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbigpIGNvbnN0CiAgICAgewpAQCAtMTAyLDcgKzEwMiw3IEBAIGJvb2wgQ2hpbGRQ
cm9jZXNzUHJveHk6OnNlbmQoVCYmIG1lc3NhZ2UKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVT4g
Ci1ib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kU3luYyhVJiYgbWVzc2FnZSwgdHlwZW5hbWUg
VTo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlvbj4gc2VuZFN5
bmNPcHRpb25zKQorYm9vbCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZFN5bmMoVSYmIG1lc3NhZ2Us
IHR5cGVuYW1lIFU6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29u
ZHMgdGltZW91dCwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9u
cykKIHsKICAgICBDT01QSUxFX0FTU0VSVChVOjppc1N5bmMsIFN5bmNNZXNzYWdlRXhwZWN0ZWQp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDkgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAKICAgICAvLyBUaGUg
dGltZW91dCB3ZSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUdlb21ldHJ5IG1lc3Nh
Z2UuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpIHsgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoNTAwKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBkaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSB7IHJldHVybiBTZWNvbmRzOjpmcm9tTWlsbGlzZWNv
bmRzKDUwMCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVw
ZGF0ZShzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzID0gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGVUaW1lb3V0KCkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yUG9zc2libGVHZW9tZXRy
eVVwZGF0ZShTZWNvbmRzID0gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkpIHsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGNvbG9yU3BhY2VEaWRDaGFuZ2UoKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbWluaW11bUxheW91dFNpemVEaWRDaGFuZ2UoKSB7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kUHJv
Y2Vzc1dpbGxTdXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZElt
bWluZW50bHkoKSwgTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHk6OlJlcGx5KGhhbmRsZWQpLCAwLCBzdGQ6OmNocm9ubzo6c2Vjb25kcygxKSk7CisgICAg
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHkoKSwgTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHk6
OlJlcGx5KGhhbmRsZWQpLCAwLCBTZWNvbmRzKDEpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJv
eHk6OnNlbmRQcmVwYXJlVG9TdXNwZW5kKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphcHAKICAgICAgICAgLy8gTWFr
ZSBzdXJlIGFueSBvbmdvaW5nIHdvcmsgaW4gb3VyIHF1ZXVlIGlzIGZpbmlzaGVkIGJlZm9yZSB3
ZSB0ZXJtaW5hdGUuCiAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKLSAgICBz
ZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICBz
ZW1hcGhvcmUud2FpdChXYWxsVGltZTo6aW5maW5pdHkoKSk7CiB9CiAKIFN0cmluZyBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcnNpc3RlbnRTdG9yYWdlUGF0aChjb25zdCBTdHJp
bmcmIGxhYmVsKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIwODM1OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNjksNyArMzY5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZW5kUHJvY2Vzc1dpbAogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGhhbmRsZWQg
PSBmYWxzZTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5OjpSZXBseShoYW5kbGVkKSwgMCwgc3RkOjpjaHJvbm86OnNl
Y29uZHMoMSkpOworICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseSgpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nl
c3NXaWxsU3VzcGVuZEltbWluZW50bHk6OlJlcGx5KGhhbmRsZWQpLCAwLCBTZWNvbmRzKDEpKTsK
IH0KICAgICAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZFByZXBhcmVUb1N1c3BlbmQo
KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NDMsNyArODQz
LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6YXBwbGljYXRpb25XaWxsVGVybQogCiAgICAgICAg
IHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKLSAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICBzZW1hcGhvcmUud2FpdChXYWxsVGlt
ZTo6aW5maW5pdHkoKSk7CiB9CiAKIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYSogU3RvcmFn
ZU1hbmFnZXI6OmZpbmRTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVp
bnQ2NF90IHN0b3JhZ2VNYXBJRCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
Njc4LDcgKzY3OCw3IEBAIC0gKE5TVUludGVnZXIpX3drX3BhZ2VDb3VudEZvclByaW50Rm9ybWEK
IC0gKENHUERGRG9jdW1lbnRSZWYpX3drX3ByaW50ZWREb2N1bWVudAogewogICAgIGlmIChfaXNQ
cmludGluZ1RvUERGKSB7Ci0gICAgICAgIGlmICghX3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0aW9u
KCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRyYXdUb1BERkNhbGxiYWNrPihfcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM6Om1heCgpKSkgeworICAgICAgICBpZiAoIV9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlv
bigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEcmF3VG9QREZDYWxsYmFjaz4oX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmlmaW5pdHko
KSkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeW5jaHJvbml6ZUR5bmFtaWNW
aWUKICAgICAgICAgZG91YmxlIG5ld1NjYWxlOwogICAgICAgICBGbG9hdFBvaW50IG5ld1Njcm9s
bFBvc2l0aW9uOwogICAgICAgICB1aW50NjRfdCBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlv
bklEOwotICAgICAgICBpZiAobV9wcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6
U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGUoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlN5
bmNocm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlOjpSZXBseShuZXdTY2FsZSwgbmV3U2Nyb2xs
UG9zaXRpb24sIG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0aW9uSUQpLCBtX3BhZ2VJRCwgc3Rk
OjpjaHJvbm86OnNlY29uZHMoMikpKSB7CisgICAgICAgIGlmIChtX3Byb2Nlc3MtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTeW5jaHJvbml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZSgpLCBN
ZXNzYWdlczo6V2ViUGFnZTo6U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGU6OlJlcGx5
KG5ld1NjYWxlLCBuZXdTY3JvbGxQb3NpdGlvbiwgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rp
b25JRCksIG1fcGFnZUlELCBTZWNvbmRzKDIpKSkgewogICAgICAgICAgICAgbV9keW5hbWljVmll
d3BvcnRTaXplVXBkYXRlV2FpdGluZ0ZvclRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgbV9k
eW5hbWljVmlld3BvcnRTaXplVXBkYXRlTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCA9IG5leHRWYWxp
ZExheWVyVHJlZVRyYW5zYWN0aW9uSUQ7CiAgICAgICAgICAgICBtX3BhZ2VDbGllbnQuZHluYW1p
Y1ZpZXdwb3J0VXBkYXRlQ2hhbmdlZFRhcmdldChuZXdTY2FsZSwgbmV3U2Nyb2xsUG9zaXRpb24s
IG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0aW9uSUQpOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgbmV4dExheWVyVHJl
ZVRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdMYXllclRyZWVUcmFuc2Fj
dGlvbklEICsgMTsgfQogICAgIHVpbnQ2NF90IGxhc3RDb21taXR0ZWRMYXllclRyZWVUcmFuc2Fj
dGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklERm9yUGVuZGluZ0NBQ29tbWl0
OyB9CiAKLSAgICB2b2lkIGRpZFJlZnJlc2hEaXNwbGF5KGRvdWJsZSB0aW1lc3RhbXApOworICAg
IHZvaWQgZGlkUmVmcmVzaERpc3BsYXkoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNpemVEaWRD
aGFuZ2UoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0JKHJl
dmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcg
KzgxLDcgQEAgLSAodm9pZClkZWFsbG9jCiAtICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlz
cGxheUxpbmsgKilzZW5kZXIKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBfZHJh
d2luZ0FyZWFQcm94eS0+ZGlkUmVmcmVzaERpc3BsYXkoc2VuZGVyLnRpbWVzdGFtcCk7CisgICAg
X2RyYXdpbmdBcmVhUHJveHktPmRpZFJlZnJlc2hEaXNwbGF5KCk7CiB9CiAKIC0gKHZvaWQpaW52
YWxpZGF0ZQpAQCAtMjI4LDExICsyMjgsMTEgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5OjpjbwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChzdGQ6OmV4Y2hhbmdl
KG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlLCBOZWVkc0RpZFVwZGF0ZSkgPT0gTWlzc2VkQ29tbWl0
KQotICAgICAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSk7CisgICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAgICAgW21fZGlzcGxheUxpbmtIYW5k
bGVyIHNjaGVkdWxlXTsKICNlbHNlCiAgICAgbV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgPSBOZWVk
c0RpZFVwZGF0ZTsKLSAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSk7CisgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKICNlbmRpZgogCiAgICAgaWYgKGF1
dG8gbWlsZXN0b25lcyA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLm5ld2x5UmVhY2hlZExheW91dE1p
bGVzdG9uZXMoKSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6OmluCiAgICAgfQogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KGRvdWJsZSkKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVmcmVzaERpc3BsYXkoKQogewogICAgIGlmICghbV93ZWJQ
YWdlUHJveHkuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MjYsMTYgKzQyNiwxNiBA
QCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OndhCiAgICAgLy8gV2UgbXVz
dCBzZW5kIHRoZSBkaWRVcGRhdGUgbWVzc2FnZSBiZWZvcmUgYmxvY2tpbmcgb24gdGhlIG5leHQg
Y29tbWl0LCBvdGhlcndpc2UKICAgICAvLyB3ZSBjYW4gYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBu
ZXh0IGNvbW1pdCB3b24ndCBjb21lIHVudGlsIGFmdGVyIHRoZSB3YWl0Rm9yQW5kRGlzcGF0Y2hJ
bW1lZGlhdGVseSB0aW1lcyBvdXQuCiAgICAgaWYgKG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlICE9
IERvZXNOb3ROZWVkRGlkVXBkYXRlKQotICAgICAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAK
LSAgICBzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRl
VGltZW91dCA9IFtdIHsKKyAgICBzdGF0aWMgU2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGlt
ZW91dCA9IFtdIHsKICAgICAgICAgaWYgKGlkIHZhbHVlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiV2ViS2l0T3ZlcnJpZGVBY3Rpdml0eVN0
YXRlVXBkYXRlVGltZW91dCJdKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJh
dGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bjxkb3VibGU+KFt2YWx1ZSBkb3VibGVWYWx1ZV0pKTsKKyAgICAgICAgICAgIHJldHVybiBTZWNv
bmRzKFt2YWx1ZSBkb3VibGVWYWx1ZV0pOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBy
ZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApOworICAgICAgICByZXR1cm4gU2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1MDApOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMoMjUwKTsKKyAgICAgICAgcmV0dXJuIFNlY29uZHM6OmZyb21N
aWxsaXNlY29uZHMoMjUwKTsKICNlbmRpZgogICAgIH0oKTsKICAgICBtX3dlYlBhZ2VQcm94eS5w
cm9jZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNz
YWdlczo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29tbWl0TGF5ZXJUcmVlPiht
X3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQsIElQQzo6
V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwcml2YXRlOgogICAg
IC8vIERyYXdpbmdBcmVhUHJveHkKICAgICB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdl
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVvdXQgPSBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSkgb3ZlcnJpZGU7
CisgICAgdm9pZCB3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShTZWNvbmRzIHRpbWVvdXQg
PSBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtaW5pbXVtTGF5b3V0
U2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5
OgogICAgIHNlbmRVcGRhdGVHZW9tZXRyeSgpOwogfQogCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgdGltZW91dCkKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFQcm94eTo6d2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoU2Vjb25kcyB0aW1lb3V0
KQogewogI2lmICFIQVZFKENPUkVBTklNQVRJT05fRkVOQ0VTKQogICAgIGlmICghbV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVHZW9tZXRyeSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHk6CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWFQcm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUoKQogewotICAgIGF1
dG8gYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
KDI1MCk7CisgICAgU2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCA9IFNlY29uZHM6
OmZyb21NaWxsaXNlY29uZHMoMjUwKTsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuY29u
bmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEaWRVcGRhdGVBY3Rpdml0eVN0YXRlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwg
YWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0
V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIubW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTYsNyArMTk2
LDcgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyV2lsbEJlZwogICAgIC8vIEZJ
WE1FOiBDb25uZWN0aW9uIGNhbiBiZSBudWxsIGlmIHRoZSBwcm9jZXNzIGlzIGNsb3NlZDsgd2Ug
c2hvdWxkIGNsZWFuIHVwIGJldHRlciBpbiB0aGF0IGNhc2UuCiAgICAgaWYgKF9zdGF0ZSA9PSBJ
bW1lZGlhdGVBY3Rpb25TdGF0ZTo6UGVuZGluZykgewogICAgICAgICBpZiAoYXV0byogY29ubmVj
dGlvbiA9IF9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBib29s
IHJlY2VpdmVkUmVwbHkgPSBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVs
eTxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVz
dD4oX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAg
ICAgICAgICAgYm9vbCByZWNlaXZlZFJlcGx5ID0gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3Bh
dGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3Q+KF9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25k
cyg1MDApKTsKICAgICAgICAgICAgIGlmICghcmVjZWl2ZWRSZXBseSkKICAgICAgICAgICAgICAg
ICBfc3RhdGUgPSBJbW1lZGlhdGVBY3Rpb25TdGF0ZTo6VGltZWRPdXQ7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
CShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjks
NyArMjI5LDcgQEAgU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUAogICAg
IGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgCi0gICAgY29uc3Qg
YXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25z
dCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDIwKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2U6OkdldFN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQoKSwgTWVzc2Fn
ZXM6OldlYlBhZ2U6OkdldFN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQ6OlJlcGx5KHZhbHVl
KSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0y
NDAsNyArMjQwLDcgQEAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGFnZVBybwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7
CiAgICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9
IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1l
b3V0KDIwKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldERh
dGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKHBhc3RlYm9hcmRUeXBlKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRE
YXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZDo6UmVwbHkoaGFuZGxlLCBzaXplKSwgbV9wYWdlSUQs
IG1lc3NhZ2VUaW1lb3V0KTsKICAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQpAQCAtMjU1LDcgKzI1
NSw3IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3QKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRv
IG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNl
Y29uZHMgbWVzc2FnZVRpbWVvdXQoMjApOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZTo6UmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSwg
TWVzc2FnZXM6OldlYlBhZ2U6OlJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDo6UmVwbHkocmVz
dWx0KSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpA
QCAtNDA4LDcgKzQwOCw3IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpzaG91bGREZWxheVdpbmRvd09y
ZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMyk7Cisg
ICAgY29uc3QgU2Vjb25kcyBtZXNzYWdlVGltZW91dCgzKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChldmVu
dCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQ6OlJl
cGx5KHJlc3VsdCksIG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTQxOSw3ICs0MTksNyBAQCBib29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0ZpcnN0
TW91c2UoaW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRz
KDMpOworICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMyk7CiAgICAgcHJvY2Vzcygp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpBY2NlcHRzRmlyc3RNb3VzZShldmVudE51bWJl
ciwgZXZlbnQpLCBNZXNzYWdlczo6V2ViUGFnZTo6QWNjZXB0c0ZpcnN0TW91c2U6OlJlcGx5KHJl
c3VsdCksIG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojpy
dW5CZWZvcmVVbmxvYWRDb24KIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0
aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbChtZXNzYWdlLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShz
aG91bGRDbG9zZSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3Vz
cGVuZCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xv
c2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5j
T3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJldHVybiBzaG91bGRDbG9zZTsKQEAgLTQwMCw3ICs0MDAsNyBAQCB2
b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0CiAKICAgICBIYW5nRGV0ZWN0
aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogCi0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3Vy
aXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGZyYW1lKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6
SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwg
U2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Q
cm9jZXNzV2lsbFN1c3BlbmQpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNj
cmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC00MTcs
NyArNDE3LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maQogICAg
IEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVu
SmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRh
Ojpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVu
SmF2YVNjcmlwdENvbmZpcm06OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1Q
bGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdl
SUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtNDM2LDcgKzQzNiw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojpy
dW5KYXZhU2NyaXB0UHJvbXAKIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0
aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkph
dmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlv
bjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQorICAgIGlmICghV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgp
LCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIG1lc3NhZ2UsIGRlZmF1bHRW
YWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5
KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2Vu
ZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFyZXN1bHQuaXNOdWxsKCk7CkBAIC02NjgsNyAr
NjY4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lKiBmcmFtZQogICAgIH0K
ICNlbmRpZgogCi0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQ
cmludEZyYW1lKHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQ
cmludEZyYW1lOjpSZXBseSgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBD
OjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAg
IG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZSh3ZWJG
cmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZTo6UmVw
bHkoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhj
ZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5h
bWUsIERhdGFiYXNlRGV0YWlscyBkZXRhaWxzKQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUKICAgICBpZiAoIW5ld1F1b3RhKSB7CiAg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKAogICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWRE
YXRhYmFzZVF1b3RhKHdlYkZyYW1lLT5mcmFtZUlEKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCksIGRhdGFiYXNlTmFtZSwgZGV0YWlscy5kaXNwbGF5TmFtZSgpLCBjdXJyZW50UXVvdGEs
IGN1cnJlbnRPcmlnaW5Vc2FnZSwgZGV0YWlscy5jdXJyZW50VXNhZ2UoKSwgZGV0YWlscy5leHBl
Y3RlZFVzYWdlKCkpLAotICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVk
ZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1Q
bGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpFeGNlZWRlZERhdGFiYXNlUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5w
YWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3Jt
UGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwogICAgIH0KIAogICAgIGRiTWFuYWdlci5zZXRR
dW90YShvcmlnaW4sIG5ld1F1b3RhKTsKQEAgLTcxMyw3ICs3MTMsNyBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uCiAgICAgdWludDY0X3QgbmV3UXVvdGEgPSAwOwog
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKAogICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhKG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGN1cnJlbnRR
dW90YSwgdG90YWxCeXRlc05lZWRlZCksCi0gICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9w
YWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2Vu
ZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICAgICAg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90
YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgp
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7
CiAKICAgICBjYWNoZVN0b3JhZ2Uuc3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBu
ZXdRdW90YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCw3ICs2OTAs
NyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAKICAgICBSZWY8
V2ViRnJhbWU+IHByb3RlY3QoKm1fZnJhbWUpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJh
bWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKTsKLSAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1l
LT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGNvcmVGcmFtZSksIHJl
c3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJl
c3BvbnNlU3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHBvbGljeUFjdGlvbiwgZG93
bmxvYWRJRCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5j
T3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpIHsKKyAgICBpZiAoIXdl
YlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJl
c3BvbnNlU3luYyhtX2ZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZy
YW1lKGNvcmVGcmFtZSksIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3Rl
bmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNU
b0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24s
IHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2Vu
ZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkgewogICAgICAg
ICBtX2ZyYW1lLT5kaWRSZWNlaXZlUG9saWN5RGVjaXNpb24obGlzdGVuZXJJRCwgUG9saWN5SWdu
b3JlLCAwLCB7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjA4MzU4KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTUzNiw3ICs1NTM1LDcg
QEAgdm9pZCBXZWJQYWdlOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVAogICAgIFVzZXJEYXRh
IHJldHVyblVzZXJEYXRhOwogCiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpOwotICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFu
ZGxlU3luY2hyb25vdXNNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YSh3ZWJQcm9jZXNzLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZTo6UmVwbHkocmV0dXJuVXNlckRhdGEpLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6VXNl
RnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKSkKKyAgICBpZiAoIXNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwg
VXNlckRhdGEod2ViUHJvY2Vzcy50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5
KSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJl
cGx5KHJldHVyblVzZXJEYXRhKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09w
dGlvbjo6VXNlRnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKSkKICAgICAgICAgcmV0dXJu
RGF0YSA9IG51bGxwdHI7CiAgICAgZWxzZQogICAgICAgICByZXR1cm5EYXRhID0gd2ViUHJvY2Vz
cy50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHJldHVyblVzZXJEYXRhLm9iamVjdCgpKTsKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwODM4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1
c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVk
UXVldWUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3Rv
cFByb2R1Y2luZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpz
dG9wQ29uc3VtaW5nKToKKwogMjAxNi0xMS0wNCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gUGFnZSB2aXNpYmlsaXR5IHRlc3RzIGFyZSB0aW1p
bmcgb3V0LgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24u
Y3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9D
b25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDkgQEAgZW51bSBOb3RpZnlTdHls
ZSB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCB3YWl0KENvbmRpdGlv
biYgY29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIsIGNvbnN0IEZ1bmN0
b3ImIHByZWRpY2F0ZSwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyB0aW1lb3V0KQordm9pZCB3
YWl0KENvbmRpdGlvbiYgY29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIs
IGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSwgU2Vjb25kcyB0aW1lb3V0KQogewotICAgIGlmICh0
aW1lb3V0ID09IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM6Om1heCgpKQorICAgIGlmICh0aW1l
b3V0ID09IFNlY29uZHM6OmluZmluaXR5KCkpCiAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tl
ciwgcHJlZGljYXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVGhpcyB0ZXN0cyB0aW1lb3V0
cyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCB2ZXJpZmllcyB0aGF0IHdlIGNhbiBjYWxsIHdhaXQoKSBh
Z2FpbiBhZnRlciBhCkBAIC04MCw4ICs4MCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB1bnNpZ25l
ZCBtYXhRdWV1ZVNpemUsCiAgICAgdW5zaWduZWQgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwKICAg
ICBOb3RpZnlTdHlsZSBub3RpZnlTdHlsZSwKLSAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRz
IHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKSwKLSAgICBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIGRlbGF5ID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6emVy
bygpKQorICAgIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksCisgICAgU2Vj
b25kcyBkZWxheSA9IFNlY29uZHMoMCkpCiB7CiAgICAgRGVxdWU8dW5zaWduZWQ+IHF1ZXVlOwog
ICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
cnVuVGVzdCgKICAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVy
KTsKICAgICB9CiAKLSAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoZGVsYXkpOworICAg
IGRlbGF5LnNsZWVwKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGkt
LTspIHsKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRl
VGhyZWFkKApAQCAtMTg2LDggKzE4Niw4IEBAIFRFU1QoV1RGX0NvbmRpdGlvbiwgT25lUHJvZHVj
ZXJPbmVDb25zdW0KIHsKICAgICBydW5UZXN0KAogICAgICAgICAxLCAxLCAxLCAxMDAwMDAsIFRh
Y3RpY2FsbHlOb3RpZnlBbGwsCi0gICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAw
MDApLAotICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAwMDApKTsKKyAgICAg
ICAgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygxMCksCisgICAgICAgIFNlY29uZHMoMSkpOwog
fQogCiBURVNUKFdURl9Db25kaXRpb24sIE9uZVByb2R1Y2VyT25lQ29uc3VtZXJIdW5kcmVkU2xv
dHMpCkBAIC0yNDcsNyArMjQ3LDcgQEAgVEVTVChXVEZfQ29uZGl0aW9uLCBUaW1lb3V0VGltZXNP
dXQpCiAKICAgICBsb2NrLmxvY2soKTsKICAgICBib29sIHJlc3VsdCA9IGNvbmRpdGlvbi53YWl0
Rm9yKAotICAgICAgICBsb2NrLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAwKSwgW10g
KCkgLT4gYm9vbCB7IHJldHVybiBmYWxzZTsgfSk7CisgICAgICAgIGxvY2ssIFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoMTApLCBbXSAoKSAtPiBib29sIHsgcmV0dXJuIGZhbHNlOyB9KTsKICAg
ICBsb2NrLnVubG9jaygpOwogCiAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhl
ZFF1ZXVlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3
ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9sb3dl
clF1ZXVlLmNsb3NlKCk7Ci0gICAgICAgIG1fcHJvZHVjZUNsb3NlU2VtYXBob3JlLndhaXQoc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgICAgIG1fcHJvZHVjZUNsb3Nl
U2VtYXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgICAgICBtX3Byb2R1Y2VR
dWV1ZSA9IG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBtX3VwcGVyUXVldWUuY2xvc2UoKTsKLSAg
ICAgICAgbV9jb25zdW1lQ2xvc2VTZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46Om1heCgpKTsKKyAgICAgICAgbV9jb25zdW1lQ2xvc2VTZW1hcGhvcmUud2FpdChXYWxs
VGltZTo6aW5maW5pdHkoKSk7CiAgICAgICAgIG1fY29uc3VtZVF1ZXVlID0gbnVsbHB0cjsKICAg
ICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293932</attachid>
            <date>2016-11-04 14:46:25 -0700</date>
            <delta_ts>2016-11-04 17:12:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>145240</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJvYmFibHkg
dGhlIG5pY2VzdCBleGFtcGxlIG9mIHdoeSB0aGlzIHBhdGNoIGlzIGEgZ29vZCBpZGVhIGlzIHRo
ZSBjaGFuZ2UgaW4KKyAgICAgICAgQXRvbWljc09iamVjdC5jcHAuCisKKyAgICAgICAgKiBqaXQv
SUNTdGF0cy5jcHA6CisgICAgICAgIChKU0M6OklDU3RhdHM6OklDU3RhdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQXRvbWljc09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2Fp
dCk6CisKIDIwMTYtMTEtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCBy
ZWJhc2UuLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIElDU3RhdHM6OklDU3RhdHMoKQogICAgICAgICBb
dGhpc10gKCkgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yU2Vj
b25kcyhtX2xvY2ssIDEsIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxkU3RvcDsg
fSk7CisgICAgICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvcigKKyAgICAgICAgICAgICAg
ICAgICAgbV9sb2NrLCBTZWNvbmRzKDEpLCBbdGhpc10gKCkgLT4gYm9vbCB7IHJldHVybiBtX3No
b3VsZFN0b3A7IH0pOwogICAgICAgICAgICAgICAgIGlmIChtX3Nob3VsZFN0b3ApCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsOCArMzA0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhdG9taWNzRnVuYwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KICAgICAKLSAgICBkb3VibGUgdGltZW91dEluTmFub3NlY29uZHMgPSB0
aW1lb3V0SW5NaWxsaXNlY29uZHMgKiAxMDAwICogMTAwMDsKLQorICAgIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKKyAg
ICAKICAgICAvLyBUaGlzIGNvdmVycyB0aGUgcHJvcG9zZWQgcnVsZToKICAgICAvLwogICAgIC8v
IDQuIElmIHRpbWVvdXQgaXMgbm90IHByb3ZpZGVkIG9yIGlzIHVuZGVmaW5lZCB0aGVuIGxldCB0
IGJlICtpbmYuIE90aGVyd2lzZToKQEAgLTMxNCwzMSArMzE0LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAvLwogICAgIC8vIGV4ZWMtPmFyZ3VtZW50
KDMpIHJldHVybnMgdW5kZWZpbmVkIGlmIGl0J3Mgbm90IHByb3ZpZGVkIGFuZCBUb051bWJlcih1
bmRlZmluZWQpIHJldHVybnMgTmFOLAogICAgIC8vIHNvIE5hTiBpcyB0aGUgb25seSBzcGVjaWFs
IGNhc2UuCi0gICAgaWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID09IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKQotICAgICAgICB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHN0ZDo6bWF4KDAuLCB0aW1lb3V0
SW5OYW5vc2Vjb25kcyk7CisgICAgaWYgKHRpbWVvdXQgPT0gdGltZW91dCkKKyAgICAgICAgdGlt
ZW91dCA9IHN0ZDo6bWF4KFNlY29uZHMoMCksIHRpbWVvdXQpOwogICAgIGVsc2UKLSAgICAgICAg
dGltZW91dEluTmFub3NlY29uZHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7Ci0gICAgCi0gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgaXMgYSBwaWxlIG9mIG5vbnNl
bnNlLCBidXQgaXQncyBhbGwgbmVlZGVkIGJlY2F1c2Ugb2YgY29ybmVyIGNhc2VzCi0gICAgLy8g
aW5zaWRlIHN0ZDo6Y2hyb25vLgotICAgIC8vIEZJWE1FOiBTdG9wIHVzaW5nIHN0ZDo6Y2hyb25v
LgotICAgIAotICAgIFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQ7Ci0gICAg
aWYgKHRpbWVvdXRJbk5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90
OjpDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQgPQotICAgICAgICAgICAgc3RkOjpjaHJv
bm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVvdXRJbk5hbm9zZWNvbmRz
KSk7Ci0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPCBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHM6Onplcm8oKSkKLSAgICAgICAgICAgIHRpbWVvdXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHJlbGF0aXZlVGltZW91dCA+IFBhcmtpbmdMb3Q6OkNsb2Nr
OjpkdXJhdGlvbjo6bWF4KCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xv
Y2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OkNsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAgICAg
ICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8UGFya2luZ0xvdDo6Q2xvY2s6OmR1cmF0aW9u
PihyZWxhdGl2ZVRpbWVvdXQpOwotICAgICAgICAgICAgdGltZW91dCA9IFBhcmtpbmdMb3Q6OkNs
b2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0OwotICAgICAgICB9Ci0gICAgfQorICAgICAg
ICB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHkoKTsKICAgICAKICAgICBib29sIGRpZFBhc3NW
YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCByZXN1bHQ7CkBA
IC0zNTEsNyArMzMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
YwogICAgICAgICAgICAgICAgIHJldHVybiBkaWRQYXNzVmFsaWRhdGlvbjsKICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICB0aW1lb3V0KTsKKyAgICAg
ICAgICAgIE1vbm90b25pY1RpbWU6Om5vdygpICsgdGltZW91dCk7CiAgICAgfQogICAgIGNvbnN0
IGNoYXIqIHJlc3VsdFN0cmluZzsKICAgICBpZiAoIWRpZFBhc3NWYWxpZGF0aW9uKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjM5IEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6
Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBv
dmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0aW1lIG1lYXN1cmVtZW50
cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAgIHNvbWV0aW1lcyBpdCB3
YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBvZiB0aW1lLCBzb21ldGlt
ZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVwb2NoLiBXaGVuIHdlIHNw
b2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEgbW9ub3RvbmljIGNsb2Nr
IG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdheXMgJ2RvdWJsZScgLSBu
ZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZlbgorICAgICAgICB0aG91
Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50ZXJ2YWwsIG1zIGludGVy
dmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMgc2luY2UgZXBvY2ggb24g
d2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2UgZXBvY2ggbW9ub3Rvbmlj
KS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRob3VnaHQgdGhhdCBpdCB3
b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJsZXMgd2l0aAorICAgICAg
ICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRoaW5ncyB3aXRoIHN0ZDo6
Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAgICBpbmNvbnZlbmllbnQ6
CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5ldmVyIHdhbnQgdG8gc2F5
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIgd2FudCB0byBzYXkKKyAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9pbnQuIFRoZSBzeW50YXgg
Zm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAgICAgICAgICBkdXJhdGlv
bl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAgIAorICAgICAgICAtIE5v
IG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50ZWdlcnMgYnkgZGVmYXVs
dCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNsdW1zeS4gQnV0IHRoZSBp
bnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIHJvdWdoIGVkZ2VzIG9m
IGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3ZWVuIHN0ZDo6Y2hyb25v
IHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNrcyBvdmVyZmxvdworICAg
ICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVudGx5LiBXZSBoYXZlIGV2
ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBo
YWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMgdXAgYmVpbmcgYSBzcGVj
aWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2VzLCB0aGUgb3ZlcmZsb3cg
YWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAgSXQncyBhbiBlcnJvciB0
byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQgaGF2ZSBiZWVuIGV4Y3Vz
YWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0aCB3YXMgbm90IGd1YXJh
bnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB0aGF0IHdvdWxkCisg
ICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMgYSBjb250aW51b3VzLCBp
bmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAgICAgICAgZm9yIGZsb2F0
aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBwcmVzZXJ2ZXMg
cHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQgZXh0cmVtZSBjYXNlcywg
c28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGltZSBtZWFucyB0aGF0IHVu
aXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAgICAgICAgbG9zc2xlc3Mu
IFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZlcnkgaGFyZCBhYm91dCB3
aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNoLCB3ZSB1c2Ugc2Vjb25k
cyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJvdW5kYXJpZXMsIGxpa2Ug
YW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21ldGhpbmcgb3RoZXIgdGhh
biBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBtYWtlcyBpdCBl
YXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29tZXRoaW5nIHRoYXQgdGlt
ZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1wbGU6IHdoZW4gd291bGQg
eW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlzIGlzIHRoZQorICAgICAg
ICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBwb3J0IGJvdGggYSB0aW1l
b3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZhcmlhbnQuCisKKyAgICAg
ICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0aGluZ3Mgd2hlbiBtYXRo
IGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAgICAgcHJldHR5IHdlbGwg
b3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdvdWxkIGRvIHdoZW4gY29t
cHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVzZW50ZWQgdXNpbmcgc2Np
ZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBzaWduaWZpY2FudAorICAg
ICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1bmRlciBmbG9hdGluZyBw
b2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAgICAgICBvdGhlciBoYW5k
LCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdlIGJlY2F1c2UgeW91IGhh
dmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxlIHBvc3NpYmxlIFVCIGNv
cm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJbnRlZ2VycyB0aGF0Cisg
ICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGxhcmdlIGFuZCB5
b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAgICAgICAgdGhlbS4gQXQg
dGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBhbSBub3QgY2VydGFpbiB0
aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhlIGNvcm5lciBjYXNlcwor
ICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1la2VlcGluZyBjbGFzc2Vz
IHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAgICBhbGwgaW50ZXJuYWxs
eSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2VicmFpYyB0eXBpbmcuIFRo
ZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25kczogdGhpcyBpcyBmb3Ig
bWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6IHRpbWUgc2luY2UgZXBv
Y2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuCisgICAg
ICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2NvcmRpbmcgdG8gYSBtb25v
dG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRoYXQgc2F5cyBlaXRoZXIg
V2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOiBh
IHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXByZXNlbnRzIGVpdGhlciBh
CisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUuCisgICAgICAgIAorICAg
ICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysgdmFsdWVzIGFuZCBhcmUg
Y2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAgICAgdmVyeSBuZWFybHkg
UE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lvbnMgYmV0d2VlbiB0aGUg
dmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMgaXMgYnkgd2F5IG9mIGFs
Z2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2UgcmVjb2duaXplOgorICAg
ICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29uZHMKKyAgICAgICAgU2Vj
b25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3RvbmljVGltZSA9IE1vbm90
b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAgICAKKyAgICAgICAgV2Ug
c3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMgYmVjYXVzZSBtYXRoLgor
ICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBiZXR3ZWVuIE1vbm90b25p
Y1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgd3Qg
PSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdheSB0byBkbyBpdCBpcyB0
byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNsb2NrcyBhbmQgY29udmVy
dCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFueSBvZiBvdXIgQVBJcyB3
b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGltZSB0aGUgdXNlciB3YW50
ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2ggaW5jbHVkZXMgQ29uZGl0
aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS4gWW91
CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRpbWUgb3IgTW9ub3Rvbmlj
VGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhh
dCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246OndhaXRVbnRpbCwgdGhlbiBD
b25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hlbiBpdCBzaG91bGQgd2Fr
ZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgV2FsbFRpbWUgLSBi
dXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4gd2FpdFVudGlsIHdpbGwg
bWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAgICBNb25vdG9uaWNUaW1l
LiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0aGFuIGNocm9ubyBhbGxv
d2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIGEg
ZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5v
dCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8gYW5kIHRoZXNlIG5ldyB0
aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmllbmNlIHNob3dzIHRoYXQg
d2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0d2VlbgorICAgICAgICBz
dGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywgSSBkaWRuJ3QgbmVlZCBz
dWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAgcGF0Y2ggb25seSBjb252
ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2luZ0xvdCBhbmQgQ29uZGl0
aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRoYXQgY29kZSBvbnRvIHRo
ZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgICog
d3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWwp
OgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToKKyAgICAgICAgKFdURjo6
Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRV
bnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6OkNyb3NzVGhyZWFkUXVl
dWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICogd3RmL0N1cnJlbnRUaW1l
LmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0Zi9NZXNzYWdlUXVldWUu
aDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRpbWUpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1v
bm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmFwcHJveGlt
YXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNU
aW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpNb25vdG9uaWNUaW1l
KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0RvdWJsZSk6CisgICAgICAg
IChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAgKFdURjo6TW9ub3Rvbmlj
VGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjph
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6
TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToKKyAgICAgICAgKiB3dGYv
UGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25h
bGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAg
IChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAgICAoV1RGOjpQYXJraW5n
TG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdMb3QuaDoKKyAgICAgICAg
KFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAgICAgICAoV1RGOjpQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1NlY29uZHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vjb25kcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6
OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6CisgICAgICAgIChXVEY6
OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pY3Jvc2Vj
b25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRzKToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OmZy
b21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMp
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAgICAgIChXVEY6OlNlY29u
ZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcispOgor
ICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci8pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3Bl
cmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yKj0pOgorICAgICAgICAo
V1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcj4p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKFdURjo6U2Vj
b25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5v
dyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVD
bG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6d2FsbFRpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1vbm90b25pY1RpbWUp
OgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlV2Fs
bFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGlt
YXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgorICAgICAgICAqIHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91YmxlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VFcG9jaCk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBlKToKKyAgICAgICAgKFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2NrQW5kUmF3RG91YmxlKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcispOgorICAg
ICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogd3RmL1dhbGxU
aW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpub3cpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2xlZXApOgorICAgICAg
ICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OldhbGxU
aW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3VibGUpOgorICAgICAgICAo
V1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6c2Vjb25k
c1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVXYWxsVGlt
ZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdU
Rjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6
OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3YWl0KToKKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0xMS0wMyAgS29uc3RhbnRp
biBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgRml4ZXMgdG8gYnVpbGQg
SlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNiBAQAogCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsgfTsKKwkJMEY2NkIyOEIx
REM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87IH07CisJCTBGNjZCMjhE
MURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9u
b3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25k
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07CisJCTBGNjZCMjhGMURD
OTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oICov
OyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwICov
OyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi87IH07
CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICovOyB9OwogCQkwRjcyNUNB
QzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNl
dC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDNUZC
NTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGODI0QTY4
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJMEY0M0Q4RjAxREI1QURE
QzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9ja1R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAwNEExRDNGIC8qIE1vbm90
b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ub3Rv
bmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgzMURDOTdC
QUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4NzFEQzk3
QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FsbFRpbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3QkFCMDA0QTFEM0YgLyog
V2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FsbFRpbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4ODVDRjIwMDQ0RjVFMiAv
KiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFy
aXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJv
b2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNw
cCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmggKi8sCiAJ
CQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICovLAogCQkJCTBG
OEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8sCiAJCQkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8sCkBAIC05
NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0
b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1l
LmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5o
ICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtlZFB0ci5oICovLAogCQkJ
CTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3llZC5oICovLAogCQkJCTBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAgLTEwMDcsNiArMTAzMSw4
IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVD
ODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCisJCQkJMEY2NkIyODQx
REM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBGNjZCMjg1MURDOTdCQUIw
MDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBT
ZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyog
U0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4QTQ3MzM2MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJQThBNDczM0UxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDczM0YxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJMEY2NkIyODYxREM5N0JB
QjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgKi8sCisJCQkJMEY2NkIy
ODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oICovLAogCQkJ
CTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLywKIAkJCQkwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAogCQkJCTE0OUVGMTYyMTZC
QkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2ICsxMDgyLDggQEAKIAkJ
CQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzEx
NTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFEM0Yg
LyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxs
VGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8s
CiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkw
RkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLApAQCAtMTI1OSw3ICsx
Mjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVC
MDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4
QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNDAsNiAr
MTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlCIC8qIExpc3REdW1wLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAKIAkJCQkxNEYzQjBGNzE1
RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3Nzk3IC8qIFNlY3VyaXR5
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiArMTUwMCw3IEBACiAJCQkJ
RTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAvKiBYUENTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAvKiBJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJEIC8qIEluZGV4TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJQThBNDczQUExNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDUxMTUxQTgy
NUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9ja09i
akNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAwNDEy
M0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2MDE1MUE4
MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY0
MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQx
MjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjZCMjhBMURD
OTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIy
OTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdD
Ri5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBACiAJCQkJQThBNDc0NDgx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMxREM5N0JBQjAwNEExRDNG
IC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOEYxRDMwN0FC
ODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFD
OTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJVVEYxNi5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkocmV2
aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkOjpzdGFy
dChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChs
b2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09
IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2h1dCB0aGUg
dGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyAxOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Ns
b2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2NrLCBTZWNvbmRzKDEpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3RpZnkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2luZyB0byBzbGVlcCFcbiIp
OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAtNjQsNiArNjUsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1ldGFBbGxvY2F0b3IuaAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1RpbWUuaAogICAgIE5vbmNv
cHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xMDEs
NiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBTZWNvbmRzLmgKICAgICBT
ZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBTdGFja0JvdW5kcy5oCkBA
IC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhyZWFkU3BlY2lmaWMuaAog
ICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5oCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBVbmlxdWVSZWYuaAogICAg
IFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVmVjdG9y
LmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEuaAorICAgIFdhbGxUaW1l
LmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29ya1F1ZXVlLmgKQEAgLTE3
Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNzLmNwcAogICAgIEF1dG9t
YXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xvY2tUeXBlLmNwcAogICAg
IENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCiAgICAgTWV0YUFsbG9j
YXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJlck9mQ29yZXMuY3BwCiAg
ICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApAQCAtMjA3LDEyICsyMTQs
MTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcAogICAg
IFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNwcAogICAgIFNpeENoYXJh
Y3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKICAg
ICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCisgICAgV2FsbFRpbWUu
Y3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAogICAgIGR0b2EuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvQ2xv
Y2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENs
b2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBl
OjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5wcmludCgiTW9ub3Rvbmlj
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBXVEZfQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX0Nsb2NrVHlwZV9oCisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKworZW51bSBjbGFzcyBDbG9j
a1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tUeXBlKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCisjZW5kaWYgLy8gV1RGX0Ns
b2NrVHlwZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZu
ZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gKIAotI2luY2x1ZGUg
PGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXJraW5n
TG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBUaGlz
IGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQg
aXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5j
ZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAgdHlwZWRlZiBQYXJraW5n
TG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3b3VsZCBiZSBhYmxlIHRv
IHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UKKyAgICAvLyBhcmUgdW5s
aWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVyc2lvbnMsIGl0IGlzIGJl
dHRlciB0byB1c2UgTW9ub3RvbmljVGltZS4KKyAgICB0eXBlZGVmIFBhcmtpbmdMb3Q6OlRpbWUg
VGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNp
bmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAg
ICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlm
IHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAgKzY3LDEwIEBAIHN0cnVj
dCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJlbGVhc2UgdGhlIGxvY2sg
Zm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQgd2l0aCBP
cGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdhaXQoKS4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRpbChMb2NrVHlwZSYgbG9j
aywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdhaXRVbnRpbChMb2NrVHlw
ZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogICAgIHsK
ICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0IDwgQ2xvY2s6Om5vdygp
KSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkpIHsK
ICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0IENvbmRpdGlvbkJhc2Ug
ewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIFJl
dHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4KICAgICAvLyBNYXkgcmV0
dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBD
bG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAg
Ym9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKICAgICB7
CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAgICAgIGlmICghd2FpdFVu
dGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAgc3RydWN0IENvbmRpdGlv
bkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlz
ZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgogICAgIC8v
IE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBib29sIHdh
aXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJhdGlvblR5cGUmIHJlbGF0
aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgICAgICBMb2NrVHlwZSYg
bG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJzb2x1dGVGcm9tUmVsYXRp
dmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAgcmV0dXJuIHdhaXRVbnRp
bChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRl
KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+CisgICAgYm9v
bCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKKyAgICB7
CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyBy
ZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
PgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0gICAgICAgIHdhaXRVbnRp
bChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAgICB3YWl0VW50aWwobG9j
aywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2IEBAIHN0cnVjdCBDb25k
aXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgotICAgIGJvb2wgd2FpdFVu
dGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91dCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAgICAgICAgICAgd2FpdChs
b2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNsb2NrOjpub3coKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50
aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0
U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywg
YWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVudGlsTW9ub3RvbmljQ2xv
Y2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwobG9jaywgYWJzb2x1dGVU
aW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0g
ICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91YmxlIHJlbGF0aXZlVGlt
ZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIGRv
dWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZlVGltZW91dFNlY29uZHMg
KiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghKHJl
bGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaGFu
ZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAgICAgICAgIGxvY2sudW5s
b2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA+
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkp
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5vc2Vjb25kcyBjYW5ub3Qg
YmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4gd2UKLSAgICAgICAgICAg
IC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAgICAgd2FpdChsb2NrLCBw
cmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25v
OjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vj
b25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJlbGF0aXZlVGltZW91dCwg
cHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgZXh0
cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0
byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9kLiBUaGlzIHJldHVybnMg
dHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAgICBib29sIG5vdGlmeU9u
ZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICB9CiAg
ICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9v
bCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVv
dXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9zZWNv
bmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjAp
OwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiAw
KSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdlbGwg
YXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2subG9j
aygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSB0
aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1iaXQg
aW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZvcmV2
ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAg
ICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxh
dGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChs
b2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJvb2wgd2FpdEZvckltcGwo
TG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRpdmVUaW1lb3V0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0ZUZyb21SZWxhdGl2ZShy
ZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEdXJhdGlv
blR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9tUmVsYXRpdmUoY29uc3Qg
RHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAgICAgICBpZiAocmVsYXRp
dmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2xv
Y2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVvdXQgPiBD
bG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGhpZ2hseSB1
bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90IGRvIGFueXRoaW5nIGR1
bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGltZW91dCBzZWVtcyBzZW5z
aWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB3aGF0IGNhbiBi
ZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9jbG9jay4KLSAgICAgICAg
ICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91dCA9Ci0gICAgICAgICAg
ICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRpb24+KHJlbGF0aXZlVGlt
ZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15UmVsYXRpdmVUaW1lb3V0
OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OyAgICAKK307CiAK
IGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRR
dWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3NzVGhyZWFkUXVldWUuaAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENyb3NzVGhyZWFkUXVldWU8
RGF0YVR5cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGluZmluaXRlVGlt
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0gICAgICAgIG1fY29uZGl0
aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZpbml0ZVRpbWUpOworICAg
ICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fcXVl
dWUudGFrZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiAyMDgz
NTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0
IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KQEAgLTM0
MCw3ICszNDAsNyBAQCB2b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKICAgICBMb2NrIGZha2VMb2Nr
OwogICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwogICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7Ci0gICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1Nl
Y29uZHMoZmFrZUxvY2ssIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICsgdmFsdWUpOwor
ICAgIGZha2VDb25kaXRpb24ud2FpdEZvcihmYWtlTG9jaywgU2Vjb25kcyh2YWx1ZSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCShyZXZpc2lvbiAy
MDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1l
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxs
ZWQoKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIGRvdWJsZSBhYnNvbHV0ZVRpbWUp
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVy
ZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRlJiYsIFdhbGxU
aW1lIGFic29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRl
PgogICAgICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYmKTsKQEAgLTc2LDggKzc3LDYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIFRoZSByZXN1bHQgb2YgaXNFbXB0eSgpIGlzIG9u
bHkgdmFsaWQgaWYgbm8gb3RoZXIgdGhyZWFkIGlzIG1hbmlwdWxhdGluZyB0aGUgcXVldWUgYXQg
dGhlIHNhbWUgdGltZS4KICAgICAgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICAgICAgc3RhdGlj
IGRvdWJsZSBpbmZpbml0ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46Om1heCgpOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIExvY2sgbV9tdXRl
eDsKICAgICAgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOwpAQCAtMTMwLDE0ICsxMjksMTQgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6
d2FpdEZvck1lc3NhZ2UoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAg
ICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb247IAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGlt
ZW91dChleGl0UmVhc29uLCBbXShjb25zdCBEYXRhVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIGlu
ZmluaXRlVGltZSgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiByZXN1bHQg
PSB3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoZXhpdFJlYXNvbiwgW10oY29uc3Qg
RGF0YVR5cGUmKSB7IHJldHVybiB0cnVlOyB9LCBXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
ICAgIEFTU0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgfHwgZXhpdFJl
YXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0
YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2Fp
dFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KKyAgICBpbmxpbmUgYXV0byBNZXNzYWdl
UXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2Fn
ZVF1ZXVlV2FpdFJlc3VsdCYgcmVzdWx0LCBQcmVkaWNhdGUmJiBwcmVkaWNhdGUsIFdhbGxUaW1l
IGFic29sdXRlVGltZSkgLT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFs
c2U7CkBAIC0xNTEsMTAgKzE1MCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlm
IChmb3VuZCAhPSBtX3F1ZXVlLmVuZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi53YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRz
KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAgICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRp
dGlvbi53YWl0VW50aWwobV9tdXRleCwgYWJzb2x1dGVUaW1lKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsK
KyAgICAgICAgQVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogCiAgICAgICAgIGlmIChtX2tpbGxlZCkgewogICAgICAgICAgICAgcmVzdWx0
ID0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01vbm90b25p
Y1RpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1vbm90b25p
Y1RpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJl
YW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaCIKKyNpbmNsdWRlICJX
YWxsVGltZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworTW9ub3RvbmljVGltZSBNb25vdG9uaWNU
aW1lOjpub3coKQoreworICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKSk7Cit9CisKK1dhbGxUaW1lIE1vbm90b25pY1RpbWU6OmFwcHJveGltYXRl
V2FsbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiAqdGhpcyAtIG5vdygpICsgV2FsbFRpbWU6
Om5vdygpOworfQorCit2b2lkIE1vbm90b25pY1RpbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk1vbm90b25pYygiLCBtX3ZhbHVlLCAiIHNlYykiKTsK
K30KKwordm9pZCBNb25vdG9uaWNUaW1lOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlKCp0aGlzKS5zbGVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNUaW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdU
Rl9Nb25vdG9uaWNUaW1lX2gKKyNkZWZpbmUgV1RGX01vbm90b25pY1RpbWVfaAorCisjaW5jbHVk
ZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFByaW50U3RyZWFtOworCisvLyBUaGUg
Y3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3RvbmljIGNs
b2NrcyBkb24ndCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3NzaWJseSBkb24ndCBjb3VudCBkb3du
dGltZS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2Fu
IHJlYXNvbiBhYm91dAorLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGlu
IG1hdGguIEl0J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywKKy8v
IG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUg
YWxsIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8gU3BlY2lmaWNhbGx5LCBNb25vdG9u
aWNUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUgdGhh
dAorLy8gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIGlz
IHRoZSBzYW1lIGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgorY2xh
c3MgTW9ub3RvbmljVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBj
bG9ja1R5cGUgPSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRo
ZSBlcG9jaC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMg
eCAtIE1vbm90b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNUaW1lKCkgeyB9CisgICAgCisgICAg
Ly8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNl
bnRzIHRpbWUgYWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJlIGZyb20gdGhlIHNh
bWUgdGltZQorICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMgTW9ub3RvbmljVGltZSBmcm9tUmF3
U2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBNb25vdG9uaWNUaW1lIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBNb25vdG9uaWNU
aW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBNb25vdG9uaWNUaW1lIGluZmluaXR5KCkgeyBy
ZXR1cm4gZnJvbVJhd1NlY29uZHMoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpKTsgfQorCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJu
IFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRl
TW9ub3RvbmljVGltZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAg
CisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMobV92YWx1ZSAtIG90
aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBz
Y2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMK
KyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBNb25vdG9uaWNU
aW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29u
ZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItPShTZWNvbmRzIG90
aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9
CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE1vbm90b25pY1RpbWUgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTW9ub3RvbmljVGltZSBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I+KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8PShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj49KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok1v
bm90b25pY1RpbWU7CisKKyNlbmRpZiAvLyBXVEZfTW9ub3RvbmljVGltZV9oCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
YXJraW5nTG90LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogCiAgICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOwogICAgIAotICAgIHN0ZDo6bXV0ZXgg
cGFya2luZ0xvY2s7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlv
bjsKKyAgICBNdXRleCBwYXJraW5nTG9jazsKKyAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0Nv
bmRpdGlvbjsKIAogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MgeyBudWxscHRyIH07CiAgICAgCkBA
IC01NjQsNyArNTY0LDcgQEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFy
awogICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2wo
KT4mIHZhbGlkYXRpb24sCiAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNs
ZWVwLAotICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAgY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KQogewogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIpKTsKQEAgLTU5
MiwyMCArNTkyLDE3IEBAIE5FVkVSX0lOTElORSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsK
ICAgICAKICAgICBib29sIGRpZEdldERlcXVldWVkOwogICAgIHsKLSAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hp
bGUgKG1lLT5hZGRyZXNzICYmIENsb2NrOjpub3coKSA8IHRpbWVvdXQpIHsKLSAgICAgICAgICAg
IC8vIEZhbGxpbmcgYmFjayB0byB3YWl0KCkgd29ya3MgYXJvdW5kIGEgYnVnIGluIGxpYnN0ZGMr
KyBpbXBsZW1lbnRhdGlvbiBvZiBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZS4gU2VlOgotICAgICAg
ICAgICAgLy8gLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MDI3
Ci0gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcu
Y2dpP2lkPTU4OTMxCi0gICAgICAgICAgICBpZiAodGltZW91dCA9PSBDbG9jazo6dGltZV9wb2lu
dDo6bWF4KCkpCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2Nr
ZXIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0
aW9uLndhaXRfdW50aWwobG9ja2VyLCB0aW1lb3V0KTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcyAmJiB0aW1l
b3V0Lm5vd1dpdGhTYW1lQ2xvY2soKSA8IHRpbWVvdXQpIHsKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nQ29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2ss
IHRpbWVvdXQuYXBwcm94aW1hdGVXYWxsVGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIGFib3ZlLCB3
ZSBkbyB0aGlzIHRoaW5nLCB3aGljaCBpcyBoaWxhcmlvdXNseSBhd2Z1bCwgYnV0IGVuc3VyZXMg
dGhhdCB0aGUgd29yc3QgY2FzZSBpcwotICAgICAgICAgICAgLy8gYSBDUFUtZWF0aW5nIHNwaW4g
YnV0IG5vdCBhIGRlYWRsb2NrLgotICAgICAgICAgICAgbG9ja2VyLnVubG9jaygpOwotICAgICAg
ICAgICAgbG9ja2VyLmxvY2soKTsKKyAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIHRo
ZSBPUyB0byBkZWNpZGUgbm90IHRvIHdhaXQuIElmIGl0IGRvZXMgdGhhdCB0aGVuIGl0IHdpbGwg
YWxzbworICAgICAgICAgICAgLy8gZGVjaWRlIG5vdCB0byByZWxlYXNlIHRoZSBsb2NrLiBJZiB0
aGVyZSdzIGEgYnVnIGluIHRoZSB0aW1lIG1hdGgsIHRoZW4gdGhpcyBjb3VsZAorICAgICAgICAg
ICAgLy8gcmVzdWx0IGluIGEgZGVhZGxvY2suIEZsYXNoaW5nIHRoZSBsb2NrIG1lYW5zIHRoYXQg
YXQgd29yc3QgaXQncyBqdXN0IGEgQ1BVLWVhdGluZworICAgICAgICAgICAgLy8gc3Bpbi4KKyAg
ICAgICAgICAgIG1lLT5wYXJraW5nTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nTG9jay5sb2NrKCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKCFtZS0+YWRkcmVzcyB8
fCBtZS0+YWRkcmVzcyA9PSBhZGRyZXNzKTsKICAgICAgICAgZGlkR2V0RGVxdWV1ZWQgPSAhbWUt
PmFkZHJlc3M7CkBAIC02NDAsMTQgKzYzNywxNCBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBQYXJrCiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBtYXR0ZXIgd2hhdCwg
bWUtPmFkZHJlc3MgaXMgbnVsbCBhZnRlciB0aGlzIHBvaW50LgogICAgIHsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIGlmICghZGlk
RGVxdWV1ZSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBkZXF1ZXVlIG91cnNlbHZl
cywgdGhlbiBzb21lb25lIGVsc2UgZGlkLiBUaGV5IHdpbGwgc2V0IG91ciBhZGRyZXNzIHRvCiAg
ICAgICAgICAgICAvLyBudWxsLiBXZSBkb24ndCB3YW50IHRvIHByb2NlZWQgdW50aWwgdGhleSBk
byB0aGlzLCBiZWNhdXNlIG90aGVyd2lzZSwgdGhleSBtYXkgc2V0CiAgICAgICAgICAgICAvLyBv
dXIgYWRkcmVzcyB0byBudWxsIGluIHNvbWUgZGlzdGFudCBmdXR1cmUgd2hlbiB3ZSdyZSBhbHJl
YWR5IHRyeWluZyB0byB3YWl0IGZvcgogICAgICAgICAgICAgLy8gb3RoZXIgdGhpbmdzLgogICAg
ICAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzKQotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5n
Q29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRp
dGlvbi53YWl0KG1lLT5wYXJraW5nTG9jayk7CiAgICAgICAgIH0KICAgICAgICAgbWUtPmFkZHJl
c3MgPSBudWxscHRyOwogICAgIH0KQEAgLTY5NSwxMSArNjkyLDExIEBAIE5FVkVSX0lOTElORSBQ
YXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGEKICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVz
cyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgIHRocmVhZERhdGEtPmFkZHJlc3Mg
PSBudWxscHRyOwogICAgICAgICB0aHJlYWREYXRhLT50b2tlbiA9IDA7CiAgICAgfQotICAgIHRo
cmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEt
PnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
NzQxLDExICs3MzgsMTEgQEAgTkVWRVJfSU5MSU5FIHZvaWQgUGFya2luZ0xvdDo6dW5wYXJrT25l
SQogICAgIEFTU0VSVCh0aHJlYWREYXRhLT5hZGRyZXNzKTsKICAgICAKICAgICB7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdM
b2NrKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2Nr
KTsKICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgfQogICAgIC8v
IEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWREYXRhIG1heSBkaWUuIEdvb2QgdGhpbmcgd2UgaGF2
ZSBhIFJlZlB0cjw+IG9uIGl0LgotICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90
aWZ5X29uZSgpOworICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiB9
CiAKIE5FVkVSX0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmtDb3VudChjb25zdCB2
b2lkKiBhZGRyZXNzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTc3OSwxMCArNzc2LDEwIEBAIE5FVkVS
X0lOTElORSB1bnNpZ25lZCBQYXJraW5nTG90Ojp1bnBhcmsKICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJl
YWREYXRhLmdldCgpKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5h
ZGRyZXNzKSwgIlxuIikpOwogICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRkcmVzcyk7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2Vy
KHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgICAgICB0aHJlYWREYXRhLT5hZGRy
ZXNzID0gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29u
ZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlv
bi5zaWduYWwoKTsKICAgICB9CiAKICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaWZuZGVmIFdURl9QYXJraW5nTG90X2gK
ICNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAogCi0jaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUg
PGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvU2Nv
cGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM5LDcg
KzM5LDE1IEBAIGNsYXNzIFBhcmtpbmdMb3QgewogICAgIFBhcmtpbmdMb3QoY29uc3QgUGFya2lu
Z0xvdCYpID0gZGVsZXRlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6c3Rl
YWR5X2Nsb2NrIENsb2NrOworICAgIC8vIFBhcmtpbmdMb3Qgd2lsbCBhY2NlcHQgYW55IGtpbmQg
b2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhpcyB0eXBlZGVmIHRlbGxz
CisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIFBhcmtpbmdMb3Qgd291bGQgYmUgYWJsZSB0
byB1c2Ugd2l0aG91dCBjb252ZXJzaW9ucy4gSXQncyBzYWQgdGhhdAorICAgIC8vIHRoaXMgaXMg
V2FsbFRpbWUgbm90IE1vbm90b25pY1RpbWUsIGJ1dCB0aGF0J3MganVzdCBob3cgT1Mgd2FpdCBm
dW5jdGlvbnMgd29yay4gSG93ZXZlciwKKyAgICAvLyBiZWNhdXNlIFBhcmtpbmdMb3QgZXZhbHVh
dGVzIHdoZXRoZXIgaXQgc2hvdWxkIHdhaXQgYnkgY2hlY2tpbmcgaWYgeW91ciB0aW1lIGhhcyBw
YXNzZWQKKyAgICAvLyB1c2luZyB3aGF0ZXZlciBjbG9jayB5b3UgdXNlZCwgc3BlY2lmeWluZyB0
aW1lb3V0cyBpbiBNb25vdG9uaWNUaW1lIGlzIHNlbWFudGljYWxseSBiZXR0ZXIuCisgICAgLy8g
Rm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIHNldHMgaGlzIGNvbXB1dGVyJ3MgY2xvY2sgYmFjayBk
dXJpbmcgdGhlIHRpbWUgdGhhdCB5b3Ugd2FudGVkIHRvCisgICAgLy8gd2FpdCBmb3Igb25lIHNl
Y29uZCwgYW5kIHlvdSBzcGVjaWZpZWQgdGhlIHRpbWVvdXQgdXNpbmcgdGhlIE1vbm90b25pY1Rp
bWUsIHRoZW4gUGFya2luZ0xvdAorICAgIC8vIHdpbGwgYmUgc21hcnQgZW5vdWdoIHRvIGtub3cg
dGhhdCB5b3VyIG9uZSBzZWNvbmQgaGFzIGVsYXBzZWQuCisgICAgdHlwZWRlZiBXYWxsVGltZSBU
aW1lOwogICAgIAogICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLiBUaGUKICAgICAv
LyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJu
cyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuCkBAIC02OCw3ICs3Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAgICAgICAgY29uc3QgVmFsaWRh
dGlvbkZ1bmN0b3ImIHZhbGlkYXRpb24sCiAgICAgICAgIGNvbnN0IEJlZm9yZVNsZWVwRnVuY3Rv
ciYgYmVmb3JlU2xlZXAsCi0gICAgICAgIENsb2NrOjp0aW1lX3BvaW50IHRpbWVvdXQpCisgICAg
ICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseUltcGwoCiAgICAgICAgICAgICBhZGRyZXNzLApA
QCAtODksNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09
IGV4cGVjdGVkOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFtdICgpIHsgfSwKLSAgICAg
ICAgICAgIENsb2NrOjp0aW1lX3BvaW50OjptYXgoKSk7CisgICAgICAgICAgICBUaW1lOjppbmZp
bml0eSgpKTsKICAgICB9CiAKICAgICAvLyBVbnBhcmtpbmcgc3RhdHVzIGdpdmVuIHRvIHlvdSBh
bnl0aW1lIHlvdSB1bnBhcmtPbmUoKS4KQEAgLTE1OCw3ICsxNjYsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAogICAgICAgICBjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bCgpPiYgdmFsaWRhdGlvbiwKICAgICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJl
Zm9yZVNsZWVwLAotICAgICAgICBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0KTsKKyAgICAgICAg
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lb3V0KTsKICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrT25lSW1wbCgKICAgICAgICAgY29uc3Qg
dm9pZCogYWRkcmVzcywgY29uc3QgU2NvcGVkTGFtYmRhPGludHB0cl90KFVucGFya1Jlc3VsdCk+
JiBjYWxsYmFjayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TZWNvbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWNvbmRzLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgor
I2luY2x1ZGUgIk1vbm90b25pY1RpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2lu
Y2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxUaW1lLmgi
CisKK25hbWVzcGFjZSBXVEYgeworCitXYWxsVGltZSBTZWNvbmRzOjpvcGVyYXRvcisoV2FsbFRp
bWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK01vbm90
b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3IrKE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG90aGVyICsgKnRoaXM7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSBTZWNvbmRzOjpvcGVyYXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gb3RoZXIgKyAqdGhpczsKK30KKworV2FsbFRpbWUgU2Vj
b25kczo6b3BlcmF0b3ItKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHModmFsdWUoKSAtIG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgU2Vjb25kczo6b3BlcmF0b3ItKE1vbm90b25p
Y1RpbWUgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdT
ZWNvbmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQor
CitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25kczo6b3BlcmF0b3ItKGNvbnN0IFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVyLndp
dGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpOworfQorCit2b2lkIFNlY29uZHM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSwgIiBzZWMiKTsKK30KKwordm9pZCBTZWNv
bmRzOjpzbGVlcCgpIGNvbnN0Cit7CisgICAgV1RGOjpzbGVlcChtX3ZhbHVlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlY29uZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1Nl
Y29uZHNfaAorI2RlZmluZSBXVEZfU2Vjb25kc19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBNb25vdG9uaWNUaW1lOworY2xhc3MgUHJpbnRTdHJlYW07CitjbGFzcyBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGU7CitjbGFzcyBXYWxsVGltZTsKKworY2xhc3MgU2Vjb25kcyB7CitwdWJsaWM6
CisgICAgU2Vjb25kcygpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBTZWNvbmRz
KGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAor
ICAgIGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGRvdWJs
ZSBtaWxsaXNlY29uZHMoKSBjb25zdCB7IHJldHVybiBzZWNvbmRzKCkgKiAxMDAwOyB9CisgICAg
ZG91YmxlIG1pY3Jvc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1pbGxpc2Vjb25kcygpICogMTAw
MDsgfQorICAgIGRvdWJsZSBuYW5vc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1pY3Jvc2Vjb25k
cygpICogMTAwMDsgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tTWls
bGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZh
bHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBm
cm9tTWljcm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9t
TWlsbGlzZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgU2Vjb25kcyBmcm9tTmFub3NlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZyb21NaWNyb3NlY29uZHModmFsdWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGluZmluaXR5KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSArIG90aGVyLnZhbHVl
KCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAtIG90aGVyLnZhbHVl
KCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEl0
IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxpbmcgYSBkdXJhdGlvbiwgbGlrZSwgIkkgd2Fu
dCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcworICAgIC8vIGxhc3QgdGltZSEiLgorICAgIFNl
Y29uZHMgb3BlcmF0b3IqKGRvdWJsZSBzY2FsYXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU2Vjb25kcyh2YWx1ZSgpICogc2NhbGFyKTsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBv
cGVyYXRvci8oZG91YmxlIHNjYWxhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNv
bmRzKHZhbHVlKCkgLyBzY2FsYXIpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCdzIHJlYXNvbmFi
bGUgdG8gdGhpbmsgYWJvdXQgcmF0aW9zIGJldHdlZW4gU2Vjb25kcy4KKyAgICBkb3VibGUgb3Bl
cmF0b3IvKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUo
KSAvIG90aGVyLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMmIG9wZXJhdG9yKj0oZG91YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzICogc2NhbGFyOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
JiBvcGVyYXRvci89KGRvdWJsZSBzY2FsYXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyAvIHNjYWxhcjsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdh
bGxUaW1lIG9wZXJhdG9yKyhXYWxsVGltZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKE1vbm90b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBXYWxsVGltZSBvcGVyYXRvci0oV2FsbFRpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLShNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShT
ZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoU2Vjb25kcyBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBkb3VibGUg
bV92YWx1ZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWUgV1RGCisKK3VzaW5nIFdURjo6U2Vj
b25kczsKKworI2VuZGlmIC8vIFdURl9TZWNvbmRzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
aCIKKworI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRl
ICJQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93KENsb2NrVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBy
ZXR1cm4gV2FsbFRpbWU6Om5vdygpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Cisg
ICAgICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
KCk7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdAoreworICAgIHJldHVybiBub3coY2xvY2tUeXBl
KCkpOworfQorCitXYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OndhbGxUaW1lKCkg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xvY2tUeXBlOjpXYWxsKTsK
KyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKG1fdmFsdWUpOworfQorCitNb25v
dG9uaWNUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bW9ub3RvbmljVGltZSgpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IENsb2NrVHlwZTo6TW9ub3RvbmljKTsK
KyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd1NlY29uZHMobV92YWx1ZSk7Cit9CisK
K1dhbGxUaW1lIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6YXBwcm94aW1hdGVXYWxsVGltZSgp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2Fs
bDoKKyAgICAgICAgcmV0dXJuIHdhbGxUaW1lKCk7CisgICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90
b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKS5hcHByb3hpbWF0ZVdhbGxUaW1l
KCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFdhbGxUaW1lKCk7Cit9CisKK01vbm90b25pY1RpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
OjphcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdAoreworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBDbG9ja1R5cGU6OldhbGw6CisgICAgICAgIHJldHVybiB3YWxsVGltZSgp
LmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9u
aWM6CisgICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCk7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE1vbm90b25pY1RpbWUoKTsKK30KKwor
U2Vjb25kcyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yLShjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBTZWNvbmRzKG1fdmFsdWUgLSBvdGhl
ci5tX3ZhbHVlKTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9y
PChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVl
IDwgb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9w
ZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUpOworICAgIHJldHVybiBt
X3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKK30KKworYm9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGU6Om9wZXJhdG9yPD0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKKyAgICBy
ZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTo6b3BlcmF0b3I+PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90
aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBvdGhlci5tX3R5cGUp
OworICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7Cit9CisKK3ZvaWQgVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KG1fdHlwZSwgIigiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwordm9pZCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU6OnNsZWVwKCkgY29uc3QKK3sKKyAgICBMb2NrIGZha2VMb2Nr
OworICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOworICAgIExvY2tIb2xkZXIgZmFrZUxvY2tl
cihmYWtlTG9jayk7CisgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssICp0aGlz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL1dURi93dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RGX1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+CisjaW5jbHVkZSA8
d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCitjbGFzcyBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgeworcHVibGljOgorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSgpIHsgfQor
ICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZShXYWxsVGltZSB0aW1lKQorICAgICAg
ICA6IG1fdmFsdWUodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpCisgICAgICAgICwg
bV90eXBlKENsb2NrVHlwZTo6V2FsbCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZShNb25vdG9uaWNUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1ZSh0
aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5cGUoQ2xvY2tU
eXBlOjpNb25vdG9uaWMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIGZyb21SYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSwgQ2xvY2tUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQubV90eXBlID0gdHlw
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBzZWNv
bmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICBD
bG9ja1R5cGUgY2xvY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgbm93KENs
b2NrVHlwZSk7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSBub3dXaXRoU2FtZUNsb2NrKCkgY29uc3Q7CisgICAgCisgICAgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmZyb21S
YXdTZWNvbmRzKHZhbHVlLCBjbG9ja1R5cGUoKSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc2Vy
dHMgdGhhdCB0aGUgdGltZSBpcyBvZiB0aGUgdHlwZSB5b3Ugd2FudC4KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgV2FsbFRpbWUgd2FsbFRpbWUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgTW9ub3RvbmljVGltZSBtb25vdG9uaWNUaW1lKCkgY29uc3Q7CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUoKSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBhcHByb3hpbWF0ZU1vbm90b25pY1RpbWUo
KSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJh
dG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1l
Q2xvY2tBbmRSYXdTZWNvbmRzKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAg
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKG1f
dmFsdWUgLSBvdGhlci52YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNj
YWxhciBhbmQgc2NhbGFycyBjYW4gYmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20g
YWxnZWJyYWljCisgICAgLy8gdHJhbnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9Cisg
ICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhl
cikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgICAgfQor
ICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBTZWNvbmRzIG9wZXJhdG9yLShjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWUKKyAgICAgICAgICAgICYmIG1fdHlw
ZSA9PSBvdGhlci5tX3R5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBUbyBkbyByZWxh
dGl2ZSBjb21wYXJpc29ucywgeW91IG11c3QgYmUgdXNpbmcgdGltZXMgd2l0aCB0aGUgc2FtZSBj
bG9jayB0eXBlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPChjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIAorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGRvdWJsZSBtX3ZhbHVlIHsgMCB9OworICAgIENsb2NrVHlwZSBtX3R5cGUgeyBDbG9ja1R5cGU6
OldhbGwgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTsKKworI2VuZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGVfaApJbmRleDogU291cmNlL1dURi93dGYvV2FsbFRpbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9XYWxsVGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2FsbFRpbWUuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5j
bHVkZSAiTW9ub3RvbmljVGltZS5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVk
ZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitXYWxs
VGltZSBXYWxsVGltZTo6bm93KCkKK3sKKyAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoY3VycmVu
dFRpbWUoKSk7Cit9CisKK01vbm90b25pY1RpbWUgV2FsbFRpbWU6OmFwcHJveGltYXRlTW9ub3Rv
bmljVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBNb25vdG9uaWNU
aW1lOjpub3coKTsKK30KKwordm9pZCBXYWxsVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiV2FsbCgiLCBtX3ZhbHVlLCAiIHNlYykiKTsKK30KKwor
dm9pZCBXYWxsVGltZTo6c2xlZXAoKSBjb25zdAoreworICAgIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZSgqdGhpcykuc2xlZXAoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDog
U291cmNlL1dURi93dGYvV2FsbFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9X
YWxsVGltZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfV2FsbFRpbWVfaAorI2RlZmluZSBXVEZf
V2FsbFRpbWVfaAorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9uaWNUaW1lOworY2xh
c3MgUHJpbnRTdHJlYW07CisKKy8vIFRoZSBjdXJyZW50IHRpbWUgYWNjb3JkaW5nIHRvIGEgd2Fs
bCBjbG9jayAoYWthIHJlYWwgdGltZSBjbG9jaykuIFRoaXMgdXNlcyBmbG9hdGluZyBwb2ludAor
Ly8gaW50ZXJuYWxseSBzbyB0aGF0IHlvdSBjYW4gcmVhc29uIGFib3V0IGluZmluaXR5IGFuZCBv
dGhlciB0aGluZ3MgdGhhdCBhcmlzZSBpbiBtYXRoLiBJdCdzCisvLyBhY2NlcHRhYmxlIHRvIHVz
ZSB0aGlzIHRvIHdyYXAgTmFOIHRpbWVzLCBuZWdhdGl2ZSB0aW1lcywgYW5kIGluZmluaXRlIHRp
bWVzLCBzbyBsb25nIGFzIHRoZXkKKy8vIGFyZSByZWxhdGl2ZSB0byB0aGUgc2FtZSBjbG9jay4g
U3BlY2lmaWNhbGx5LCBXYWxsVGltZSBzaG91bGQgYmUgdXNlZCBpbiBhZ3JlZW1lbnQgd2l0aCB0
aGUKKy8vIHByaW5jaXBsZSB0aGF0IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkgaXMgdGhlIHNhbWUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgorY2xhc3MgV2FsbFRp
bWUgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBDbG9ja1R5cGUgY2xvY2tUeXBlID0gQ2xv
Y2tUeXBlOjpXYWxsOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGVwb2NoLiBTbywgeC5zZWNv
bmRzU2luY2VFcG9jaCgpIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB4IC0gV2FsbFRpbWUoKS4KKyAg
ICBXYWxsVGltZSgpIHsgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyBmb3Ig
c3VyZSB0aGF0IHRoZSBkb3VibGUgcmVwcmVzZW50cyB0aW1lIGFjY29yZGluZyB0bworICAgIC8v
IFdURjo6Y3VycmVudFRpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBpdCBtdXN0IGJl
IGZyb20gdGhlIHNhbWUgdGltZSBzb3VyY2UuCisgICAgc3RhdGljIFdhbGxUaW1lIGZyb21SYXdT
ZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFdhbGxUaW1lIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXYWxsVGltZSBub3coKTsK
KyAgICAKKyAgICBzdGF0aWMgV2FsbFRpbWUgaW5maW5pdHkoKSB7IHJldHVybiBmcm9tUmF3U2Vj
b25kcyhzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOyB9CisgICAgCisg
ICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92
YWx1ZSk7IH0KKyAgICAKKyAgICBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBh
cHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgV2FsbFRp
bWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbVJhd1NlY29uZHMobV92YWx1ZSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAg
ICBXYWxsVGltZSBvcGVyYXRvci0oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7CisgICAgfQor
ICAgIAorICAgIC8vIFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQg
YXMgdGhpcyBjb3VsZCBhcmlzZSBmcm9tIGFsZ2VicmFpYworICAgIC8vIHRyYW5zZm9ybWF0aW9u
cy4gU28sIHdlIGFsbG93IGl0LgorICAgIFdhbGxUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBXYWxsVGltZSYgb3BlcmF0b3IrPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV2FsbFRpbWUm
IG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMgb3BlcmF0b3ItKFdhbGxU
aW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNlY29uZHMobV92YWx1ZSAt
IG90aGVyLm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oV2FsbFRp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5t
X3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oV2FsbFRpbWUgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChXYWxsVGltZSBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvcj4oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I8PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+
PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzbGVlcCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2FsbFRpbWU7CisKKyNl
bmRpZiAvLyBXVEZfV2FsbFRpbWVfaApJbmRleDogU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5h
cnlTZW1hcGhvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmlu
YXJ5U2VtYXBob3JlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhy
ZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxMyArNDUsMTQgQEAg
dm9pZCBCaW5hcnlTZW1hcGhvcmU6OnNpZ25hbCgpCiAgICAgbV9jb25kaXRpb24uc2lnbmFsKCk7
CiB9CiAKLWJvb2wgQmluYXJ5U2VtYXBob3JlOjp3YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCiti
b29sIEJpbmFyeVNlbWFwaG9yZTo6d2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgYWJzb2x1
dGVUaW1lKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKIAogICAgIGJvb2wg
dGltZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAoIW1faXNTZXQpIHsKLSAgICAgICAgdGltZWRP
dXQgPSAhbV9jb25kaXRpb24udGltZWRXYWl0KG1fbXV0ZXgsIGFic29sdXRlVGltZSk7CisgICAg
ICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLnRpbWVkV2FpdCgKKyAgICAgICAgICAgIG1fbXV0
ZXgsIGFic29sdXRlVGltZS5hcHByb3hpbWF0ZVdhbGxUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpKTsKICAgICAgICAgaWYgKHRpbWVkT3V0KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUu
aAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1h
cGhvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBCaW5hcnlTZW1hcGhvcmVfaAogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzksNyArNDAsNyBAQCBw
dWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5CaW5hcnlTZW1hcGhvcmUoKTsKIAogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNpZ25hbCgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHdhaXQoZG91YmxlIGFic29sdXRlVGltZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgd2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUpOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1NldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE2LTEx
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJr
aW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86
OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLiBJIHdp
bGwgd3JpdGUgdW5pdCB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogZmlsZWFwaS9UaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OmJsb2JTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGlt
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRUaW1lci5oOgorICAgICAgICAqIHBsYXRm
b3JtL1RocmVhZFRpbWVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRUaW1lcnM6OnVw
ZGF0ZVNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9NYWluVGhyZWFkU2hhcmVk
VGltZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNl
dEZpcmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRU
aW1lckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNl
dEZpcmVJbnRlcnZhbCk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVk
VGltZXJHTGliLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTWFpblRocmVhZFNoYXJl
ZFRpbWVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6
c2V0RmlyZUludGVydmFsKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cnVuSW5Nb2RlKToKKwogMjAxNi0xMS0w
MyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMjA4MzAyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdW5zaWduZWQgbG9uZyBsb25nIFRocmVhZGFibGVC
bG9iUmVnaXN0cgogICAgICAgICAgICAgcmVzdWx0U2l6ZSA9IGJsb2JSZWdpc3RyeSgpLmJsb2JT
aXplKHVybCk7CiAgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgICAgIH0pOwot
ICAgICAgICBzZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgp
KTsKKyAgICAgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0U2l6ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01haW5UaHJlYWRTaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBNYWluVGhyZWFkU2hhcmVkVGltZXImIHNpbmdsZXRvbigpOwogCiAg
ICAgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0RmlyZUludGVydmFsKFNlY29uZHMpIG92ZXJyaWRlOwogICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZFRpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRGaXJlZEZ1bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CiAK
ICAgICAvLyBUaGUgZmlyZSBpbnRlcnZhbCBpcyBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBj
dXJyZW50IG1vbm90b25pYyBjbG9jayB0aW1lLgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlSW50
ZXJ2YWwoZG91YmxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNv
bmRzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZSgpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
VGltZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRU
aW1lcnMuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
aHJlYWRUaW1lcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgVGhyZWFkVGlt
ZXJzOjp1cGRhdGVTaGFyZWRUaW1lcigpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IAogICAgICAgICBtX3BlbmRpbmdTaGFyZWRUaW1lckZpcmVUaW1lID0gbmV4dEZpcmVUaW1l
OwotICAgICAgICBtX3NoYXJlZFRpbWVyLT5zZXRGaXJlSW50ZXJ2YWwoc3RkOjptYXgobmV4dEZp
cmVUaW1lIC0gY3VycmVudE1vbm90b25pY1RpbWUsIDAuMCkpOworICAgICAgICBtX3NoYXJlZFRp
bWVyLT5zZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyhzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJy
ZW50TW9ub3RvbmljVGltZSwgMC4wKSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcAko
cmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvTWFpblRocmVh
ZFNoYXJlZFRpbWVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTkzLDExICs5MywxMSBAQCB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6aW52YWxpZGF0ZSgp
CiAgICAgc2hhcmVkVGltZXIgPSBudWxscHRyOwogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRU
aW1lcjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBBU1NF
UlQobV9maXJlZEZ1bmN0aW9uKTsKIAotICAgIENGQWJzb2x1dGVUaW1lIGZpcmVEYXRlID0gQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbDsKKyAgICBDRkFic29sdXRlVGltZSBm
aXJlRGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgaW50ZXJ2YWwudmFsdWUoKTsK
ICAgICBpZiAoIXNoYXJlZFRpbWVyKSB7CiAgICAgICAgIHNoYXJlZFRpbWVyID0gQ0ZSdW5Mb29w
VGltZXJDcmVhdGUobnVsbHB0ciwgZmlyZURhdGUsIGtDRlRpbWVJbnRlcnZhbERpc3RhbnRGdXR1
cmUsIDAsIDAsIHRpbWVyRmlyZWQsIG51bGxwdHIpOwogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hh
cmVkVGltZXJFZmwuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Myw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMjAwOCBBZm9uc28gUmFiZWxvIENvc3RhIEpy
LgogICogICAgICAgICAgIChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
ICAqICAgICAgICAgICAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEwICs1NCwxMCBAQCB2b2lkIE1haW5UaHJlYWRT
aGFyZWRUaW1lcjo6c3RvcCgpCiAgICAgfQogfQogCi12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1l
cjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJl
ZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBzdG9wKCk7
Ci0gICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChpbnRlcnZhbCwgdGltZXJF
dmVudCwgbnVsbHB0cik7CisgICAgc2hhcmVkVGltZXIgPSBlY29yZV90aW1lcl9sb29wX2FkZChp
bnRlcnZhbC52YWx1ZSgpLCB0aW1lckV2ZW50LCBudWxscHRyKTsKIH0KIAogdm9pZCBNYWluVGhy
ZWFkU2hhcmVkVGltZXI6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJl
YWRTaGFyZWRUaW1lckdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zOSwxMCArMzksMTAgQEAgTWFp
blRocmVhZFNoYXJlZFRpbWVyOjpNYWluVGhyZWFkU2hhcmVkVAogICAgIG1fdGltZXIuc2V0UHJp
b3JpdHkoR19QUklPUklUWV9ISUdIX0lETEUgKyAyMCk7CiB9CiAKLXZvaWQgTWFpblRocmVhZFNo
YXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQordm9pZCBNYWluVGhy
ZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAg
IEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24pOwotICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KGludGVy
dmFsKTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbC52YWx1ZSgpKTsKIH0KIAog
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnN0b3AoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01haW5UaHJlYWRTaGFyZWRUaW1lcldpbi5jcHAJ
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhy
ZWFkU2hhcmVkVGltZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMSwxMiArMTIxLDEyIEBA
IHN0YXRpYyB2b2lkIE5UQVBJIHF1ZXVlVGltZXJQcm9jKFBWT0lELCAKICAgICAgICAgUG9zdE1l
c3NhZ2UodGltZXJXaW5kb3dIYW5kbGUsIHRpbWVyRmlyZWRNZXNzYWdlLCAwLCAwKTsKIH0KIAot
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2
YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKFNlY29uZHMg
aW50ZXJ2YWxJblNlY29uZHMpCiB7CiAgICAgQVNTRVJUKG1fZmlyZWRGdW5jdGlvbik7CiAKKyAg
ICBkb3VibGUgaW50ZXJ2YWwgPSBpbnRlcnZhbEluU2Vjb25kcy5taWxsaXNlY29uZHMoKTsKICAg
ICB1bnNpZ25lZCBpbnRlcnZhbEluTVM7Ci0gICAgaW50ZXJ2YWwgKj0gMTAwMDsKICAgICBpZiAo
aW50ZXJ2YWwgPiBVU0VSX1RJTUVSX01BWElNVU0pCiAgICAgICAgIGludGVydmFsSW5NUyA9IFVT
RVJfVElNRVJfTUFYSU1VTTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyUnVuTG9vcC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyUnVuTG9vcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00OSwxNiArNTAsMTYgQEAg
Y2xhc3MgV29ya2VyU2hhcmVkVGltZXIgZmluYWwgOiBwdWJsaWMgUwogcHVibGljOgogICAgIC8v
IFNoYXJlZFRpbWVyIGludGVyZmFjZS4KICAgICB2b2lkIHNldEZpcmVkRnVuY3Rpb24oc3RkOjpm
dW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pIG92ZXJyaWRlIHsgbV9zaGFyZWRUaW1lckZ1bmN0
aW9uID0gV1RGTW92ZShmdW5jdGlvbik7IH0KLSAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3Vi
bGUgaW50ZXJ2YWwpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRlcnZhbCArIGN1cnJl
bnRUaW1lKCk7IH0KLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZSB7IG1fbmV4dEZpcmVUaW1lID0g
MDsgfQorICAgIHZvaWQgc2V0RmlyZUludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpIG92ZXJyaWRl
IHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRlcnZhbCArIFdhbGxUaW1lOjpub3coKTsgfQorICAgIHZv
aWQgc3RvcCgpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBXYWxsVGltZSgpOyB9CiAKICAg
ICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gbV9zaGFyZWRUaW1lckZ1bmN0aW9uICYmIG1fbmV4
dEZpcmVUaW1lOyB9Ci0gICAgZG91YmxlIGZpcmVUaW1lKCkgeyByZXR1cm4gbV9uZXh0RmlyZVRp
bWU7IH0KKyAgICBXYWxsVGltZSBmaXJlVGltZSgpIHsgcmV0dXJuIG1fbmV4dEZpcmVUaW1lOyB9
CiAgICAgdm9pZCBmaXJlKCkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rpb24oKTsgfQogCiBwcml2YXRl
OgogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3NoYXJlZFRpbWVyRnVuY3Rpb247Ci0gICAg
ZG91YmxlIG1fbmV4dEZpcmVUaW1lIHsgMCB9OworICAgIFdhbGxUaW1lIG1fbmV4dEZpcmVUaW1l
OwogfTsKIAogY2xhc3MgTW9kZVByZWRpY2F0ZSB7CkBAIC0xNTcsMTUgKzE1OCwxNiBAQCBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1CiAgICAgICAgIGdfbWFpbl9jb250
ZXh0X2l0ZXJhdGlvbihtYWluQ29udGV4dCwgRkFMU0UpOwogI2VuZGlmCiAKLSAgICBkb3VibGUg
ZGVhZGxpbmUgPSBNZXNzYWdlUXVldWU8VGFzaz46OmluZmluaXRlVGltZSgpOworICAgIFdhbGxU
aW1lIGRlYWRsaW5lID0gV2FsbFRpbWU6OmluZmluaXR5KCk7CiAKICNpZiBVU0UoQ0YpCiAgICAg
Q0ZBYnNvbHV0ZVRpbWUgbmV4dENGUnVuTG9vcFRpbWVyRmlyZURhdGUgPSBDRlJ1bkxvb3BHZXRO
ZXh0VGltZXJGaXJlRGF0ZShDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7CiAgICAgZG91YmxlIHRpbWVVbnRpbE5leHRDRlJ1bkxvb3BUaW1lckluU2Vjb25kcyA9
IG5leHRDRlJ1bkxvb3BUaW1lckZpcmVEYXRlIC0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7
Ci0gICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSgpICsgc3RkOjptYXgoMC4wLCB0aW1lVW50aWxO
ZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMpOworICAgIGRlYWRsaW5lID0gV2FsbFRpbWU6Om5v
dygpICsgc3RkOjptYXgoCisgICAgICAgIFNlY29uZHMoMCksIFNlY29uZHModGltZVVudGlsTmV4
dENGUnVuTG9vcFRpbWVySW5TZWNvbmRzKSk7CiAjZW5kaWYKIAotICAgIGRvdWJsZSBhYnNvbHV0
ZVRpbWUgPSAwLjA7CisgICAgV2FsbFRpbWUgYWJzb2x1dGVUaW1lOwogICAgIGlmICh3YWl0TW9k
ZSA9PSBXYWl0Rm9yTWVzc2FnZSkgewogICAgICAgICBpZiAocHJlZGljYXRlLmlzRGVmYXVsdE1v
ZGUoKSAmJiBtX3NoYXJlZFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgYWJzb2x1dGVU
aW1lID0gc3RkOjptaW4oZGVhZGxpbmUsIG1fc2hhcmVkVGltZXItPmZpcmVUaW1lKCkpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTYtMTEtMDQgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEY6OlBhcmtpbmdMb3Qgc2hvdWxkIHN0
b3AgdXNpbmcgc3RkOjpjaHJvbm8gYmVjYXVzZSBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gY2FzdHMg
YXJlIHByb25lIHRvIG92ZXJmbG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyMDQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJ
UEM6OkNvbm5lY3Rpb246OlN5bmNNZXNzYWdlU3RhdGU6OndhaXQpOgorICAgICAgICAoSVBDOjpD
b25uZWN0aW9uOjpzZW5kTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnRpbWVv
dXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6d2FpdEZvck1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5k
U3luY01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5
KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAoSVBDOjpD
b25uZWN0aW9uOjpzZW5kU3luYyk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OndhaXRGb3JB
bmREaXNwYXRjaEltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvTWVzc2FnZVNl
bmRlci5oOgorICAgICAgICAoSVBDOjpNZXNzYWdlU2VuZGVyOjpzZW5kU3luYyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0NoaWxkUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkNoaWxk
UHJvY2Vzc1Byb3h5OjpzZW5kU3luYyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNl
bmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5t
bToKKyAgICAgICAgKC1bV0tPbmVTaG90RGlzcGxheUxpbmtIYW5kbGVyIGRpc3BsYXlMaW5rRmly
ZWQ6XSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6
OmNvbW1pdExheWVyVHJlZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6OmRpZFJlZnJlc2hEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0ltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIgaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcldpbGxCZWdpbkFu
aW1hdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJv
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkYXRhU2VsZWN0aW9uRm9yUGFz
dGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZy
b21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGREZWxh
eVdpbmRvd09yZGVyaW5nRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmFjY2VwdHNGaXJzdE1vdXNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6
cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVD
bGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpwcmludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpyZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcpOgorCiAyMDE2LTEx
LTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFBy
aW50aW5nIHRvIFBERiBzaG91bGQgcHJvZHVjZSBpbnRlcm5hbCBsaW5rcyB3aGVuIEhUTUwgaGFz
IGludGVybmFsIGxpbmtzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgICAgICBtX3dhaXRGb3JTeW5jUmVwbHlTZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfQogCi0g
ICAgYm9vbCB3YWl0KGRvdWJsZSBhYnNvbHV0ZVRpbWUpCisgICAgYm9vbCB3YWl0KFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSBhYnNvbHV0ZVRpbWUpCiAgICAgewogICAgICAgICByZXR1cm4gbV93
YWl0Rm9yU3luY1JlcGx5U2VtYXBob3JlLndhaXQoYWJzb2x1dGVUaW1lKTsKICAgICB9CkBAIC0z
NzYsNyArMzc2LDcgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZQog
ICAgICAgICBhdXRvIHdyYXBwZWRNZXNzYWdlID0gY3JlYXRlU3luY01lc3NhZ2VFbmNvZGVyKCJJ
UEMiLCAiV3JhcHBlZEFzeW5jTWVzc2FnZUZvclRlc3RpbmciLCBlbmNvZGVyLT5kZXN0aW5hdGlv
bklEKCksIHN5bmNSZXF1ZXN0SUQpOwogICAgICAgICB3cmFwcGVkTWVzc2FnZS0+c2V0RnVsbHlT
eW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKCk7CiAgICAgICAgIHdyYXBwZWRNZXNzYWdlLT53cmFw
Rm9yVGVzdGluZyhXVEZNb3ZlKGVuY29kZXIpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGJvb2w+KHNlbmRTeW5jTWVzc2FnZShzeW5jUmVxdWVzdElELCBXVEZNb3ZlKHdyYXBwZWRNZXNz
YWdlKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHsgfSkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oc2VuZFN5bmNNZXNzYWdlKHN5bmNSZXF1ZXN0SUQsIFdU
Rk1vdmUod3JhcHBlZE1lc3NhZ2UpLCBTZWNvbmRzOjppbmZpbml0eSgpLCB7IH0pKTsKICAgICB9
CiAKICAgICBpZiAoc2VuZE9wdGlvbnMuY29udGFpbnMoU2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KQpAQCAtNDIwLDEyICs0MjAsMTIgQEAgYm9v
bCBDb25uZWN0aW9uOjpzZW5kU3luY1JlcGx5KHN0ZDo6dW5pcQogICAgIHJldHVybiBzZW5kTWVz
c2FnZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOwogfQogCi1zdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIENvbm5lY3Rpb246OnRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5n
KHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCkgY29uc3QKK1NlY29uZHMgQ29ubmVj
dGlvbjo6dGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoU2Vjb25kcyB0
aW1lb3V0KSBjb25zdAogewotICAgIHJldHVybiBtX2lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyA/
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpIDogdGltZW91dDsKKyAgICByZXR1cm4g
bV9pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcgPyBTZWNvbmRzOjppbmZpbml0eSgpIDogdGltZW91
dDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNz
YWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQor
c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKFN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5h
bWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdh
aXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTQ2OSwxMCArNDY5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENv
bm5lY3Rpb246OndhaQogICAgICAgICBtX3dhaXRpbmdGb3JNZXNzYWdlID0gJndhaXRpbmdGb3JN
ZXNzYWdlOwogICAgIH0KIAotICAgIC8vIENsYW1wIHRoZSB0aW1lb3V0IHRvIGhvd2V2ZXIgbXVj
aCB0aW1lIGlzIHJlbWFpbmluZyBvbiBvdXIgY2xvY2suCi0gICAgYXV0byBub3cgPSBDb25kaXRp
b246OkNsb2NrOjpub3coKTsKLSAgICBhdXRvIHJlbWFpbmluZ0Nsb2NrVGltZSA9IHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KENvbmRpdGlvbjo6
Q2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpIC0gbm93KTsKLSAgICBhdXRvIGFic29sdXRlVGltZW91
dCA9IG5vdyArIHN0ZDo6bWluKHJlbWFpbmluZ0Nsb2NrVGltZSwgdGltZW91dCk7CisgICAgTW9u
b3RvbmljVGltZSBhYnNvbHV0ZVRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVv
dXQ7CiAKICAgICAvLyBOb3cgd2FpdCBmb3IgaXQgdG8gYmUgc2V0LgogICAgIHdoaWxlICh0cnVl
KSB7CkBAIC00OTYsNyArNDkzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rp
b246OndhaQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rl
cj4gQ29ubmVjdGlvbjo6c2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0
ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQorc3Rk
Ojp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZSh1aW50NjRf
dCBzeW5jUmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlciwgU2Vjb25k
cyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC01NDEsMTAgKzUzOCwxMCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6c2VuCiAgICAgcmV0dXJuIHJlcGx5
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNS
ZXBseSh1aW50NjRfdCBzeW5jUmVxdWVzdElELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRp
bWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQorc3RkOjp1
bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qg
c3luY1JlcXVlc3RJRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+
IHNlbmRTeW5jT3B0aW9ucykKIHsKICAgICB0aW1lb3V0ID0gdGltZW91dFJlc3BlY3RpbmdJZ25v
cmVUaW1lb3V0c0ZvclRlc3RpbmcodGltZW91dCk7Ci0gICAgZG91YmxlIGFic29sdXRlVGltZSA9
IGN1cnJlbnRUaW1lKCkgKyAodGltZW91dC5jb3VudCgpIC8gMTAwMC4wKTsKKyAgICBXYWxsVGlt
ZSBhYnNvbHV0ZVRpbWUgPSBXYWxsVGltZTo6bm93KCkgKyB0aW1lb3V0OwogCiAgICAgd2lsbFNl
bmRTeW5jTWVzc2FnZShzZW5kU3luY09wdGlvbnMpOwogICAgIApJbmRleDogU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTE2
NiwxMyArMTY2LDEzIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
c2VuZChUJiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgT3B0aW9uU2V0PFNlbmRP
cHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IHNlbmRXaXRoUmVwbHkoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIEZ1bmN0
aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNwYXRjaGVyLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDx0
eXBlbmFtZSBDb2RpbmdUeXBlPHR5cGVuYW1lIFQ6OlJlcGx5Pjo6VHlwZT4pPiYmIHJlcGx5SGFu
ZGxlcik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2Fn
ZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
czo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRpb25zID0geyB9KTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBl
bmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRp
bWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNl
bmRTeW5jT3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCB3YWl0
Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucyA9IHsgfSk7
CiAKICAgICBib29sIHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiwgT3B0aW9u
U2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zKTsKICAgICB2b2lkIHNlbmRNZXNzYWdlV2l0aFJl
cGx5KHVpbnQ2NF90IHJlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBGdW5jdGlv
bkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248dm9pZCAoc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+KT4mJiByZXBseUhhbmRsZXIpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFbmNv
ZGVyPiBjcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRp
b25JRCwgdWludDY0X3QmIHN5bmNSZXF1ZXN0SUQpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNv
ZGVyPiBzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlxdWVf
cHRyPEVuY29kZXI+LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNl
dDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGVjb2Rlcj4gc2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6dW5p
cXVlX3B0cjxFbmNvZGVyPiwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRp
b24+IHNlbmRTeW5jT3B0aW9ucyk7CiAgICAgYm9vbCBzZW5kU3luY1JlcGx5KHN0ZDo6dW5pcXVl
X3B0cjxFbmNvZGVyPik7CiAKICAgICB2b2lkIHdha2VVcFJ1bkxvb3AoKTsKQEAgLTIwOCw5ICsy
MDgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIp
OwogICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+IHdhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2
ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JP
cHRpb24+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZvck1lc3NhZ2UoU3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
TmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8
V2FpdEZvck9wdGlvbj4pOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiB3YWl0
Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPERlY29kZXI+IHdhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1JlcXVlc3RJRCwg
U2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKIAogICAgIC8vIENh
bGxlZCBvbiB0aGUgY29ubmVjdGlvbiB3b3JrIHF1ZXVlLgogICAgIHZvaWQgcHJvY2Vzc0luY29t
aW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4pOwpAQCAtMjM4LDcgKzIzOCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB3aWxsU2VuZFN5bmNNZXNzYWdlKE9wdGlvblNldDxTZW5kU3lu
Y09wdGlvbj4pOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+KTsKIAotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dFJlc3Bl
Y3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3Rpbmcoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcykg
Y29uc3Q7CisgICAgU2Vjb25kcyB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVz
dGluZyhTZWNvbmRzKSBjb25zdDsKICAgICAKICAgICBDbGllbnQmIG1fY2xpZW50OwogICAgIGJv
b2wgbV9pc1NlcnZlcjsKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIENvbm5lY3Rpb246OnNlbmRX
aXRoUmVwbHkoVCYmIG1lc3NhCiAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJv
b2wgQ29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYg
cmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0
eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRz
IHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQogewog
ICAgIENPTVBJTEVfQVNTRVJUKFQ6OmlzU3luYywgU3luY01lc3NhZ2VFeHBlY3RlZCk7CiAKQEAg
LTM4OSw3ICszODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNl
CiAgICAgcmV0dXJuIHJlcGx5RGVjb2Rlci0+ZGVjb2RlKHJlcGx5KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVs
eSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVv
dXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHko
dWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8V2FpdEZv
ck9wdGlvbj4gd2FpdEZvck9wdGlvbnMpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+
IGRlY29kZXIgPSB3YWl0Rm9yTWVzc2FnZShUOjpyZWNlaXZlck5hbWUoKSwgVDo6bmFtZSgpLCBk
ZXN0aW5hdGlvbklELCB0aW1lb3V0LCB3YWl0Rm9yT3B0aW9ucyk7CiAgICAgaWYgKCFkZWNvZGVy
KQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5oCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNl
bmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5
cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91
dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2VuZFN5bmNP
cHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSkKKyAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNz
YWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRz
OjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9
IHsgfSkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoVDo6aXNTeW5jLCAiTWVzc2FnZSBp
cyBub3Qgc3luYyEiKTsKIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBl
bmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgo
KSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCisgICAg
Ym9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kczo6aW5maW5pdHko
KSwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pCiAgICAg
ewogICAgICAgICBBU1NFUlQobWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2
LDcgKzIzNiw3IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm8KICAg
ICAvLyBjaG9vc2UgdGhlIG1vc3QgcmVjZW50IG9uZSwgb3IgdGhlIG9uZSB0aGF0IGlzIGNsb3Nl
c3QgdG8gb3VyIGN1cnJlbnQgc2l6ZS4KIAogICAgIC8vIFRoZSB0aW1lb3V0LCBpbiBzZWNvbmRz
LCB3ZSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1l
c3NhZ2Ugd2hlbiB3ZSdyZSBhc2tlZCB0byBwYWludC4KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9j
ZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU+KG1fd2ViUGFn
ZVByb3h5LnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIFNlY29uZHM6OmZyb21NaWxsaXNlY29u
ZHMoNTAwKSk7CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJl
ZUNvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2hpbGRQcm9jZXNz
UHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0No
aWxkUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgdGVybWluYXRlKCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNl
bmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxJUEM6OlNl
bmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBi
b29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQgPSBzdGQ6OmNo
cm9ubzo6c2Vjb25kcygxKSwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5j
T3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhU
JiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
U2Vjb25kcyB0aW1lb3V0ID0gU2Vjb25kcygxKSwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRp
b24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24oKSBjb25zdAogICAgIHsKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIENoaWxkUHJvY2Vz
c1Byb3h5OjpzZW5kKFQmJiBtZXNzYWdlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFU+IAotYm9v
bCBDaGlsZFByb2Nlc3NQcm94eTo6c2VuZFN5bmMoVSYmIG1lc3NhZ2UsIHR5cGVuYW1lIFU6OlJl
cGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMgdGltZW91dCwgT3B0aW9uU2V0PElQQzo6U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0
aW9ucykKK2Jvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBtZXNzYWdlLCB0eXBl
bmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRp
bWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7
CiAgICAgQ09NUElMRV9BU1NFUlQoVTo6aXNTeW5jLCBTeW5jTWVzc2FnZUV4cGVjdGVkKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCiAgICAgLy8gVGhlIHRpbWVv
dXQgd2UgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVHZW9tZXRyeSBtZXNzYWdlLgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSB7IHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDUwMCk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGVUaW1lb3V0KCkgeyByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1
MDApOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUo
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGlt
ZW91dCgpKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRh
dGUoU2Vjb25kcyA9IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpKSB7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIG1pbmltdW1MYXlvdXRTaXplRGlkQ2hhbmdlKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZFByb2Nlc3NX
aWxsU3VzCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVu
dGx5KCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5
OjpSZXBseShoYW5kbGVkKSwgMCwgc3RkOjpjaHJvbm86OnNlY29uZHMoMSkpOworICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCks
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5OjpSZXBs
eShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpz
ZW5kUHJlcGFyZVRvU3VzcGVuZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXBwCiAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSBhbnkgb25nb2luZyB3b3JrIGluIG91ciBxdWV1ZSBpcyBmaW5pc2hlZCBiZWZvcmUgd2UgdGVy
bWluYXRlLgogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2VtYXBo
b3JlLndhaXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2VtYXBo
b3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogfQogCiBTdHJpbmcgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpwZXJzaXN0ZW50U3RvcmFnZVBhdGgoY29uc3QgU3RyaW5nJiBs
YWJlbCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2VuZFByb2Nlc3NXaWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2lsbFN1
c3BlbmRJbW1pbmVudGx5KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0ZDo6Y2hyb25vOjpzZWNvbmRz
KDEpKTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5OjpSZXBseShoYW5kbGVkKSwgMCwgU2Vjb25kcygxKSk7CiB9CiAg
ICAgCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNwZW5kKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlTWFu
YWdlci5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODQzLDcgKzg0Myw3IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm0KIAogICAgICAgICBzZW1h
cGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7Ci0gICAgc2VtYXBob3JlLndhaXQoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgc2VtYXBob3JlLndhaXQoV2FsbFRpbWU6Omlu
ZmluaXR5KCkpOwogfQogCiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5h
Z2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3OCw3
ICs2NzgsNyBAQCAtIChOU1VJbnRlZ2VyKV93a19wYWdlQ291bnRGb3JQcmludEZvcm1hCiAtIChD
R1BERkRvY3VtZW50UmVmKV93a19wcmludGVkRG9jdW1lbnQKIHsKICAgICBpZiAoX2lzUHJpbnRp
bmdUb1BERikgewotICAgICAgICBpZiAoIV9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT53
YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEcmF3
VG9QREZDYWxsYmFjaz4oX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSkpIHsKKyAgICAgICAgaWYgKCFfcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+
d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RHJh
d1RvUERGQ2FsbGJhY2s+KF9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSkpIHsK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2Vi
UGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjky
LDcgKzI5Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeW5jaHJvbml6ZUR5bmFtaWNWaWUKICAg
ICAgICAgZG91YmxlIG5ld1NjYWxlOwogICAgICAgICBGbG9hdFBvaW50IG5ld1Njcm9sbFBvc2l0
aW9uOwogICAgICAgICB1aW50NjRfdCBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEOwot
ICAgICAgICBpZiAobV9wcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6U3luY2hy
b25pemVEeW5hbWljVmlld3BvcnRVcGRhdGUoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlN5bmNocm9u
aXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlOjpSZXBseShuZXdTY2FsZSwgbmV3U2Nyb2xsUG9zaXRp
b24sIG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0aW9uSUQpLCBtX3BhZ2VJRCwgc3RkOjpjaHJv
bm86OnNlY29uZHMoMikpKSB7CisgICAgICAgIGlmIChtX3Byb2Nlc3MtPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTeW5jaHJvbml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZSgpLCBNZXNzYWdl
czo6V2ViUGFnZTo6U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGU6OlJlcGx5KG5ld1Nj
YWxlLCBuZXdTY3JvbGxQb3NpdGlvbiwgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCks
IG1fcGFnZUlELCBTZWNvbmRzKDIpKSkgewogICAgICAgICAgICAgbV9keW5hbWljVmlld3BvcnRT
aXplVXBkYXRlV2FpdGluZ0ZvclRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgbV9keW5hbWlj
Vmlld3BvcnRTaXplVXBkYXRlTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCA9IG5leHRWYWxpZExheWVy
VHJlZVRyYW5zYWN0aW9uSUQ7CiAgICAgICAgICAgICBtX3BhZ2VDbGllbnQuZHluYW1pY1ZpZXdw
b3J0VXBkYXRlQ2hhbmdlZFRhcmdldChuZXdTY2FsZSwgbmV3U2Nyb2xsUG9zaXRpb24sIG5leHRW
YWxpZExheWVyVHJlZVRyYW5zYWN0aW9uSUQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgbmV4dExheWVyVHJlZVRyYW5z
YWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdMYXllclRyZWVUcmFuc2FjdGlvbklE
ICsgMTsgfQogICAgIHVpbnQ2NF90IGxhc3RDb21taXR0ZWRMYXllclRyZWVUcmFuc2FjdGlvbklE
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklERm9yUGVuZGluZ0NBQ29tbWl0OyB9CiAK
LSAgICB2b2lkIGRpZFJlZnJlc2hEaXNwbGF5KGRvdWJsZSB0aW1lc3RhbXApOworICAgIHZvaWQg
ZGlkUmVmcmVzaERpc3BsYXkoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNpemVEaWRDaGFuZ2Uo
KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0JKHJldmlzaW9u
IDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDcgKzgxLDcg
QEAgLSAodm9pZClkZWFsbG9jCiAtICh2b2lkKWRpc3BsYXlMaW5rRmlyZWQ6KENBRGlzcGxheUxp
bmsgKilzZW5kZXIKIHsKICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLSAgICBfZHJhd2luZ0Fy
ZWFQcm94eS0+ZGlkUmVmcmVzaERpc3BsYXkoc2VuZGVyLnRpbWVzdGFtcCk7CisgICAgX2RyYXdp
bmdBcmVhUHJveHktPmRpZFJlZnJlc2hEaXNwbGF5KCk7CiB9CiAKIC0gKHZvaWQpaW52YWxpZGF0
ZQpAQCAtMjI4LDExICsyMjgsMTEgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5OjpjbwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fZGlk
VXBkYXRlTWVzc2FnZVN0YXRlLCBOZWVkc0RpZFVwZGF0ZSkgPT0gTWlzc2VkQ29tbWl0KQotICAg
ICAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Cisg
ICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAgICAgW21fZGlzcGxheUxpbmtIYW5kbGVyIHNj
aGVkdWxlXTsKICNlbHNlCiAgICAgbV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgPSBOZWVkc0RpZFVw
ZGF0ZTsKLSAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSk7CisgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKICNlbmRpZgogCiAgICAgaWYgKGF1dG8gbWls
ZXN0b25lcyA9IGxheWVyVHJlZVRyYW5zYWN0aW9uLm5ld2x5UmVhY2hlZExheW91dE1pbGVzdG9u
ZXMoKSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHk6OmluCiAgICAgfQogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHk6OmRpZFJlZnJlc2hEaXNwbGF5KGRvdWJsZSkKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eTo6ZGlkUmVmcmVzaERpc3BsYXkoKQogewogICAgIGlmICghbV93ZWJQYWdlUHJv
eHkuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MjYsMTYgKzQyNiwxNiBAQCB2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OndhCiAgICAgLy8gV2UgbXVzdCBzZW5k
IHRoZSBkaWRVcGRhdGUgbWVzc2FnZSBiZWZvcmUgYmxvY2tpbmcgb24gdGhlIG5leHQgY29tbWl0
LCBvdGhlcndpc2UKICAgICAvLyB3ZSBjYW4gYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBuZXh0IGNv
bW1pdCB3b24ndCBjb21lIHVudGlsIGFmdGVyIHRoZSB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlh
dGVseSB0aW1lcyBvdXQuCiAgICAgaWYgKG1fZGlkVXBkYXRlTWVzc2FnZVN0YXRlICE9IERvZXNO
b3ROZWVkRGlkVXBkYXRlKQotICAgICAgICBkaWRSZWZyZXNoRGlzcGxheShtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KCk7CiAKLSAgICBz
dGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91
dCA9IFtdIHsKKyAgICBzdGF0aWMgU2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCA9
IFtdIHsKICAgICAgICAgaWYgKGlkIHZhbHVlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiV2ViS2l0T3ZlcnJpZGVBY3Rpdml0eVN0YXRlVXBk
YXRlVGltZW91dCJdKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9j
YXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxkb3Vi
bGU+KFt2YWx1ZSBkb3VibGVWYWx1ZV0pKTsKKyAgICAgICAgICAgIHJldHVybiBTZWNvbmRzKFt2
YWx1ZSBkb3VibGVWYWx1ZV0pOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICByZXR1cm4g
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MDApOworICAgICAgICByZXR1cm4gU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcyg1MDApOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMoMjUwKTsKKyAgICAgICAgcmV0dXJuIFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMoMjUwKTsKICNlbmRpZgogICAgIH0oKTsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNz
KCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6Q29tbWl0TGF5ZXJUcmVlPihtX3dlYlBh
Z2VQcm94eS5wYWdlSUQoKSwgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQsIElQQzo6V2FpdEZv
ck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJv
eHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwcml2YXRlOgogICAgIC8vIERy
YXdpbmdBcmVhUHJveHkKICAgICB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzaXplRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3YWl0
Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVv
dXQgPSBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSkgb3ZlcnJpZGU7CisgICAg
dm9pZCB3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShTZWNvbmRzIHRpbWVvdXQgPSBkaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQoKSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb2xv
clNwYWNlRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtaW5pbXVtTGF5b3V0U2l6ZURp
ZENoYW5nZSgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVBy
b3h5Lm1tCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcw
LDcgKzcwLDcgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5OgogICAg
IHNlbmRVcGRhdGVHZW9tZXRyeSgpOwogfQogCi12b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhUHJveHk6OndhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMgdGltZW91dCkKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eTo6d2FpdEZvclBvc3NpYmxlR2VvbWV0cnlVcGRhdGUoU2Vjb25kcyB0aW1lb3V0KQogewog
I2lmICFIQVZFKENPUkVBTklNQVRJT05fRkVOQ0VTKQogICAgIGlmICghbV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGVHZW9tZXRyeSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhUHJveHk6CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWFQcm94eTo6d2FpdEZvckRpZFVwZGF0ZUFjdGl2aXR5U3RhdGUoKQogewotICAgIGF1dG8gYWN0
aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDI1MCk7
CisgICAgU2Vjb25kcyBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCA9IFNlY29uZHM6OmZyb21N
aWxsaXNlY29uZHMoMjUwKTsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuY29ubmVjdGlv
bigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRVcGRhdGVBY3Rpdml0eVN0YXRlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgYWN0aXZp
dHlTdGF0ZVVwZGF0ZVRpbWVvdXQsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGlu
Z0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0J
KHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTYsNyArMTk2LDcgQEAg
LSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyV2lsbEJlZwogICAgIC8vIEZJWE1FOiBD
b25uZWN0aW9uIGNhbiBiZSBudWxsIGlmIHRoZSBwcm9jZXNzIGlzIGNsb3NlZDsgd2Ugc2hvdWxk
IGNsZWFuIHVwIGJldHRlciBpbiB0aGF0IGNhc2UuCiAgICAgaWYgKF9zdGF0ZSA9PSBJbW1lZGlh
dGVBY3Rpb25TdGF0ZTo6UGVuZGluZykgewogICAgICAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9
IF9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBib29sIHJlY2Vp
dmVkUmVwbHkgPSBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdD4oX3Bh
Z2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAgICAgICAg
ICAgYm9vbCByZWNlaXZlZFJlcGx5ID0gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1t
ZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3Q+KF9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1MDAp
KTsKICAgICAgICAgICAgIGlmICghcmVjZWl2ZWRSZXBseSkKICAgICAgICAgICAgICAgICBfc3Rh
dGUgPSBJbW1lZGlhdGVBY3Rpb25TdGF0ZTo6VGltZWRPdXQ7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94
eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjksNyArMjI5
LDcgQEAgU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUAogICAgIGlmICgh
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgCi0gICAgY29uc3QgYXV0byBt
ZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNv
bmRzIG1lc3NhZ2VUaW1lb3V0KDIwKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldFN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQoKSwgTWVzc2FnZXM6Oldl
YlBhZ2U6OkdldFN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQ6OlJlcGx5KHZhbHVlKSwgbV9w
YWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0yNDAsNyAr
MjQwLDcgQEAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGFnZVBybwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAg
dWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDIw
KTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldERhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKHBhc3RlYm9hcmRUeXBlKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXREYXRhU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZDo6UmVwbHkoaGFuZGxlLCBzaXplKSwgbV9wYWdlSUQsIG1lc3Nh
Z2VUaW1lb3V0KTsKICAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQpAQCAtMjU1LDcgKzI1NSw3IEBA
IGJvb2wgV2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3QKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRvIG1lc3Nh
Z2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNlY29uZHMg
bWVzc2FnZVRpbWVvdXQoMjApOwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZTo6UmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSwgTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDo6UmVwbHkocmVzdWx0KSwg
bV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDA4
LDcgKzQwOCw3IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpzaG91bGREZWxheVdpbmRvd09yZGUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25z
dCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMyk7CisgICAgY29u
c3QgU2Vjb25kcyBtZXNzYWdlVGltZW91dCgzKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2U6OlNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChldmVudCksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQ6OlJlcGx5KHJl
c3VsdCksIG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTQxOSw3ICs0MTksNyBAQCBib29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0ZpcnN0TW91c2Uo
aW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDMpOwor
ICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMyk7CiAgICAgcHJvY2VzcygpLnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpBY2NlcHRzRmlyc3RNb3VzZShldmVudE51bWJlciwgZXZl
bnQpLCBNZXNzYWdlczo6V2ViUGFnZTo6QWNjZXB0c0ZpcnN0TW91c2U6OlJlcGx5KHJlc3VsdCks
IG1fcGFnZUlELCBtZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5CZWZv
cmVVbmxvYWRDb24KIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlz
YWJsZXI7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChtZXNzYWdlLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRD
bG9zZSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgp
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkp
CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xvc2UpLCBt
X3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9u
OjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHJldHVybiBzaG91bGRDbG9zZTsKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0CiAKICAgICBIYW5nRGV0ZWN0aW9uRGlz
YWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbUZyYW1lKGZyYW1lKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3Jt
UGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21GcmFtZShmcmFtZSksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25k
czo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNz
V2lsbFN1c3BlbmQpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENv
bmZpcm0oRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC00MTcsNyArNDE3
LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maQogICAgIEhhbmdE
ZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKICAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9t
RnJhbWUoZnJhbWUpLCBtZXNzYWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdENvbmZpcm06OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9y
bVByb2Nlc3NXaWxsU3VzcGVuZCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21GcmFtZShmcmFtZSksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwg
U2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Q
cm9jZXNzV2lsbFN1c3BlbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtNDM2LDcgKzQzNiw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZh
U2NyaXB0UHJvbXAKIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlz
YWJsZXI7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3Jp
cHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJh
bWUoZnJhbWUpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5m
b3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShmcmFtZSksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSks
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJlc3Vs
dCksIG1fcGFnZS0+cGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNP
cHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuICFyZXN1bHQuaXNOdWxsKCk7CkBAIC02NjgsNyArNjY4LDcg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lKiBmcmFtZQogICAgIH0KICNlbmRp
ZgogCi0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZy
YW1lKHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZy
YW1lOjpSZXBseSgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5k
U3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIG1fcGFn
ZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZSh3ZWJGcmFtZS0+
ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZTo6UmVwbHkoKSwg
U2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Q
cm9jZXNzV2lsbFN1c3BlbmQpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWRE
YXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIERh
dGFiYXNlRGV0YWlscyBkZXRhaWxzKQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUKICAgICBpZiAoIW5ld1F1b3RhKSB7CiAgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKAogICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFz
ZVF1b3RhKHdlYkZyYW1lLT5mcmFtZUlEKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCks
IGRhdGFiYXNlTmFtZSwgZGV0YWlscy5kaXNwbGF5TmFtZSgpLCBjdXJyZW50UXVvdGEsIGN1cnJl
bnRPcmlnaW5Vc2FnZSwgZGV0YWlscy5jdXJyZW50VXNhZ2UoKSwgZGV0YWlscy5leHBlY3RlZFVz
YWdlKCkpLAotICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRh
YmFzZVF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9y
bVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpFeGNlZWRlZERhdGFiYXNlUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQo
KSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZv
cm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwogICAgIH0KIAogICAgIGRiTWFuYWdlci5zZXRRdW90YShv
cmlnaW4sIG5ld1F1b3RhKTsKQEAgLTcxMyw3ICs3MTMsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6cmVhY2hlZEFwcGxpY2F0aW9uCiAgICAgdWludDY0X3QgbmV3UXVvdGEgPSAwOwogICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KAogICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNo
ZU9yaWdpblF1b3RhKG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGN1cnJlbnRRdW90YSwg
dG90YWxCeXRlc05lZWRlZCksCi0gICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNo
ZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5w
YWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNP
cHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICAgICAgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YTo6UmVw
bHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6
OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CiAKICAg
ICBjYWNoZVN0b3JhZ2Uuc3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBuZXdRdW90
YSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24g
MjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCw3ICs2OTAsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAKICAgICBSZWY8V2ViRnJh
bWU+IHByb3RlY3QoKm1fZnJhbWUpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBt
X2ZyYW1lLT5jb3JlRnJhbWUoKTsKLSAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1lLT5mcmFt
ZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGNvcmVGcmFtZSksIHJlc3BvbnNl
LCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkp
LmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNl
U3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJ
RCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9u
OjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpIHsKKyAgICBpZiAoIXdlYlBhZ2Ut
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNl
U3luYyhtX2ZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGNv
cmVGcmFtZSksIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3RlbmVySUQs
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lk
ZVBvbGljeUZvclJlc3BvbnNlU3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHBvbGlj
eUFjdGlvbiwgZG93bmxvYWRJRCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNP
cHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkgewogICAgICAgICBtX2Zy
YW1lLT5kaWRSZWNlaXZlUG9saWN5RGVjaXNpb24obGlzdGVuZXJJRCwgUG9saWN5SWdub3JlLCAw
LCB7IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTUzNiw3ICs1NTM1LDcgQEAgdm9p
ZCBXZWJQYWdlOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVAogICAgIFVzZXJEYXRhIHJldHVy
blVzZXJEYXRhOwogCiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOwotICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlU3lu
Y2hyb25vdXNNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YSh3ZWJQcm9jZXNzLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZTo6UmVwbHkocmV0dXJuVXNlckRhdGEpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6VXNlRnVsbHlT
eW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKSkKKyAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRh
dGEod2ViUHJvY2Vzcy50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5KHJl
dHVyblVzZXJEYXRhKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6
VXNlRnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0aW5nKSkKICAgICAgICAgcmV0dXJuRGF0YSA9
IG51bGxwdHI7CiAgICAgZWxzZQogICAgICAgICByZXR1cm5EYXRhID0gd2ViUHJvY2Vzcy50cmFu
c2Zvcm1IYW5kbGVzVG9PYmplY3RzKHJldHVyblVzZXJEYXRhLm9iamVjdCgpKTsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
ODM4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9VcHBlckNvbnZlcnRlcjo6c3RvcFByb2R1
Y2luZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb1VwcGVyQ29udmVydGVyOjpzdG9wQ29u
c3VtaW5nKToKKwogMjAxNi0xMS0wNCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dpbl0gUGFnZSB2aXNpYmlsaXR5IHRlc3RzIGFyZSB0aW1pbmcgb3V0
LgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3BwCShy
ZXZpc2lvbiAyMDgzNTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDkgQEAgZW51bSBOb3RpZnlTdHlsZSB7CiB9
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCB3YWl0KENvbmRpdGlvbiYgY29u
ZGl0aW9uLCBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIsIGNvbnN0IEZ1bmN0b3ImIHBy
ZWRpY2F0ZSwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyB0aW1lb3V0KQordm9pZCB3YWl0KENv
bmRpdGlvbiYgY29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIsIGNvbnN0
IEZ1bmN0b3ImIHByZWRpY2F0ZSwgU2Vjb25kcyB0aW1lb3V0KQogewotICAgIGlmICh0aW1lb3V0
ID09IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM6Om1heCgpKQorICAgIGlmICh0aW1lb3V0ID09
IFNlY29uZHM6OmluZmluaXR5KCkpCiAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlciwgcHJl
ZGljYXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVGhpcyB0ZXN0cyB0aW1lb3V0cyBpbiB0
aGUgc2Vuc2UgdGhhdCBpdCB2ZXJpZmllcyB0aGF0IHdlIGNhbiBjYWxsIHdhaXQoKSBhZ2FpbiBh
ZnRlciBhCkBAIC04MCw4ICs4MCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB1bnNpZ25lZCBtYXhR
dWV1ZVNpemUsCiAgICAgdW5zaWduZWQgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwKICAgICBOb3Rp
ZnlTdHlsZSBub3RpZnlTdHlsZSwKLSAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHRpbWVv
dXQgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKSwKLSAgICBzdGQ6OmNocm9ubzo6
bWljcm9zZWNvbmRzIGRlbGF5ID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6emVybygpKQor
ICAgIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksCisgICAgU2Vjb25kcyBk
ZWxheSA9IFNlY29uZHMoMCkpCiB7CiAgICAgRGVxdWU8dW5zaWduZWQ+IHF1ZXVlOwogICAgIGJv
b2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgcnVuVGVz
dCgKICAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKICAg
ICB9CiAKLSAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoZGVsYXkpOworICAgIGRlbGF5
LnNsZWVwKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Qcm9kdWNlcnM7IGktLTspIHsK
ICAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFk
KApAQCAtMTg2LDggKzE4Niw4IEBAIFRFU1QoV1RGX0NvbmRpdGlvbiwgT25lUHJvZHVjZXJPbmVD
b25zdW0KIHsKICAgICBydW5UZXN0KAogICAgICAgICAxLCAxLCAxLCAxMDAwMDAsIFRhY3RpY2Fs
bHlOb3RpZnlBbGwsCi0gICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMDApLAot
ICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAwMDApKTsKKyAgICAgICAgU2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcygxMCksCisgICAgICAgIFNlY29uZHMoMSkpOwogfQogCiBU
RVNUKFdURl9Db25kaXRpb24sIE9uZVByb2R1Y2VyT25lQ29uc3VtZXJIdW5kcmVkU2xvdHMpCkBA
IC0yNDcsNyArMjQ3LDcgQEAgVEVTVChXVEZfQ29uZGl0aW9uLCBUaW1lb3V0VGltZXNPdXQpCiAK
ICAgICBsb2NrLmxvY2soKTsKICAgICBib29sIHJlc3VsdCA9IGNvbmRpdGlvbi53YWl0Rm9yKAot
ICAgICAgICBsb2NrLCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDAwKSwgW10gKCkgLT4g
Ym9vbCB7IHJldHVybiBmYWxzZTsgfSk7CisgICAgICAgIGxvY2ssIFNlY29uZHM6OmZyb21NaWxs
aXNlY29uZHMoMTApLCBbXSAoKSAtPiBib29sIHsgcmV0dXJuIGZhbHNlOyB9KTsKICAgICBsb2Nr
LnVubG9jaygpOwogCiAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7CkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVl
LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9sb3dlclF1ZXVl
LmNsb3NlKCk7Ci0gICAgICAgIG1fcHJvZHVjZUNsb3NlU2VtYXBob3JlLndhaXQoc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisgICAgICAgIG1fcHJvZHVjZUNsb3NlU2VtYXBo
b3JlLndhaXQoV2FsbFRpbWU6OmluZmluaXR5KCkpOwogICAgICAgICBtX3Byb2R1Y2VRdWV1ZSA9
IG51bGxwdHI7CiAgICAgfQogICAgIApAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBtX3VwcGVyUXVldWUuY2xvc2UoKTsKLSAgICAgICAg
bV9jb25zdW1lQ2xvc2VTZW1hcGhvcmUud2FpdChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
Om1heCgpKTsKKyAgICAgICAgbV9jb25zdW1lQ2xvc2VTZW1hcGhvcmUud2FpdChXYWxsVGltZTo6
aW5maW5pdHkoKSk7CiAgICAgICAgIG1fY29uc3VtZVF1ZXVlID0gbnVsbHB0cjsKICAgICB9CiAg
ICAgCg==
</data>
<flag name="review"
          id="316750"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293963</attachid>
            <date>2016-11-04 17:12:35 -0700</date>
            <delta_ts>2016-11-04 17:12:35 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>158160</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3Rk
OjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAg
IFJldmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisgICAgICAgIAorICAgICAgICBQcm9iYWJseSB0aGUg
bmljZXN0IGV4YW1wbGUgb2Ygd2h5IHRoaXMgcGF0Y2ggaXMgYSBnb29kIGlkZWEgaXMgdGhlIGNo
YW5nZSBpbgorICAgICAgICBBdG9taWNzT2JqZWN0LmNwcC4KKworICAgICAgICAqIGppdC9JQ1N0
YXRzLmNwcDoKKyAgICAgICAgKEpTQzo6SUNTdGF0czo6SUNTdGF0cyk6CisgICAgICAgICogcnVu
dGltZS9BdG9taWNzT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNXYWl0KToK
KwogMjAxNi0xMS0wMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCBjaGFuZ2Vsb2cgZml4IGR1ZSB0byBmYWlsZWQgZ2l0IHJlYmFz
ZS4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAJKHJldmlzaW9uIDIw
ODM1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDggQEAgSUNTdGF0czo6SUNTdGF0cygpCiAgICAgICAgIFt0aGlz
XSAoKSB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAgICAg
ICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRGb3JTZWNvbmRz
KG1fbG9jaywgMSwgW3RoaXNdICgpIC0+IGJvb2wgeyByZXR1cm4gbV9zaG91bGRTdG9wOyB9KTsK
KyAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0Rm9yKAorICAgICAgICAgICAgICAgICAg
ICBtX2xvY2ssIFNlY29uZHMoMSksIFt0aGlzXSAoKSAtPiBib29sIHsgcmV0dXJuIG1fc2hvdWxk
U3RvcDsgfSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fc2hvdWxkU3RvcCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4MzU4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGF0b21pY3NGdW5jCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogICAgIAotICAgIGRvdWJsZSB0aW1lb3V0SW5OYW5vc2Vjb25kcyA9IHRpbWVv
dXRJbk1pbGxpc2Vjb25kcyAqIDEwMDAgKiAxMDAwOworICAgIFNlY29uZHMgdGltZW91dCA9IFNl
Y29uZHM6OmZyb21NaWxsaXNlY29uZHModGltZW91dEluTWlsbGlzZWNvbmRzKTsKIAogICAgIC8v
IFRoaXMgY292ZXJzIHRoZSBwcm9wb3NlZCBydWxlOgogICAgIC8vCkBAIC0zMTQsMzEgKzMxNCwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jCiAgICAgLy8KICAg
ICAvLyBleGVjLT5hcmd1bWVudCgzKSByZXR1cm5zIHVuZGVmaW5lZCBpZiBpdCdzIG5vdCBwcm92
aWRlZCBhbmQgVG9OdW1iZXIodW5kZWZpbmVkKSByZXR1cm5zIE5hTiwKICAgICAvLyBzbyBOYU4g
aXMgdGhlIG9ubHkgc3BlY2lhbCBjYXNlLgotICAgIGlmICh0aW1lb3V0SW5OYW5vc2Vjb25kcyA9
PSB0aW1lb3V0SW5OYW5vc2Vjb25kcykKLSAgICAgICAgdGltZW91dEluTmFub3NlY29uZHMgPSBz
dGQ6Om1heCgwLiwgdGltZW91dEluTmFub3NlY29uZHMpOworICAgIGlmICh0aW1lb3V0ID09IHRp
bWVvdXQpCisgICAgICAgIHRpbWVvdXQgPSBzdGQ6Om1heChTZWNvbmRzKDApLCB0aW1lb3V0KTsK
ICAgICBlbHNlCi0gICAgICAgIHRpbWVvdXRJbk5hbm9zZWNvbmRzID0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIAotICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0
IGlzIGEgcGlsZSBvZiBub25zZW5zZSwgYnV0IGl0J3MgYWxsIG5lZWRlZCBiZWNhdXNlIG9mIGNv
cm5lciBjYXNlcwotICAgIC8vIGluc2lkZSBzdGQ6OmNocm9uby4KLSAgICAvLyBGSVhNRTogU3Rv
cCB1c2luZyBzdGQ6OmNocm9uby4KLSAgICAKLSAgICBQYXJraW5nTG90OjpDbG9jazo6dGltZV9w
b2ludCB0aW1lb3V0OwotICAgIGlmICh0aW1lb3V0SW5OYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICB0
aW1lb3V0ID0gUGFya2luZ0xvdDo6Q2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpOwotICAgIGVsc2Ug
ewotICAgICAgICBzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgcmVsYXRpdmVUaW1lb3V0ID0KLSAg
ICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90Pih0
aW1lb3V0SW5OYW5vc2Vjb25kcykpOwotICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgc3Rk
OjpjaHJvbm86Om5hbm9zZWNvbmRzOjp6ZXJvKCkpCi0gICAgICAgICAgICB0aW1lb3V0ID0gUGFy
a2luZ0xvdDo6Q2xvY2s6Om5vdygpOwotICAgICAgICBlbHNlIGlmIChyZWxhdGl2ZVRpbWVvdXQg
PiBQYXJraW5nTG90OjpDbG9jazo6ZHVyYXRpb246Om1heCgpKQotICAgICAgICAgICAgdGltZW91
dCA9IFBhcmtpbmdMb3Q6OkNsb2NrOjp0aW1lX3BvaW50OjptYXgoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBQYXJraW5nTG90OjpDbG9jazo6ZHVyYXRpb24gbXlSZWxhdGl2ZVRpbWVv
dXQgPQotICAgICAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PFBhcmtpbmdM
b3Q6OkNsb2NrOjpkdXJhdGlvbj4ocmVsYXRpdmVUaW1lb3V0KTsKLSAgICAgICAgICAgIHRpbWVv
dXQgPSBQYXJraW5nTG90OjpDbG9jazo6bm93KCkgKyBteVJlbGF0aXZlVGltZW91dDsKLSAgICAg
ICAgfQotICAgIH0KKyAgICAgICAgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCk7CiAgICAg
CiAgICAgYm9vbCBkaWRQYXNzVmFsaWRhdGlvbiA9IGZhbHNlOwogICAgIFBhcmtpbmdMb3Q6OlBh
cmtSZXN1bHQgcmVzdWx0OwpAQCAtMzUxLDcgKzMzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmMKICAgICAgICAgICAgICAgICByZXR1cm4gZGlkUGFzc1ZhbGlk
YXRpb247CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgW10gKCkgeyB9LAotICAgICAgICAg
ICAgdGltZW91dCk7CisgICAgICAgICAgICBNb25vdG9uaWNUaW1lOjpub3coKSArIHRpbWVvdXQp
OwogICAgIH0KICAgICBjb25zdCBjaGFyKiByZXN1bHRTdHJpbmc7CiAgICAgaWYgKCFkaWRQYXNz
VmFsaWRhdGlvbikKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOSBAQAorMjAxNi0xMS0wNCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFdURjo6UGFya2luZ0xvdCBzaG91
bGQgc3RvcCB1c2luZyBzdGQ6OmNocm9ubyBiZWNhdXNlIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBj
YXN0cyBhcmUgcHJvbmUgdG8gb3ZlcmZsb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIwNDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmR5IEVz
dGVzLgorICAgICAgICAKKyAgICAgICAgV2UgdXNlZCB0byB1c2UgJ2RvdWJsZScgZm9yIGFsbCB0
aW1lIG1lYXN1cmVtZW50cy4gU29tZXRpbWVzIGl0IHdhcyBtaWxsaXNlY29uZHMsCisgICAgICAg
IHNvbWV0aW1lcyBpdCB3YXMgc2Vjb25kcy4gU29tZXRpbWVzIHdlIG1lYXN1cmVkIGEgc3BhbiBv
ZiB0aW1lLCBzb21ldGltZXMgd2Ugc3Bva2Ugb2YgdGltZQorICAgICAgICBzaW5jZSBzb21lIGVw
b2NoLiBXaGVuIHdlIHNwb2tlIG9mIHRpbWUgc2luY2UgZXBvY2gsIHdlIGVpdGhlciB1c2VkIGEg
bW9ub3RvbmljIGNsb2NrIG9yCisgICAgICAgIGEgd2FsbCBjbG9jay4gVGhlIHR5cGUgLSBhbHdh
eXMgJ2RvdWJsZScgLSBuZXZlciB0b2xkIHVzIHdoYXQga2luZCBvZiB0aW1lIHdlIGhhZCwgZXZl
bgorICAgICAgICB0aG91Z2ggdGhlcmUgd2VyZSByb3VnaGx5IHNpeCBvZiB0aGVtIChzZWMgaW50
ZXJ2YWwsIG1zIGludGVydmFsLCBzZWMgc2luY2UgZXBvY2ggb24gd2FsbCwKKyAgICAgICAgbXMg
c2luY2UgZXBvY2ggb24gd2FsbCwgc2VjIHNpbmNlIGVwb2NoIG1vbm90b25pYywgbXMgc2luY2Ug
ZXBvY2ggbW9ub3RvbmljKS4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQsIHdlIHRo
b3VnaHQgdGhhdCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZXBsYWNlIHRoZXNlIGRvdWJs
ZXMgd2l0aAorICAgICAgICBzdGQ6OmNocm9uby4gQnV0IHNpbmNlIHJlcGxhY2luZyBzb21lIHRo
aW5ncyB3aXRoIHN0ZDo6Y2hyb25vLCB3ZSBmb3VuZCBpdCB0byBiZSB0ZXJyaWJseQorICAgICAg
ICBpbmNvbnZlbmllbnQ6CisgICAgICAgIAorICAgICAgICAtIE91dHJhZ2VvdXMgQVBJLiBJIG5l
dmVyIHdhbnQgdG8gc2F5IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoYmxhaCkuIEkgbmV2ZXIg
d2FudCB0byBzYXkKKyAgICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lcG9p
bnQuIFRoZSBzeW50YXggZm9yIGR1cmF0aW9uX2Nhc3QgaXMgdWdseSwgYW5kIGlkZWFsbHkKKyAg
ICAgICAgICBkdXJhdGlvbl9jYXN0IHdvdWxkIG5vdCBldmVuIGJlIGEgdGhpbmcuCisgICAgICAg
IAorICAgICAgICAtIE5vIG92ZXJmbG93IHByb3RlY3Rpb24uIHN0ZDo6Y2hyb25vIHVzZXMgaW50
ZWdlcnMgYnkgZGVmYXVsdCBhbmQgdXNpbmcgYW55dGhpbmcgZWxzZSBpcworICAgICAgICAgIGNs
dW1zeS4gQnV0IHRoZSBpbnRlZ2VyIG1hdGggaXMgZG9uZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhl
IHJvdWdoIGVkZ2VzIG9mIGludGVnZXIgbWF0aCwKKyAgICAgICAgICBzbyBhbnkgY2FzdCBiZXR3
ZWVuIHN0ZDo6Y2hyb25vIHR5cGVzIHJpc2tzIG92ZXJmbG93LiBBbnkgY29tcGFyaXNvbiByaXNr
cyBvdmVyZmxvdworICAgICAgICAgIGJlY2F1c2UgaXQgbWF5IGRvIGNvbnZlcnNpb25zIHNpbGVu
dGx5LiBXZSBoYXZlIGV2ZW4gZm91bmQgYnVncyB3aGVyZSBzb21lIEMrKworICAgICAgICAgIGlt
cGxlbWVudGF0aW9ucyBoYWQgbW9yZSBvdmVyZmxvd3MgdGhhbiBvdGhlcnMsIHdoaWNoIGVuZHMg
dXAgYmVpbmcgYSBzcGVjaWFsIGtpbmQgb2YKKyAgICAgICAgICBoZWxsLiBJbiBtYW55IGNhc2Vz
LCB0aGUgb3ZlcmZsb3cgYWxzbyBoYXMgbmFzYWwgZGVtb25zLgorICAgICAgICAKKyAgICAgICAg
SXQncyBhbiBlcnJvciB0byByZXByZXNlbnQgdGltZSB1c2luZyBpbnRlZ2Vycy4gSXQgd291bGQg
aGF2ZSBiZWVuIGV4Y3VzYWJsZSBiYWNrIHdoZW4KKyAgICAgICAgZmxvYXRpbmcgcG9pbnQgbWF0
aCB3YXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1
dCB0aGF0IHdvdWxkCisgICAgICAgIGhhdmUgYmVlbiBhIGxvbmcgdGltZSBhZ28uIFRpbWUgaXMg
YSBjb250aW51b3VzLCBpbmZpbml0ZSBjb25jZXB0IGFuZCBpdCdzIGEgcGVyZmVjdCBmaXQKKyAg
ICAgICAgZm9yIGZsb2F0aW5nIHBvaW50OgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBw
b2ludCBwcmVzZXJ2ZXMgcHJlY2lzaW9uIHVuZGVyIG11bHRpcGxpY2F0aW9uIGluIGFsbCBidXQg
ZXh0cmVtZSBjYXNlcywgc28KKyAgICAgICAgICB1c2luZyBmbG9hdGluZyBwb2ludCBmb3IgdGlt
ZSBtZWFucyB0aGF0IHVuaXQgY29udmVyc2lvbnMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5CisgICAg
ICAgICAgbG9zc2xlc3MuIFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIHZl
cnkgaGFyZCBhYm91dCB3aGF0IHVuaXRzIHRvIHVzZS4gSW4KKyAgICAgICAgICB0aGlzIHBhdGNo
LCB3ZSB1c2Ugc2Vjb25kcyBhbG1vc3QgZXZlcnl3aGVyZS4gV2Ugb25seSBjb252ZXJ0IGF0IGJv
dW5kYXJpZXMsIGxpa2UgYW4gQVBJCisgICAgICAgICAgYm91bmRhcnkgdGhhdCB3YW50cyBzb21l
dGhpbmcgb3RoZXIgdGhhbiBzZWNvbmRzLgorICAgICAgICAKKyAgICAgICAgLSBGbG9hdGluZyBw
b2ludCBtYWtlcyBpdCBlYXN5IHRvIHJlYXNvbiBhYm91dCBpbmZpbml0eSwgd2hpY2ggaXMgc29t
ZXRoaW5nIHRoYXQgdGltZSBjb2RlCisgICAgICAgICAgd2FudHMgdG8gZG8gYSBsb3QuIEV4YW1w
bGU6IHdoZW4gd291bGQgeW91IGxpa2UgdG8gdGltZW91dD8gSW5maW5pdHkgcGxlYXNlISBUaGlz
IGlzIHRoZQorICAgICAgICAgIG1vc3QgZWxlZ2FudCB3YXkgb2YgaGF2aW5nIGFuIEFQSSBzdXBw
b3J0IGJvdGggYSB0aW1lb3V0IHZhcmlhbnQgYW5kIGEgbm8tdGltZW91dAorICAgICAgICAgIHZh
cmlhbnQuCisKKyAgICAgICAgLSBGbG9hdGluZyBwb2ludCBkb2VzIHdlbGwtdW5kZXJzdG9vZCB0
aGluZ3Mgd2hlbiBtYXRoIGdvZXMgd3JvbmcsIGFuZCB0aGVzZSB0aGluZ3MgYXJlCisgICAgICAg
ICAgcHJldHR5IHdlbGwgb3B0aW1pemVkIHRvIG1hdGNoIHdoYXQgYSBtYXRoZW1hdGljaWFuIHdv
dWxkIGRvIHdoZW4gY29tcHV0aW5nIHdpdGggcmVhbAorICAgICAgICAgIG51bWJlcnMgcmVwcmVz
ZW50ZWQgdXNpbmcgc2NpZW50aWZpYyBub3RhdGlvbiB3aXRoIGEgZmluaXRlIG51bWJlciBvZiBz
aWduaWZpY2FudAorICAgICAgICAgIGRpZ2l0cy4gVGhpcyBtZWFucyB0aGF0IHRpbWUgbWF0aCB1
bmRlciBmbG9hdGluZyBwb2ludCBsb29rcyBsaWtlIG5vcm1hbCBtYXRoLiBPbiB0aGUKKyAgICAg
ICAgICBvdGhlciBoYW5kLCBzdGQ6OmNocm9ubyB0aW1lIG1hdGggbG9va3MgbGlrZSBnYXJiYWdl
IGJlY2F1c2UgeW91IGhhdmUgdG8gYWx3YXlzIGNoZWNrCisgICAgICAgICAgZm9yIG11bHRpcGxl
IHBvc3NpYmxlIFVCIGNvcm5lcnMgd2hlbmV2ZXIgeW91IHRvdWNoIGxhcmdlIGludGVnZXJzLiBJ
bnRlZ2VycyB0aGF0CisgICAgICAgICAgcmVwcmVzZW50IHRpbWUgYXJlIHZlcnkgbGlrZWx5IHRv
IGJlIGxhcmdlIGFuZCB5b3UgZG9uJ3QgaGF2ZSB0byBkbyBtdWNoIHRvIG92ZXJmbG93CisgICAg
ICAgICAgdGhlbS4gQXQgdGhpcyB0aW1lLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ1Z3Mgd2Ug
aGF2ZSBhbHJlYWR5IHNlZW4gZHVlIHRvIGNocm9ubworICAgICAgICAgIG92ZXJmbG93cywgSSBh
bSBub3QgY2VydGFpbiB0aGF0IHdlIGV2ZW4gdW5kZXJzdGFuZCB3aGF0IGFyZSBhbGwgb2YgdGhl
IGNvcm5lciBjYXNlcworICAgICAgICAgIHRoYXQgd2Ugc2hvdWxkIGV2ZW4gY2hlY2sgZm9yLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiB0aW1l
a2VlcGluZyBjbGFzc2VzIHRoYXQgYXJlIGFsbCBiYXNlZCBvbiBkb3VibGUsIGFuZAorICAgICAg
ICBhbGwgaW50ZXJuYWxseSB1c2Ugc2Vjb25kcy4gVGhlc2UgY2xhc3NlcyBzdXBwb3J0IGFsZ2Vi
cmFpYyB0eXBpbmcuIFRoZSBjbGFzc2VzIGFyZToKKyAgICAgICAgCisgICAgICAgIC0gU2Vjb25k
czogdGhpcyBpcyBmb3IgbWVhc3VyaW5nIGEgZHVyYXRpb24uCisgICAgICAgIC0gV2FsbFRpbWU6
IHRpbWUgc2luY2UgZXBvY2ggYWNjb3JkaW5nIHRvIGEgd2FsbCBjbG9jayAoYWthIHJlYWwgdGlt
ZSBjbG9jaykuCisgICAgICAgIC0gTW9ub3RvbmljVGltZTogdGltZSBzaW5jZSBlcG9jaCBhY2Nv
cmRpbmcgdG8gYSBtb25vdG9uaWMgY2xvY2suCisgICAgICAgIC0gQ2xvY2tUeXBlOiBlbnVtIHRo
YXQgc2F5cyBlaXRoZXIgV2FsbCBvciBNb25vdG9uaWMuCisgICAgICAgIC0gVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlOiBhIHR1cGxlIG9mIGRvdWJsZSBhbmQgQ2xvY2tUeXBlLCB3aGljaCByZXBy
ZXNlbnRzIGVpdGhlciBhCisgICAgICAgICAgd2FsbCB0aW1lIG9yIGEgbW9ub3RvbmljIHRpbWUu
CisgICAgICAgIAorICAgICAgICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBiZWhhdmUgbGlrZSBDKysg
dmFsdWVzIGFuZCBhcmUgY2hlYXAgdG8gY29weSBhcm91bmQgc2luY2UgdGhleSBhcmUKKyAgICAg
ICAgdmVyeSBuZWFybHkgUE9ELiBUaGlzIHN1cHBvcnRzIGNvbXByZWhlbnNpdmUgY29udmVyc2lv
bnMgYmV0d2VlbiB0aGUgdmFyaW91cyB0aW1lIHR5cGVzLgorICAgICAgICBNb3N0IG9mIHRoaXMg
aXMgYnkgd2F5IG9mIGFsZ2VicmEuIEhlcmUgYXJlIGp1c3Qgc29tZSBvZiB0aGUgcnVsZXMgd2Ug
cmVjb2duaXplOgorICAgICAgICAKKyAgICAgICAgV2FsbFRpbWUgPSBXYWxsVGltZSArIFNlY29u
ZHMKKyAgICAgICAgU2Vjb25kcyA9IFdhbGxUaW1lIC0gV2FsbFRpbWUKKyAgICAgICAgTW9ub3Rv
bmljVGltZSA9IE1vbm90b25pY1RpbWUgKyBTZWNvbmRzCisgICAgICAgIGV0Yy4uLgorICAgICAg
ICAKKyAgICAgICAgV2Ugc3VwcG9ydCBuZWdhdGl2ZSwgaW5maW5pdGUsIGFuZCBOYU4gdGltZXMg
YmVjYXVzZSBtYXRoLgorICAgICAgICAKKyAgICAgICAgV2Ugc3VwcG9ydCBjb252ZXJzaW9ucyBi
ZXR3ZWVuIE1vbm90b25pY1RpbWUgYW5kIFdhbGxUaW1lLCBsaWtlOgorICAgICAgICAKKyAgICAg
ICAgV2FsbFRpbWUgd3QgPSBtdC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkKKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgY2FsbGVkIHRoaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIHRoZSBvbmx5IHdh
eSB0byBkbyBpdCBpcyB0byBnZXQgdGhlIGN1cnJlbnQgdGltZQorICAgICAgICBvbiBib3RoIGNs
b2NrcyBhbmQgY29udmVydCByZWxhdGl2ZSB0byB0aGF0LgorICAgICAgICAKKyAgICAgICAgTWFu
eSBvZiBvdXIgQVBJcyB3b3VsZCBiZSBoYXBweSB1c2luZyB3aGF0ZXZlciBub3Rpb24gb2YgdGlt
ZSB0aGUgdXNlciB3YW50ZWQgdG8gdXNlLiBGb3IKKyAgICAgICAgdGhvc2UgQVBJcywgd2hpY2gg
aW5jbHVkZXMgQ29uZGl0aW9uIGFuZCBQYXJraW5nTG90LCB3ZSBoYXZlIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZS4gWW91CisgICAgICAgIGNhbiBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgV2FsbFRp
bWUgb3IgTW9ub3RvbmljVGltZSB0byBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuIFRoaXMKKyAg
ICAgICAgbWVhbnMgdGhhdCBpZiB5b3UgdXNlIGEgV2FsbFRpbWUgd2l0aCBDb25kaXRpb246Ondh
aXRVbnRpbCwgdGhlbiBDb25kaXRpb24ncyBpbnRlcm5hbAorICAgICAgICBsb2dpYyBmb3Igd2hl
biBpdCBzaG91bGQgd2FrZSB1cCBtYWtlcyBpdHMgZGVjaXNpb24gYmFzZWQgb24gdGhlIGN1cnJl
bnQgV2FsbFRpbWUgLSBidXQgaWYKKyAgICAgICAgeW91IHVzZSBNb25vdG9uaWNUaW1lIHRoZW4g
d2FpdFVudGlsIHdpbGwgbWFrZSBpdHMgZGVjaXNpb24gYmFzZWQgb24gY3VycmVudAorICAgICAg
ICBNb25vdG9uaWNUaW1lLiBUaGlzIGlzIGEgZ3JlYXRlciBsZXZlbCBvZiBmbGV4aWJpbGl0eSB0
aGFuIGNocm9ubyBhbGxvd2VkLCBzaW5jZSBjaHJvbm8KKyAgICAgICAgZGlkIG5vdCBoYXZlIHRo
ZSBjb25jZXB0IG9mIGEgZHluYW1pYyBjbG9jayB0eXBlLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIGNvbnZlcnNpb25zIGJldHdlZW4gc3RkOjpjaHJvbm8g
YW5kIHRoZXNlIG5ldyB0aW1lIGNsYXNzZXMsCisgICAgICAgIGJlY2F1c2UgcGFzdCBleHBlcmll
bmNlIHNob3dzIHRoYXQgd2UncmUgcXVpdGUgYmFkIGF0IGdldHRpbmcgY29udmVyc2lvbnMgYmV0
d2VlbgorICAgICAgICBzdGQ6OmNocm9ubyBhbmQgYW55dGhpbmcgZWxzZSByaWdodC4gQWxzbywg
SSBkaWRuJ3QgbmVlZCBzdWNoIGNvbnZlcnNpb24gY29kZSBiZWNhdXNlIHRoaXMKKyAgICAgICAg
cGF0Y2ggb25seSBjb252ZXJ0cyBjb2RlIHRoYXQgdHJhbnNpdGl2ZWx5IHRvdWNoZXMgUGFya2lu
Z0xvdCBhbmQgQ29uZGl0aW9uLiBJdCB3YXMgZWFzeQorICAgICAgICB0byBnZXQgYWxsIG9mIHRo
YXQgY29kZSBvbnRvIHRoZSBuZXcgdGltZSBjbGFzc2VzLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5jcHA6
CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvQ2xvY2tUeXBlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIHd0Zi9DbG9ja1R5cGUuaDogQWRk
ZWQuCisgICAgICAgICogd3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRpb25C
YXNlOjp3YWl0VW50aWwpOgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yKToK
KyAgICAgICAgKFdURjo6Q29uZGl0aW9uQmFzZTo6d2FpdCk6CisgICAgICAgIChXVEY6OkNvbmRp
dGlvbkJhc2U6OndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpDb25kaXRpb25CYXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpDb25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JTZWNvbmRzSW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OndhaXRGb3JJbXBsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Q29uZGl0aW9uQmFzZTo6YWJzb2x1dGVGcm9tUmVsYXRpdmUpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9Dcm9zc1RocmVhZFF1ZXVlLmg6CisgICAgICAgIChXVEY6
OkNyb3NzVGhyZWFkUXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgICog
d3RmL0N1cnJlbnRUaW1lLmNwcDoKKyAgICAgICAgKFdURjo6c2xlZXApOgorICAgICAgICAqIHd0
Zi9NZXNzYWdlUXVldWUuaDoKKyAgICAgICAgKFdURjo6TWVzc2FnZVF1ZXVlOjppbmZpbml0ZVRp
bWUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9Nb25vdG9uaWNUaW1lLmNwcDogQWRkZWQuCisg
ICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om5vdyk6CisgICAgICAgIChXVEY6Ok1vbm90b25p
Y1RpbWU6OmFwcHJveGltYXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1l
OjpkdW1wKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6c2xlZXApOgorICAgICAgICAq
IHd0Zi9Nb25vdG9uaWNUaW1lLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1l
OjpNb25vdG9uaWNUaW1lKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6ZnJvbVJhd0Rv
dWJsZSk6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6OmluZmluaXR5KToKKyAgICAgICAg
KFdURjo6TW9ub3RvbmljVGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpN
b25vdG9uaWNUaW1lOjphcHByb3hpbWF0ZU1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpN
b25vdG9uaWNUaW1lOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGlt
ZTo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3ItKToK
KyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IrPSk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1l
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6TW9ub3RvbmljVGltZTo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6
Ok1vbm90b25pY1RpbWU6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6Ok1vbm90b25pY1RpbWU6
Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpNb25vdG9uaWNUaW1lOjpvcGVyYXRvcj49KToK
KyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5jcHA6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6
OnBhcmtDb25kaXRpb25hbGx5SW1wbCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFy
a09uZSk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya09uZUltcGwpOgorICAgICAg
ICAoV1RGOjpQYXJraW5nTG90Ojp1bnBhcmtDb3VudCk6CisgICAgICAgICogd3RmL1BhcmtpbmdM
b3QuaDoKKyAgICAgICAgKFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkpOgorICAg
ICAgICAoV1RGOjpQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyayk6CisgICAgICAgICogd3RmL1Nl
Y29uZHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3IrKToKKyAg
ICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6
ZHVtcCk6CisgICAgICAgIChXVEY6OlNlY29uZHM6OnNsZWVwKToKKyAgICAgICAgKiB3dGYvU2Vj
b25kcy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U2Vjb25kczo6U2Vjb25kcyk6CisgICAgICAg
IChXVEY6OlNlY29uZHM6OnZhbHVlKToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6c2Vjb25kcyk6
CisgICAgICAgIChXVEY6OlNlY29uZHM6Om1pbGxpc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNl
Y29uZHM6Om1pY3Jvc2Vjb25kcyk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om5hbm9zZWNvbmRz
KToKKyAgICAgICAgKFdURjo6U2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyk6CisgICAgICAgIChX
VEY6OlNlY29uZHM6OmZyb21NaWNyb3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpm
cm9tTmFub3NlY29uZHMpOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjppbmZpbml0eSk6CisgICAg
ICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoV1RGOjpTZWNvbmRz
OjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci0pOgorICAgICAg
ICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVy
YXRvci8pOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdU
Rjo6U2Vjb25kczo6b3BlcmF0b3ItPSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9y
Kj0pOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvci89KToKKyAgICAgICAgKFdURjo6
U2Vjb25kczo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OlNlY29uZHM6Om9wZXJhdG9yIT0p
OgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpTZWNv
bmRzOjpvcGVyYXRvcj4pOgorICAgICAgICAoV1RGOjpTZWNvbmRzOjpvcGVyYXRvcjw9KToKKyAg
ICAgICAgKFdURjo6U2Vjb25kczo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGU6Om5vdyk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6bm93V2l0aFNhbWVDbG9jayk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZTo6d2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6
Om1vbm90b25pY1RpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6
OmFwcHJveGltYXRlV2FsbFRpbWUpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGU6Om9wZXJhdG9yPik6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZTo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTo6b3BlcmF0b3I+PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6
ZHVtcCk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6c2xlZXApOgor
ICAgICAgICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDogQWRkZWQuCisgICAgICAg
IChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
KToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3RG91Ymxl
KToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpzZWNvbmRzU2luY2VF
cG9jaCk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6Y2xvY2tUeXBl
KToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjp3aXRoU2FtZUNsb2Nr
QW5kUmF3RG91YmxlKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpv
cGVyYXRvcispOgorICAgICAgICAoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJh
dG9yLSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3Ir
PSk6CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3ItPSk6
CisgICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogd3RmL1dhbGxUaW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OldhbGxUaW1lOjpu
b3cpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKToK
KyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmR1bXApOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6
c2xlZXApOgorICAgICAgICAqIHd0Zi9XYWxsVGltZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2FsbFRpbWU6OldhbGxUaW1lKToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6OmZyb21SYXdEb3Vi
bGUpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6aW5maW5pdHkpOgorICAgICAgICAoV1RGOjpX
YWxsVGltZTo6c2Vjb25kc1NpbmNlRXBvY2gpOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6YXBw
cm94aW1hdGVXYWxsVGltZSk6CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvciBib29s
KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yKyk6CisgICAgICAgIChXVEY6Oldh
bGxUaW1lOjpvcGVyYXRvci0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IrPSk6
CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6V2Fs
bFRpbWU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXVEY6OldhbGxUaW1lOjpvcGVyYXRvcjwpOgorICAgICAgICAoV1RGOjpXYWxs
VGltZTo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6V2FsbFRpbWU6Om9wZXJhdG9yPD0pOgor
ICAgICAgICAoV1RGOjpXYWxsVGltZTo6b3BlcmF0b3I+PSk6CisgICAgICAgICogd3RmL3RocmVh
ZHMvQmluYXJ5U2VtYXBob3JlLmNwcDoKKyAgICAgICAgKFdURjo6QmluYXJ5U2VtYXBob3JlOjp3
YWl0KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaDoKKwogMjAxNi0x
MS0wMyAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAg
Rml4ZXMgdG8gYnVpbGQgSlNDT25seSBvbiBtYWNPUwpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwx
NiBAQAogCQkwRjQzRDhGMjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVB
RERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1
OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5o
ICovOyB9OwogCQkwRjQ1NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0
MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLzsgfTsKKwkJMEY2NkIyOEExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLzsg
fTsKKwkJMEY2NkIyOEIxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkIyODExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5oICovOyB9OworCQkwRjY2QjI4QzFEQzk3QkFCMDA0QTFEM0YgLyog
TW9ub3RvbmljVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2QjI4MjFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5jcHAgKi87
IH07CisJCTBGNjZCMjhEMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4MzFEQzk3QkFC
MDA0QTFEM0YgLyogTW9ub3RvbmljVGltZS5oICovOyB9OworCQkwRjY2QjI4RTFEQzk3QkFCMDA0
QTFEM0YgLyogU2Vjb25kcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2QjI4NDFEQzk3QkFCMDA0QTFEM0YgLyogU2Vjb25kcy5jcHAgKi87IH07
CisJCTBGNjZCMjhGMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4NTFEQzk3QkFCMDA0QTFEM0Yg
LyogU2Vjb25kcy5oICovOyB9OworCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjZCMjg2MURDOTdCQUIwMDRBMUQzRiAvKiBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwICovOyB9OworCQkwRjY2QjI5MTFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmggKi87IH07CisJCTBGNjZCMjkyMURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2QjI4
ODFEQzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuY3BwICovOyB9OworCQkwRjY2QjI5MzFEQzk3
QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjZCMjg5MURDOTdCQUIwMDRBMUQzRiAvKiBXYWxsVGltZS5oICov
OyB9OwogCQkwRjcyNUNBQzFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFE
OTQzQSAvKiBSYW5nZVNldC5oICovOyB9OwogCQkwRjdDNUZCNjFEODg1Q0YyMDA0NEY1RTIgLyog
RmFzdEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjdDNUZCNTFEODg1Q0YyMDA0NEY1RTIgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi87
IH07CiAJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAw
MDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICszODIsMTYgQEAKIAkJ
MEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9j
a1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODExREM5N0JBQjAwNEEx
RDNGIC8qIENsb2NrVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9j
a1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODIxREM5N0JBQjAw
NEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTW9ub3RvbmljVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjZCMjgzMURDOTdCQUIwMDRBMUQzRiAvKiBNb25vdG9uaWNUaW1lLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vbm90b25pY1RpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vjb25kcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY29uZHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjY2QjI4NzFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4ODFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FsbFRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY2QjI4OTFEQzk3
QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FsbFRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUw
NDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJhbmdlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0M1RkI1MUQ4
ODVDRjIwMDQ0RjVFMiAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg2Myw2ICs4ODMsOCBAQAogCQkJCUVCOTVFMUVGMTYxQTcy
NDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIz
RkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIz
RkYgLyogQ2hlY2tlZEJvb2xlYW4uaCAqLywKKwkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0Yg
LyogQ2xvY2tUeXBlLmNwcCAqLywKKwkJCQkwRjY2QjI4MTFEQzk3QkFCMDA0QTFEM0YgLyogQ2xv
Y2tUeXBlLmggKi8sCiAJCQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRl
ci5oICovLAogCQkJCTBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVh
ZC5jcHAgKi8sCiAJCQkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhy
ZWFkLmggKi8sCkBAIC05NDYsNiArOTY4LDggQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIz
RkYgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZG
IC8qIE1ldGFBbGxvY2F0b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyog
TWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAorCQkJCTBGNjZCMjgyMURDOTdCQUIwMDRBMUQzRiAv
KiBNb25vdG9uaWNUaW1lLmNwcCAqLywKKwkJCQkwRjY2QjI4MzFEQzk3QkFCMDA0QTFEM0YgLyog
TW9ub3RvbmljVGltZS5oICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBOYWtl
ZFB0ci5oICovLAogCQkJCTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ryb3ll
ZC5oICovLAogCQkJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKQEAg
LTEwMDcsNiArMTAzMSw4IEBACiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVk
dWxlUGFpck1hYy5tbSAqLywKIAkJCQkxQTM1MjRBQTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUu
aCAqLywKIAkJCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8s
CisJCQkJMEY2NkIyODQxREM5N0JBQjAwNEExRDNGIC8qIFNlY29uZHMuY3BwICovLAorCQkJCTBG
NjZCMjg1MURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmggKi8sCiAJCQkJQThBNDczMDYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgy
NUIwMDQxMjNGRiAvKiBTZW50aW5lbExpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4
MjVCMDA0MTIzRkYgLyogU0hBMS5jcHAgKi8sCkBAIC0xMDQzLDYgKzEwNjksOCBAQAogCQkJCUE4
QTQ3MzM2MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi8sCiAJCQkJ
QThBNDczM0UxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggKi8sCiAJ
CQkJQThBNDczM0YxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggKi8sCisJCQkJ
MEY2NkIyODYxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAg
Ki8sCisJCQkJMEY2NkIyODcxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5oICovLAogCQkJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUu
aCAqLywKIAkJCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovLAog
CQkJCTE0OUVGMTYyMTZCQkZFMEQwMDBBNDMzMSAvKiBUcmlTdGF0ZS5oICovLApAQCAtMTA1NCw2
ICsxMDgyLDggQEAKIAkJCQlBOEE0NzM3MDE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8s
CiAJCQkJQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJ
CUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKKwkJCQkwRjY2QjI4ODFE
Qzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuY3BwICovLAorCQkJCTBGNjZCMjg5MURDOTdCQUIw
MDRBMUQzRiAvKiBXYWxsVGltZS5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAv
KiBXZWFrUHRyLmggKi8sCiAJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5k
b20uaCAqLywKIAkJCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICov
LApAQCAtMTI1OSw3ICsxMjg5LDkgQEAKIAkJCQkwRkIxNEUxOTE4MEZBMjE4MDA5QjZCNEQgLyog
QmFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNEUxQjE4MTBFMURDMDA5QjZCNEQgLyogQmFn
VG9IYXNoTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MTM0MDEzOTE1QjA5MkZEMDAxRkYwQjgg
LyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RjFEQzk3QkFCMDA0QTFEM0Yg
LyogU2Vjb25kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZG
IC8qIGJpZ251bS1kdG9hLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MTFEQzk3QkFCMDA0
QTFEM0YgLyogVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNBQjE1MUE4MjVCMDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAq
LywKQEAgLTEzNDAsNiArMTM3Miw3IEBACiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8q
IExDaGFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyog
TEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5QTlC
IC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI5MzFEQzk3QkFCMDA0QTFE
M0YgLyogV2FsbFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UxMTUxQTgyNUIwMDQx
MjNGRiAvKiBMaXN0SGFzaFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMTY0NkIxQjZGRkM5
NjAwNDAwRTdDIC8qIExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0UzMTUxQTgyNUIw
MDQxMjNGRiAvKiBMb2NrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM5OSw2ICsxNDMyLDcgQEAK
IAkJCQkxNEYzQjBGNzE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ2OTQxOTYxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFp
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNTI0QUIxRDYzQTJGRjAwMzE3MjlCIC8qIFNjb3Bl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY2QjI4RDFEQzk3QkFCMDA0QTFEM0YgLyogTW9ub3Rv
bmljVGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8q
IFNjb3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwOThCMDIxQzE2QTRGOTAwMDg3
Nzk3IC8qIFNlY3VyaXR5U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVC
MDA0MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE0NjYsNiAr
MTUwMCw3IEBACiAJCQkJRTRBMEFEM0ExQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVh
ZERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjZCMjhCMURDOTdCQUIwMDRBMUQzRiAvKiBD
bG9ja1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNzNFMDI1MTlEQ0I3QUIwMDU4MEQ1QyAv
KiBYUENTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM4QjBFMUExRTAxQTQ4NkVCOTVFMEQxMSAv
KiBJbmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzkxNkI5NzVGMDJGNEY3RThCNEFCMTJE
IC8qIEluZGV4TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTE1ODEsNiArMTYxNiw3IEBACiAJCQkJ
QThBNDczQUExNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QTQ3NDUxMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThBNDczOEIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjY2QjI5MDFEQzk3QkFCMDA0QTFEM0YgLyogVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBD
MjM5NiAvKiBCbG9ja09iakNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDcz
QUMxNTFBODI1QjAwNDEyM0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzQ2MDE1MUE4MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTY0MSw2ICsxNjc3LDkgQEAKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJF
NjkgLyogU3RyaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3
NDQzMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGNjZCMjhBMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2NkIyOTIxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJl
YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0
cmluZ1ZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2OTAwRDBENkEx
IC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE2NTIsNiArMTY5MSw3IEBA
CiAJCQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NkIyOEMx
REM5N0JBQjAwNEExRDNGIC8qIE1vbm90b25pY1RpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUMxODFDOEYxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUMxODFDOTExRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0UHJvdmlkZXJMYXRpbjEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUMxODFDOTMxRDMwN0FCODAwRjVGQTE2IC8qIFVUZXh0
UHJvdmlkZXJVVEYxNi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1
dG9tYXRpY1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXV0b21hdGlj
VGhyZWFkLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQXV0b21hdGlj
VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw4IEBAIHZvaWQgQXV0b21h
dGljVGhyZWFkOjpzdGFydChjb25zdCBMb2NrSG8KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RvcChsb2NrZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0ID09IFBvbGxSZXN1bHQ6OldhaXQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU2h1dCB0aGUgdGhyZWFkIGRvd24gYWZ0ZXIgb25lIHNlY29uZC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSB0aW1lb3V0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCkgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhd29rZW5CeU5vdGlmeSA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25kaXRpb24tPm1fY29uZGl0aW9uLndhaXRV
bnRpbE1vbm90b25pY0Nsb2NrU2Vjb25kcygqbV9sb2NrLCB0aW1lb3V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bV9jb25kaXRpb24ud2FpdEZvcigqbV9sb2Nr
LCBTZWNvbmRzKDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXdva2VuQnlOb3Rp
ZnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBHb2lu
ZyB0byBzbGVlcCFcbiIpOwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
Miw2ICsxMiw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQ
b2ludGVyQWxsb2NhdG9yLmgKICAgICBCeXRlT3JkZXIuaAorICAgIENsb2NrVHlwZS5oCiAgICAg
Q29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKICAgICBDb25kaXRpb24uaApAQCAt
NjQsNiArNjUsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBNZXNzYWdlUXVldWUuaAogICAgIE1l
dGFBbGxvY2F0b3IuaAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAorICAgIE1vbm90b25pY1Rp
bWUuaAogICAgIE5vbmNvcHlhYmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9j
YXRvci5oCkBAIC0xMDEsNiArMTAzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgU2hhcmVkVGFz
ay5oCiAgICAgU2F0dXJhdGVkQXJpdGhtZXRpYy5oCiAgICAgU2NvcGVkTGFtYmRhLmgKKyAgICBT
ZWNvbmRzLmgKICAgICBTZWdtZW50ZWRWZWN0b3IuaAogICAgIFNtYWxsUHRyU2V0LmgKICAgICBT
dGFja0JvdW5kcy5oCkBAIC0xMTYsNiArMTE5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgVGhy
ZWFkU3BlY2lmaWMuaAogICAgIFRocmVhZGluZy5oCiAgICAgVGhyZWFkaW5nUHJpbWl0aXZlcy5o
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKICAgICBUaW55UHRyU2V0LmgKICAgICBV
bmlxdWVSZWYuaAogICAgIFZNVGFncy5oCkBAIC0xMjQsNiArMTI4LDcgQEAgc2V0KFdURl9IRUFE
RVJTCiAgICAgVmVjdG9yLmgKICAgICBWZWN0b3JUcmFpdHMuaAogICAgIFdURlRocmVhZERhdGEu
aAorICAgIFdhbGxUaW1lLmgKICAgICBXZWFrUHRyLmgKICAgICBXb3JkTG9jay5oCiAgICAgV29y
a1F1ZXVlLmgKQEAgLTE3Niw2ICsxODEsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBBdG9taWNz
LmNwcAogICAgIEF1dG9tYXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQ2xv
Y2tUeXBlLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29w
aWVyLmNwcAogICAgIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCkBAIC0xOTUsNiArMjAxLDcg
QEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRpbWUuY3Bw
CiAgICAgTWV0YUFsbG9jYXRvci5jcHAKKyAgICBNb25vdG9uaWNUaW1lLmNwcAogICAgIE51bWJl
ck9mQ29yZXMuY3BwCiAgICAgT1NSYW5kb21Tb3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcApA
QCAtMjA3LDEyICsyMTQsMTUgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlZExlYWtD
b3VudGVyLmNwcAogICAgIFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKKyAgICBTZWNvbmRzLmNw
cAogICAgIFNpeENoYXJhY3Rlckhhc2guY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3Rh
Y2tTdGF0cy5jcHAKICAgICBTdHJpbmdQcmludFN0cmVhbS5jcHAKICAgICBUaHJlYWRpbmcuY3Bw
CisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3Bw
CisgICAgV2FsbFRpbWUuY3BwCiAgICAgV29yZExvY2suY3BwCiAgICAgV29ya1F1ZXVlLmNwcAog
ICAgIGR0b2EuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DbG9ja1R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDbG9ja1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIENsb2NrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICBvdXQucHJpbnQoIldhbGwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6CisgICAgICAgIG91dC5w
cmludCgiTW9ub3RvbmljIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Ns
b2NrVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0Nsb2NrVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfQ2xvY2tUeXBlX2gKKyNkZWZpbmUgV1RG
X0Nsb2NrVHlwZV9oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwor
ZW51bSBjbGFzcyBDbG9ja1R5cGUgeworICAgIFdhbGwsCisgICAgTW9ub3RvbmljCit9OworCitX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tU
eXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Q2xvY2tUeXBlOworCisj
ZW5kaWYgLy8gV1RGX0Nsb2NrVHlwZV9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjA4
MzU4KQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEg
KzI2LDExIEBACiAjaWZuZGVmIFdURl9Db25kaXRpb25faAogI2RlZmluZSBXVEZfQ29uZGl0aW9u
X2gKIAotI2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDYsNyArNDYsMTAgQEAgbmFtZXNwYWNl
IFdURiB7CiAvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0
cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2Ug
TG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7Ci0gICAg
dHlwZWRlZiBQYXJraW5nTG90OjpDbG9jayBDbG9jazsKKyAgICAvLyBDb25kaXRpb24gd2lsbCBh
Y2NlcHQgYW55IGtpbmQgb2YgdGltZSBhbmQgY29udmVydCBpdCBpbnRlcm5hbGx5LCBidXQgdGhp
cyB0eXBlZGVmIHRlbGxzCisgICAgLy8geW91IHdoYXQga2luZCBvZiB0aW1lIENvbmRpdGlvbiB3
b3VsZCBiZSBhYmxlIHRvIHVzZSB3aXRob3V0IGNvbnZlcnNpb25zLiBIb3dldmVyLCBpZiB5b3UK
KyAgICAvLyBhcmUgdW5saWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2YgY29udmVy
c2lvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgTW9ub3RvbmljVGltZS4KKyAgICB0eXBlZGVmIFBh
cmtpbmdMb3Q6OlRpbWUgVGltZTsKICAgICAKICAgICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1
ZSB3aGlsZSByZWxlYXNpbmcgdGhlIGdpdmVuIGxvY2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2Nr
IGp1c3QgYmVmb3JlCiAgICAgLy8gcGFya2luZywgYW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4g
UmV0dXJucyB0cnVlIGlmIHdlIHdva2UgdXAgZHVlIHRvIHNvbWUgY2FsbCB0bwpAQCAtNjQsMTAg
KzY3LDEwIEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAvLyB3aGljaCBtYXkgbm90IHJl
bGVhc2UgdGhlIGxvY2sgZm9yIHBhc3QgdGltZW91dC4gQnV0LCB0aGlzIGJlaGF2aW9yIGlzIGNv
bnNpc3RlbnQgd2l0aCBPcGVuR3JvdXAKICAgICAvLyBkb2N1bWVudGF0aW9uIGZvciB0aW1lZHdh
aXQoKS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBib29sIHdhaXRVbnRp
bChMb2NrVHlwZSYgbG9jaywgQ2xvY2s6OnRpbWVfcG9pbnQgdGltZW91dCkKKyAgICBib29sIHdh
aXRVbnRpbChMb2NrVHlwZSYgbG9jaywgY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0
aW1lb3V0KQogICAgIHsKICAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICh0aW1lb3V0
IDwgQ2xvY2s6Om5vdygpKSB7CisgICAgICAgIGlmICh0aW1lb3V0IDwgdGltZW91dC5ub3dXaXRo
U2FtZUNsb2NrKCkpIHsKICAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICBy
ZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDcgKzkyLDggQEAgc3RydWN0
IENvbmRpdGlvbkJhc2UgewogICAgIC8vIFdhaXQgdW50aWwgdGhlIGdpdmVuIHByZWRpY2F0ZSBp
cyBzYXRpc2ZpZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBzYXRpc2ZpZWQgaW4gdGhlIGVuZC4K
ICAgICAvLyBNYXkgcmV0dXJuIGVhcmx5IGR1ZSB0byB0aW1lb3V0LgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgotICAgIGJvb2wgd2FpdFVudGlsKExv
Y2tUeXBlJiBsb2NrLCBDbG9jazo6dGltZV9wb2ludCB0aW1lb3V0LCBjb25zdCBGdW5jdG9yJiBw
cmVkaWNhdGUpCisgICAgYm9vbCB3YWl0VW50aWwoCisgICAgICAgIExvY2tUeXBlJiBsb2NrLCBj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0IEZ1bmN0b3ImIHBy
ZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpIHsKICAgICAgICAg
ICAgIGlmICghd2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpKQpAQCAtMTAwLDE3ICsxMDQsMjMgQEAg
c3RydWN0IENvbmRpdGlvbkJhc2UgewogCiAgICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJl
ZGljYXRlIGlzIHNhdGlzZmllZC4gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0
aGUgZW5kLgogICAgIC8vIE1heSByZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIER1cmF0aW9uVHlwZSwgdHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rv
cj4KICAgICBib29sIHdhaXRGb3IoCi0gICAgICAgIExvY2tUeXBlJiBsb2NrLCBjb25zdCBEdXJh
dGlvblR5cGUmIHJlbGF0aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAg
ICAgICBMb2NrVHlwZSYgbG9jaywgU2Vjb25kcyByZWxhdGl2ZVRpbWVvdXQsIGNvbnN0IEZ1bmN0
b3ImIHByZWRpY2F0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgYWJz
b2x1dGVGcm9tUmVsYXRpdmUocmVsYXRpdmVUaW1lb3V0KSwgcHJlZGljYXRlKTsKKyAgICAgICAg
cmV0dXJuIHdhaXRVbnRpbChsb2NrLCBNb25vdG9uaWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGlt
ZW91dCwgcHJlZGljYXRlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGU+CisgICAgYm9vbCB3YWl0Rm9yKExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZl
VGltZW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiB3YWl0VW50aWwobG9jaywgTW9ub3Rvbmlj
VGltZTo6bm93KCkgKyByZWxhdGl2ZVRpbWVvdXQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExvY2tUeXBlPgogICAgIHZvaWQgd2FpdChMb2NrVHlwZSYgbG9jaykKICAgICB7Ci0g
ICAgICAgIHdhaXRVbnRpbChsb2NrLCBDbG9jazo6dGltZV9wb2ludDo6bWF4KCkpOworICAgICAg
ICB3YWl0VW50aWwobG9jaywgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC0xMjAsNTMgKzEzMCw2
IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAgICAgICAgIHdhaXQobG9jayk7CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVuYW1lIFRpbWVUeXBlPgot
ICAgIGJvb2wgd2FpdFVudGlsKExvY2tUeXBlJiBsb2NrLCBjb25zdCBUaW1lVHlwZSYgdGltZW91
dCkKLSAgICB7Ci0gICAgICAgIGlmICh0aW1lb3V0ID09IFRpbWVUeXBlOjptYXgoKSkgewotICAg
ICAgICAgICAgd2FpdChsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB3YWl0Rm9ySW1wbChsb2NrLCB0aW1lb3V0IC0gVGltZVR5cGU6OmNs
b2NrOjpub3coKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0g
ICAgYm9vbCB3YWl0VW50aWxXYWxsQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUg
YWJzb2x1dGVUaW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vj
b25kc0ltcGwobG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIGN1cnJlbnRUaW1lKCkpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIGJvb2wgd2FpdFVu
dGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgYWJzb2x1dGVU
aW1lb3V0U2Vjb25kcykKLSAgICB7Ci0gICAgICAgIHJldHVybiB3YWl0Rm9yU2Vjb25kc0ltcGwo
bG9jaywgYWJzb2x1dGVUaW1lb3V0U2Vjb25kcyAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIHR5cGVu
YW1lIEZ1bmN0b3I+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kcyhMb2NrVHlwZSYgbG9jaywgZG91
YmxlIHJlbGF0aXZlVGltZW91dFNlY29uZHMsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAg
ICB7Ci0gICAgICAgIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcyA9IHJlbGF0aXZl
VGltZW91dFNlY29uZHMgKiAoMTAwMC4wICogMTAwMC4wICogMTAwMC4wKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gMCkpIHsKLSAgICAgICAg
ICAgIC8vIFRoaXMgaGFuZGxlcyBpbnN0YS10aW1lb3V0cyBhcyB3ZWxsIGFzIE5hTi4KLSAgICAg
ICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWxhdGl2ZVRpbWVv
dXROYW5vc2Vjb25kcyA+IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ2NF90Pjo6bWF4KCkpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGltZW91dCBpbiBuYW5v
c2Vjb25kcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHVzaW5nIGEgNjQtYml0IGludGVnZXIsIHRoZW4g
d2UKLSAgICAgICAgICAgIC8vIG1pZ2h0IGFzIHdlbGwgd2FpdCBmb3JldmVyLgotICAgICAgICAg
ICAgd2FpdChsb2NrLCBwcmVkaWNhdGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVUaW1lb3V0ID0KLSAgICAgICAg
ICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PihyZWxhdGl2
ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVybiB3YWl0Rm9yKGxvY2ssIHJl
bGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKLSAgICB9Ci0KICAgICAvLyBOb3RlIHRoYXQgdGhp
cyBtZXRob2QgaXMgZXh0cmVtZWx5IGZhc3Qgd2hlbiBub2JvZHkgaXMgd2FpdGluZy4gSXQgaXMg
bm90IG5lY2Vzc2FyeSB0byB0cnkgdG8KICAgICAvLyBhdm9pZCBjYWxsaW5nIHRoaXMgbWV0aG9k
LiBUaGlzIHJldHVybnMgdHJ1ZSBpZiBzb21lb25lIHdhcyBhY3R1YWxseSB3b2tlbiB1cC4KICAg
ICBib29sIG5vdGlmeU9uZSgpCkBAIC0yMDcsNTggKzE3MCw4IEBAIHN0cnVjdCBDb25kaXRpb25C
YXNlIHsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGU+Ci0gICAgYm9vbCB3YWl0Rm9yU2Vjb25kc0ltcGwoTG9ja1R5cGUmIGxvY2ssIGRvdWJs
ZSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzKQotICAgIHsKLSAgICAgICAgZG91YmxlIHJlbGF0aXZl
VGltZW91dE5hbm9zZWNvbmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAx
MDAwLjAgKiAxMDAwLjApOwotICAgICAgICAKLSAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0
TmFub3NlY29uZHMgPiAwKSkgewotICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRp
bWVvdXRzIGFzIHdlbGwgYXMgTmFOLgotICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAg
ICAgICAgIGxvY2subG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKLSAgICAgICAg
ICAgIC8vIElmIHRoZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQg
dXNpbmcgYSA2NC1iaXQgaW50ZWdlciwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gbWlnaHQgYXMg
d2VsbCB3YWl0IGZvcmV2ZXIuCi0gICAgICAgICAgICB3YWl0KGxvY2spOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGF1dG8gcmVsYXRpdmVU
aW1lb3V0ID0KLSAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyhzdGF0aWNfY2Fz
dDxpbnQ2NF90PihyZWxhdGl2ZVRpbWVvdXROYW5vc2Vjb25kcykpOwotCi0gICAgICAgIHJldHVy
biB3YWl0Rm9ySW1wbChsb2NrLCByZWxhdGl2ZVRpbWVvdXQpOwotICAgIH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRHVyYXRpb25UeXBlPgotICAgIGJv
b2wgd2FpdEZvckltcGwoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IER1cmF0aW9uVHlwZSYgcmVsYXRp
dmVUaW1lb3V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBhYnNvbHV0
ZUZyb21SZWxhdGl2ZShyZWxhdGl2ZVRpbWVvdXQpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBEdXJhdGlvblR5cGU+Ci0gICAgQ2xvY2s6OnRpbWVfcG9pbnQgYWJzb2x1dGVGcm9t
UmVsYXRpdmUoY29uc3QgRHVyYXRpb25UeXBlJiByZWxhdGl2ZVRpbWVvdXQpCi0gICAgewotICAg
ICAgICBpZiAocmVsYXRpdmVUaW1lb3V0IDwgRHVyYXRpb25UeXBlOjp6ZXJvKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1pbigpOwotCi0gICAgICAgIGlmIChyZWxh
dGl2ZVRpbWVvdXQgPiBDbG9jazo6ZHVyYXRpb246Om1heCgpKSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlzIGhpZ2hseSB1bmxpa2VseS4gQnV0IGlmIGl0IGhhcHBlbnMsIHdlIHdhbnQgdG8gbm90
IGRvIGFueXRoaW5nIGR1bWIuIFNsZWVwaW5nCi0gICAgICAgICAgICAvLyB3aXRob3V0IGEgdGlt
ZW91dCBzZWVtcyBzZW5zaWJsZSB3aGVuIHRoZSB0aW1lb3V0IGR1cmF0aW9uIGlzIGdyZWF0ZXIg
dGhhbiB3aGF0IGNhbiBiZQotICAgICAgICAgICAgLy8gZXhwcmVzc2VkIHVzaW5nIHN0ZWFkeV9j
bG9jay4KLSAgICAgICAgICAgIHJldHVybiBDbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIENsb2NrOjpkdXJhdGlvbiBteVJlbGF0aXZlVGltZW91
dCA9Ci0gICAgICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxDbG9jazo6ZHVyYXRp
b24+KHJlbGF0aXZlVGltZW91dCk7Ci0KLSAgICAgICAgcmV0dXJuIENsb2NrOjpub3coKSArIG15
UmVsYXRpdmVUaW1lb3V0OwotICAgIH0KLQogICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7
Ci19OyAgICAKK307CiAKIGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25kaXRpb24pOwpJbmRleDogU291cmNlL1dURi93
dGYvQ3Jvc3NUaHJlYWRRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nyb3Nz
VGhyZWFkUXVldWUuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dURi93dGYvQ3Jvc3NU
aHJlYWRRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBAIERhdGFUeXBlIENy
b3NzVGhyZWFkUXVldWU8RGF0YVR5cGU+Ojp3YWkKICAgICAgICAgaWYgKGZvdW5kICE9IG1fcXVl
dWUuZW5kKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBzdGF0aWMgY29uc3QgZG91
YmxlIGluZmluaXRlVGltZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7Ci0g
ICAgICAgIG1fY29uZGl0aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9sb2NrLCBpbmZp
bml0ZVRpbWUpOworICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIG1fcXVldWUudGFrZUZpcnN0KCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DdXJy
ZW50VGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ3VycmVudFRpbWUuY3Bw
CShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9DdXJyZW50VGltZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgpAQCAtMzQwLDcg
KzM0MCw3IEBAIHZvaWQgc2xlZXAoZG91YmxlIHZhbHVlKQogICAgIExvY2sgZmFrZUxvY2s7CiAg
ICAgQ29uZGl0aW9uIGZha2VDb25kaXRpb247CiAgICAgTG9ja0hvbGRlciBmYWtlTG9ja2VyKGZh
a2VMb2NrKTsKLSAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbE1vbm90b25pY0Nsb2NrU2Vjb25k
cyhmYWtlTG9jaywgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKyB2YWx1ZSk7CisgICAg
ZmFrZUNvbmRpdGlvbi53YWl0Rm9yKGZha2VMb2NrLCBTZWNvbmRzKHZhbHVlKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTWVzc2FnZVF1ZXVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWVzc2FnZVF1ZXVlLmgJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9XVEYvd3RmL01lc3NhZ2VRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTY1LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4gdHJ5R2V0TWVzc2FnZSgpOwogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2VJZ25vcmluZ0tpbGxlZCgp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxEYXRhVHlwZT4gd2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0KE1lc3Nh
Z2VRdWV1ZVdhaXRSZXN1bHQmLCBQcmVkaWNhdGUmJiwgZG91YmxlIGFic29sdXRlVGltZSk7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4gd2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdp
dGhUaW1lb3V0KE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQmLCBQcmVkaWNhdGUmJiwgV2FsbFRpbWUg
YWJzb2x1dGVUaW1lKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CiAg
ICAgICAgIHZvaWQgcmVtb3ZlSWYoUHJlZGljYXRlJiYpOwpAQCAtNzYsOCArNzcsNiBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgLy8gVGhlIHJlc3VsdCBvZiBpc0VtcHR5KCkgaXMgb25seSB2
YWxpZCBpZiBubyBvdGhlciB0aHJlYWQgaXMgbWFuaXB1bGF0aW5nIHRoZSBxdWV1ZSBhdCB0aGUg
c2FtZSB0aW1lLgogICAgICAgICBib29sIGlzRW1wdHkoKTsKIAotICAgICAgICBzdGF0aWMgZG91
YmxlIGluZmluaXRlVGltZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
bWF4KCk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgTG9jayBtX211dGV4Owog
ICAgICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CkBAIC0xMzAsMTQgKzEyOSwxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp3YWl0
Rm9yTWVzc2FnZSgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlwZT4KICAgICB7CiAgICAgICAg
IE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgZXhpdFJlYXNvbjsgCi0gICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxEYXRhVHlwZT4gcmVzdWx0ID0gd2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0
KGV4aXRSZWFzb24sIFtdKGNvbnN0IERhdGFUeXBlJikgeyByZXR1cm4gdHJ1ZTsgfSwgaW5maW5p
dGVUaW1lKCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHJlc3VsdCA9IHdh
aXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChleGl0UmVhc29uLCBbXShjb25zdCBEYXRh
VHlwZSYpIHsgcmV0dXJuIHRydWU7IH0sIFdhbGxUaW1lOjppbmZpbml0eSgpKTsKICAgICAgICAg
QVNTRVJUKGV4aXRSZWFzb24gPT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCB8fCBleGl0UmVhc29u
ID09IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUHJlZGljYXRlPgotICAgIGlubGluZSBhdXRvIE1lc3NhZ2VRdWV1ZTxEYXRhVHlw
ZT46OndhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVz
dWx0JiByZXN1bHQsIFByZWRpY2F0ZSYmIHByZWRpY2F0ZSwgZG91YmxlIGFic29sdXRlVGltZSkg
LT4gc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPgorICAgIGlubGluZSBhdXRvIE1lc3NhZ2VRdWV1
ZTxEYXRhVHlwZT46OndhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdlUXVl
dWVXYWl0UmVzdWx0JiByZXN1bHQsIFByZWRpY2F0ZSYmIHByZWRpY2F0ZSwgV2FsbFRpbWUgYWJz
b2x1dGVUaW1lKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGxvY2sobV9tdXRleCk7CiAgICAgICAgIGJvb2wgdGltZWRPdXQgPSBmYWxzZTsK
QEAgLTE1MSwxMCArMTUwLDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgaWYgKGZv
dW5kICE9IG1fcXVldWUuZW5kKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9uLndhaXRVbnRpbFdhbGxDbG9ja1NlY29uZHMobV9t
dXRleCwgYWJzb2x1dGVUaW1lKTsKKyAgICAgICAgICAgIHRpbWVkT3V0ID0gIW1fY29uZGl0aW9u
LndhaXRVbnRpbChtX211dGV4LCBhYnNvbHV0ZVRpbWUpOwogICAgICAgICB9CiAKLSAgICAgICAg
QVNTRVJUKCF0aW1lZE91dCB8fCBhYnNvbHV0ZVRpbWUgIT0gaW5maW5pdGVUaW1lKCkpOworICAg
ICAgICBBU1NFUlQoIXRpbWVkT3V0IHx8IGFic29sdXRlVGltZSAhPSBXYWxsVGltZTo6aW5maW5p
dHkoKSk7CiAKICAgICAgICAgaWYgKG1fa2lsbGVkKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBN
ZXNzYWdlUXVldWVUZXJtaW5hdGVkOwpJbmRleDogU291cmNlL1dURi93dGYvTW9ub3RvbmljVGlt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9ub3RvbmljVGlt
ZS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5o
IgorI2luY2x1ZGUgIlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorI2luY2x1ZGUgIldhbGxU
aW1lLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitNb25vdG9uaWNUaW1lIE1vbm90b25pY1RpbWU6
Om5vdygpCit7CisgICAgcmV0dXJuIGZyb21SYXdTZWNvbmRzKG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpKTsKK30KKworV2FsbFRpbWUgTW9ub3RvbmljVGltZTo6YXBwcm94aW1hdGVXYWxs
VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBXYWxsVGltZTo6bm93
KCk7Cit9CisKK3ZvaWQgTW9ub3RvbmljVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiTW9ub3RvbmljKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Nb25vdG9uaWNU
aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTW9ub3RvbmljVGltZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL01vbm90b25pY1RpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdURl9Nb25vdG9uaWNUaW1lX2gKKyNkZWZpbmUgV1RGX01vbm90
b25pY1RpbWVfaAorCisjaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBXYWxsVGltZTsKK2NsYXNzIFBy
aW50U3RyZWFtOworCisvLyBUaGUgY3VycmVudCB0aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25p
YyBjbG9jay4gTW9ub3RvbmljIGNsb2NrcyBkb24ndCBnbyBiYWNrd2FyZHMgYW5kCisvLyBwb3Nz
aWJseSBkb24ndCBjb3VudCBkb3dudGltZS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVy
bmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBhYm91dAorLy8gaW5maW5pdHkgYW5kIG90aGVy
IHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0
byB3cmFwIE5hTiB0aW1lcywKKy8vIG5lZ2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMs
IHNvIGxvbmcgYXMgdGhleSBhcmUgYWxsIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgorLy8g
U3BlY2lmaWNhbGx5LCBNb25vdG9uaWNUaW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3
aXRoIHRoZSBwcmluY2lwbGUgdGhhdAorLy8gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpIGlzIHRoZSBzYW1lIGFzCisvLyBXVEY6Om1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpLgorY2xhc3MgTW9ub3RvbmljVGltZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0IENsb2NrVHlwZSBjbG9ja1R5cGUgPSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKKyAg
ICAKKyAgICAvLyBUaGlzIGlzIHRoZSBlcG9jaC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBz
aG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIE1vbm90b25pY1RpbWUoKS4KKyAgICBNb25vdG9uaWNU
aW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IGZvciBzdXJlIHRo
YXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUgYWNjb3JkaW5nIHRvCisgICAgLy8gV1RGOjpt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4gSXQgbXVzdCBiZSBpbiBzZWNvbmRzIGFuZCBp
dCBtdXN0IGJlIGZyb20gdGhlIHNhbWUgdGltZQorICAgIC8vIHNvdXJjZS4KKyAgICBzdGF0aWMg
TW9ub3RvbmljVGltZSBmcm9tUmF3U2Vjb25kcyhkb3VibGUgdmFsdWUpCisgICAgeworICAgICAg
ICBNb25vdG9uaWNUaW1lIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBNb25vdG9uaWNUaW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBNb25vdG9u
aWNUaW1lIGluZmluaXR5KCkgeyByZXR1cm4gZnJvbVJhd1NlY29uZHMoc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsgfQorCisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VF
cG9jaCgpIGNvbnN0IHsgcmV0dXJuIFNlY29uZHMobV92YWx1ZSk7IH0KKyAgICAKKyAgICBNb25v
dG9uaWNUaW1lIGFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
OyB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIGFwcHJveGltYXRlV2FsbFRpbWUo
KSBjb25zdDsKKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3ZhbHVlOyB9CisgICAgCisgICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcisoU2Vjb25k
cyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3Zh
bHVlICsgb3RoZXIudmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUgb3Bl
cmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJvbVJh
d1NlY29uZHMobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICAvLyBU
aW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQg
YXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxv
dyBpdC4KKyAgICBNb25vdG9uaWNUaW1lIG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZnJvbVJhd1NlY29uZHMoLW1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBNb25v
dG9uaWNUaW1lIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIE1vbm90b25pY1RpbWUg
b3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0g
KnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci0oTW9ub3Rv
bmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKG1fdmFs
dWUgLSBvdGhlci5tX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE1v
bm90b25pY1RpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTW9ub3Rv
bmljVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90
aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE1vbm90b25pY1Rp
bWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1f
dmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+KE1vbm90b25pY1RpbWUgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShNb25vdG9uaWNUaW1lIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOworICAgIH0K
KyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpNb25vdG9uaWNUaW1lOworCisjZW5kaWYgLy8gV1RG
X01vbm90b25pY1RpbWVfaApJbmRleDogU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHJldmlzaW9uIDIwODM1
OCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw4ICs1NCw4IEBAIHB1YmxpYzoKIAogICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRp
ZmllcjsKICAgICAKLSAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2NrOwotICAgIHN0ZDo6Y29uZGl0
aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247CisgICAgTXV0ZXggcGFya2luZ0xvY2s7Cisg
ICAgVGhyZWFkQ29uZGl0aW9uIHBhcmtpbmdDb25kaXRpb247CiAKICAgICBjb25zdCB2b2lkKiBh
ZGRyZXNzIHsgbnVsbHB0ciB9OwogICAgIApAQCAtNTY0LDcgKzU2NCw3IEBAIE5FVkVSX0lOTElO
RSBQYXJraW5nTG90OjpQYXJrUmVzdWx0IFBhcmsKICAgICBjb25zdCB2b2lkKiBhZGRyZXNzLAog
ICAgIGNvbnN0IFNjb3BlZExhbWJkYTxib29sKCk+JiB2YWxpZGF0aW9uLAogICAgIGNvbnN0IFNj
b3BlZExhbWJkYTx2b2lkKCk+JiBiZWZvcmVTbGVlcCwKLSAgICBDbG9jazo6dGltZV9wb2ludCB0
aW1lb3V0KQorICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKIHsK
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IHBhcmtpbmcuXG4iKSk7CkBAIC01OTIsMjAgKzU5MiwxNyBAQCBORVZFUl9JTkxJTkUg
UGFya2luZ0xvdDo6UGFya1Jlc3VsdCBQYXJrCiAgICAgCiAgICAgYm9vbCBkaWRHZXREZXF1ZXVl
ZDsKICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1l
LT5wYXJraW5nTG9jayk7Ci0gICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcyAmJiBDbG9jazo6bm93
KCkgPCB0aW1lb3V0KSB7Ci0gICAgICAgICAgICAvLyBGYWxsaW5nIGJhY2sgdG8gd2FpdCgpIHdv
cmtzIGFyb3VuZCBhIGJ1ZyBpbiBsaWJzdGRjKysgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjpjb25k
aXRpb25fdmFyaWFibGUuIFNlZToKLSAgICAgICAgICAgIC8vIC0gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODAyNwotICAgICAgICAgICAgLy8gLSBodHRwczovL2dj
Yy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01ODkzMQotICAgICAgICAgICAgaWYg
KHRpbWVvdXQgPT0gQ2xvY2s6OnRpbWVfcG9pbnQ6Om1heCgpKQotICAgICAgICAgICAgICAgIG1l
LT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0X3VudGlsKGxvY2tlciwgdGltZW91
dCk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtZS0+cGFya2luZ0xvY2spOworICAgICAg
ICB3aGlsZSAobWUtPmFkZHJlc3MgJiYgdGltZW91dC5ub3dXaXRoU2FtZUNsb2NrKCkgPCB0aW1l
b3V0KSB7CisgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi50aW1lZFdhaXQoCisgICAg
ICAgICAgICAgICAgbWUtPnBhcmtpbmdMb2NrLCB0aW1lb3V0LmFwcHJveGltYXRlV2FsbFRpbWUo
KS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBCZWNhdXNlIG9mIHRoZSBhYm92ZSwgd2UgZG8gdGhpcyB0aGluZywgd2hpY2ggaXMgaGls
YXJpb3VzbHkgYXdmdWwsIGJ1dCBlbnN1cmVzIHRoYXQgdGhlIHdvcnN0IGNhc2UgaXMKLSAgICAg
ICAgICAgIC8vIGEgQ1BVLWVhdGluZyBzcGluIGJ1dCBub3QgYSBkZWFkbG9jay4KLSAgICAgICAg
ICAgIGxvY2tlci51bmxvY2soKTsKLSAgICAgICAgICAgIGxvY2tlci5sb2NrKCk7CisgICAgICAg
ICAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciB0aGUgT1MgdG8gZGVjaWRlIG5vdCB0byB3YWl0LiBJ
ZiBpdCBkb2VzIHRoYXQgdGhlbiBpdCB3aWxsIGFsc28KKyAgICAgICAgICAgIC8vIGRlY2lkZSBu
b3QgdG8gcmVsZWFzZSB0aGUgbG9jay4gSWYgdGhlcmUncyBhIGJ1ZyBpbiB0aGUgdGltZSBtYXRo
LCB0aGVuIHRoaXMgY291bGQKKyAgICAgICAgICAgIC8vIHJlc3VsdCBpbiBhIGRlYWRsb2NrLiBG
bGFzaGluZyB0aGUgbG9jayBtZWFucyB0aGF0IGF0IHdvcnN0IGl0J3MganVzdCBhIENQVS1lYXRp
bmcKKyAgICAgICAgICAgIC8vIHNwaW4uCisgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2sudW5s
b2NrKCk7CisgICAgICAgICAgICBtZS0+cGFya2luZ0xvY2subG9jaygpOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVCghbWUtPmFkZHJlc3MgfHwgbWUtPmFkZHJlc3MgPT0gYWRkcmVzcyk7CiAg
ICAgICAgIGRpZEdldERlcXVldWVkID0gIW1lLT5hZGRyZXNzOwpAQCAtNjQwLDE0ICs2MzcsMTQg
QEAgTkVWRVJfSU5MSU5FIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgUGFyawogCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgbm8gbWF0dGVyIHdoYXQsIG1lLT5hZGRyZXNzIGlzIG51bGwgYWZ0ZXIgdGhp
cyBwb2ludC4KICAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9j
a2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtZS0+cGFy
a2luZ0xvY2spOwogICAgICAgICBpZiAoIWRpZERlcXVldWUpIHsKICAgICAgICAgICAgIC8vIElm
IHdlIGRpZCBub3QgZGVxdWV1ZSBvdXJzZWx2ZXMsIHRoZW4gc29tZW9uZSBlbHNlIGRpZC4gVGhl
eSB3aWxsIHNldCBvdXIgYWRkcmVzcyB0bwogICAgICAgICAgICAgLy8gbnVsbC4gV2UgZG9uJ3Qg
d2FudCB0byBwcm9jZWVkIHVudGlsIHRoZXkgZG8gdGhpcywgYmVjYXVzZSBvdGhlcndpc2UsIHRo
ZXkgbWF5IHNldAogICAgICAgICAgICAgLy8gb3VyIGFkZHJlc3MgdG8gbnVsbCBpbiBzb21lIGRp
c3RhbnQgZnV0dXJlIHdoZW4gd2UncmUgYWxyZWFkeSB0cnlpbmcgdG8gd2FpdCBmb3IKICAgICAg
ICAgICAgIC8vIG90aGVyIHRoaW5ncy4KICAgICAgICAgICAgIHdoaWxlIChtZS0+YWRkcmVzcykK
LSAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAg
ICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChtZS0+cGFya2luZ0xvY2spOwog
ICAgICAgICB9CiAgICAgICAgIG1lLT5hZGRyZXNzID0gbnVsbHB0cjsKICAgICB9CkBAIC02OTUs
MTEgKzY5MiwxMSBAQCBORVZFUl9JTkxJTkUgUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IFBhCiAg
ICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgIAogICAgIHsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2sp
OworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOwog
ICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsKICAgICAgICAgdGhyZWFkRGF0
YS0+dG9rZW4gPSAwOwogICAgIH0KLSAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5v
dGlmeV9vbmUoKTsKKyAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLnNpZ25hbCgpOwog
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0MSwxMSArNzM4LDExIEBAIE5FVkVSX0lOTElO
RSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya09uZUkKICAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRk
cmVzcyk7CiAgICAgCiAgICAgewotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAgIHRocmVhZERhdGEtPmFkZHJl
c3MgPSBudWxscHRyOwogICAgIH0KICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgdGhyZWFkRGF0
YSBtYXkgZGllLiBHb29kIHRoaW5nIHdlIGhhdmUgYSBSZWZQdHI8PiBvbiBpdC4KLSAgICB0aHJl
YWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICB0aHJlYWREYXRhLT5w
YXJraW5nQ29uZGl0aW9uLnNpZ25hbCgpOwogfQogCiBORVZFUl9JTkxJTkUgdW5zaWduZWQgUGFy
a2luZ0xvdDo6dW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRkcmVzcywgdW5zaWduZWQgY291bnQp
CkBAIC03NzksMTAgKzc3NiwxMCBAQCBORVZFUl9JTkxJTkUgdW5zaWduZWQgUGFya2luZ0xvdDo6
dW5wYXJrCiAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
dW5wYXJraW5nICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS5nZXQoKSksICIgd2l0aCBhZGRyZXNz
ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKICAgICAgICAgQVNT
RVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwogICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7Cisg
ICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOwog
ICAgICAgICAgICAgdGhyZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7CiAgICAgICAgIH0KLSAg
ICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAgICAg
IHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CiAgICAgfQogCiAgICAgaWYg
KHZlcmJvc2UpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMSBA
QAogI2lmbmRlZiBXVEZfUGFya2luZ0xvdF9oCiAjZGVmaW5lIFdURl9QYXJraW5nTG90X2gKIAot
I2luY2x1ZGUgPGNocm9ubz4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC0zOSw3ICszOSwxNSBAQCBjbGFzcyBQYXJraW5nTG90IHsK
ICAgICBQYXJraW5nTG90KGNvbnN0IFBhcmtpbmdMb3QmKSA9IGRlbGV0ZTsKIAogcHVibGljOgot
ICAgIHR5cGVkZWYgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jayBDbG9jazsKKyAgICAvLyBQYXJr
aW5nTG90IHdpbGwgYWNjZXB0IGFueSBraW5kIG9mIHRpbWUgYW5kIGNvbnZlcnQgaXQgaW50ZXJu
YWxseSwgYnV0IHRoaXMgdHlwZWRlZiB0ZWxscworICAgIC8vIHlvdSB3aGF0IGtpbmQgb2YgdGlt
ZSBQYXJraW5nTG90IHdvdWxkIGJlIGFibGUgdG8gdXNlIHdpdGhvdXQgY29udmVyc2lvbnMuIEl0
J3Mgc2FkIHRoYXQKKyAgICAvLyB0aGlzIGlzIFdhbGxUaW1lIG5vdCBNb25vdG9uaWNUaW1lLCBi
dXQgdGhhdCdzIGp1c3QgaG93IE9TIHdhaXQgZnVuY3Rpb25zIHdvcmsuIEhvd2V2ZXIsCisgICAg
Ly8gYmVjYXVzZSBQYXJraW5nTG90IGV2YWx1YXRlcyB3aGV0aGVyIGl0IHNob3VsZCB3YWl0IGJ5
IGNoZWNraW5nIGlmIHlvdXIgdGltZSBoYXMgcGFzc2VkCisgICAgLy8gdXNpbmcgd2hhdGV2ZXIg
Y2xvY2sgeW91IHVzZWQsIHNwZWNpZnlpbmcgdGltZW91dHMgaW4gTW9ub3RvbmljVGltZSBpcyBz
ZW1hbnRpY2FsbHkgYmV0dGVyLgorICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBzZXRz
IGhpcyBjb21wdXRlcidzIGNsb2NrIGJhY2sgZHVyaW5nIHRoZSB0aW1lIHRoYXQgeW91IHdhbnRl
ZCB0bworICAgIC8vIHdhaXQgZm9yIG9uZSBzZWNvbmQsIGFuZCB5b3Ugc3BlY2lmaWVkIHRoZSB0
aW1lb3V0IHVzaW5nIHRoZSBNb25vdG9uaWNUaW1lLCB0aGVuIFBhcmtpbmdMb3QKKyAgICAvLyB3
aWxsIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgeW91ciBvbmUgc2Vjb25kIGhhcyBlbGFw
c2VkLgorICAgIHR5cGVkZWYgV2FsbFRpbWUgVGltZTsKICAgICAKICAgICAvLyBQYXJrcyB0aGUg
dGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGlj
aCBjYW5ub3QgYmUgbnVsbC4gVGhlCiAgICAgLy8gcGFya2luZyBvbmx5IHN1Y2NlZWRzIGlmIHRo
ZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGlsZSB0aGUgcXVldWUgbG9jayBp
cyBoZWxkLgpAQCAtNjgsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IHZvaWQqIGFk
ZHJlc3MsCiAgICAgICAgIGNvbnN0IFZhbGlkYXRpb25GdW5jdG9yJiB2YWxpZGF0aW9uLAogICAg
ICAgICBjb25zdCBCZWZvcmVTbGVlcEZ1bmN0b3ImIGJlZm9yZVNsZWVwLAotICAgICAgICBDbG9j
azo6dGltZV9wb2ludCB0aW1lb3V0KQorICAgICAgICBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUmIHRpbWVvdXQpCiAgICAgewogICAgICAgICByZXR1cm4gcGFya0NvbmRpdGlvbmFsbHlJ
bXBsKAogICAgICAgICAgICAgYWRkcmVzcywKQEAgLTg5LDcgKzk3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZDsKICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICBbXSAoKSB7IH0sCi0gICAgICAgICAgICBDbG9jazo6dGltZV9wb2ludDo6bWF4
KCkpOworICAgICAgICAgICAgVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogCiAgICAgLy8gVW5w
YXJraW5nIHN0YXR1cyBnaXZlbiB0byB5b3UgYW55dGltZSB5b3UgdW5wYXJrT25lKCkuCkBAIC0x
NTgsNyArMTY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3Qgdm9pZCogYWRkcmVzcywKICAg
ICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPGJvb2woKT4mIHZhbGlkYXRpb24sCiAgICAgICAgIGNv
bnN0IFNjb3BlZExhbWJkYTx2b2lkKCk+JiBiZWZvcmVTbGVlcCwKLSAgICAgICAgQ2xvY2s6OnRp
bWVfcG9pbnQgdGltZW91dCk7CisgICAgICAgIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYgdGltZW91dCk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVu
cGFya09uZUltcGwoCiAgICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IFNjb3BlZExh
bWJkYTxpbnRwdHJfdChVbnBhcmtSZXN1bHQpPiYgY2FsbGJhY2spOwpJbmRleDogU291cmNlL1dU
Ri93dGYvU2Vjb25kcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2Vjb25kcy5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU2Vjb25kcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Vjb25kcy5oIgor
CisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgiCisj
aW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUuaCIKKyNpbmNsdWRlICJXYWxsVGltZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworV2FsbFRp
bWUgU2Vjb25kczo6b3BlcmF0b3IrKFdhbGxUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBvdGhlciArICp0aGlzOworfQorCitNb25vdG9uaWNUaW1lIFNlY29uZHM6Om9wZXJhdG9yKyhN
b25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBvdGhlciArICp0aGlzOwor
fQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25kczo6b3BlcmF0b3IrKGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG90aGVy
ICsgKnRoaXM7Cit9CisKK1dhbGxUaW1lIFNlY29uZHM6Om9wZXJhdG9yLShXYWxsVGltZSBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHZhbHVlKCkg
LSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworfQorCitNb25vdG9uaWNUaW1l
IFNlY29uZHM6Om9wZXJhdG9yLShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vjb25kcyh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKK30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFNl
Y29uZHM6Om9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiBvdGhlci53aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcyh2YWx1
ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKK30KKwordm9pZCBTZWNv
bmRzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFs
dWUsICIgc2VjIik7Cit9CisKK3ZvaWQgc2xlZXAoU2Vjb25kcyB2YWx1ZSkKK3sKKyAgICBzbGVl
cCh2YWx1ZS52YWx1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1NlY29uZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWNvbmRz
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvU2Vjb25kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgV1RGX1NlY29uZHNfaAorI2RlZmluZSBXVEZfU2Vjb25kc19o
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNb25vdG9uaWNUaW1lOworY2xhc3MgUHJpbnRT
dHJlYW07CitjbGFzcyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7CitjbGFzcyBXYWxsVGltZTsK
KworY2xhc3MgU2Vjb25kcyB7CitwdWJsaWM6CisgICAgU2Vjb25kcygpIHsgfQorICAgIAorICAg
IGV4cGxpY2l0IGNvbnN0ZXhwciBTZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIGRvdWJsZSBzZWNvbmRzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorICAgIGRvdWJsZSBtaWxsaXNlY29uZHMoKSBjb25zdCB7IHJldHVy
biBzZWNvbmRzKCkgKiAxMDAwOyB9CisgICAgZG91YmxlIG1pY3Jvc2Vjb25kcygpIGNvbnN0IHsg
cmV0dXJuIG1pbGxpc2Vjb25kcygpICogMTAwMDsgfQorICAgIGRvdWJsZSBuYW5vc2Vjb25kcygp
IGNvbnN0IHsgcmV0dXJuIG1pY3Jvc2Vjb25kcygpICogMTAwMDsgfQorICAgIAorICAgIHN0YXRp
YyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tTWlsbGlzZWNvbmRzKGRvdWJsZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlIC8gMTAwMCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tTWljcm9zZWNvbmRzKGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmcm9tTWlsbGlzZWNvbmRzKHZhbHVlIC8gMTAwMCk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tTmFub3NlY29uZHMo
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21NaWNyb3NlY29uZHModmFs
dWUgLyAxMDAwKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGlu
ZmluaXR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBTZWNvbmRz
IG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNl
Y29uZHModmFsdWUoKSArIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
IG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNl
Y29uZHModmFsdWUoKSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBTZWNvbmRz
IG9wZXJhdG9yLSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUo
KSk7CisgICAgfQorICAgIAorICAgIC8vIEl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxp
bmcgYSBkdXJhdGlvbiwgbGlrZSwgIkkgd2FudCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcwor
ICAgIC8vIGxhc3QgdGltZSEiLgorICAgIFNlY29uZHMgb3BlcmF0b3IqKGRvdWJsZSBzY2FsYXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpICogc2NhbGFyKTsK
KyAgICB9CisgICAgCisgICAgU2Vjb25kcyBvcGVyYXRvci8oZG91YmxlIHNjYWxhcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgLyBzY2FsYXIpOworICAgIH0K
KyAgICAKKyAgICAvLyBJdCdzIHJlYXNvbmFibGUgdG8gdGhpbmsgYWJvdXQgcmF0aW9zIGJldHdl
ZW4gU2Vjb25kcy4KKyAgICBkb3VibGUgb3BlcmF0b3IvKFNlY29uZHMgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUoKSAvIG90aGVyLnZhbHVlKCk7CisgICAgfQorICAg
IAorICAgIFNlY29uZHMmIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMm
IG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
ICp0aGlzIC0gb3RoZXI7CisgICAgfQorICAgIAorICAgIFNlY29uZHMmIG9wZXJhdG9yKj0oZG91
YmxlIHNjYWxhcikKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICogc2NhbGFy
OworICAgIH0KKyAgICAKKyAgICBTZWNvbmRzJiBvcGVyYXRvci89KGRvdWJsZSBzY2FsYXIpCisg
ICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAvIHNjYWxhcjsKKyAgICB9CisgICAg
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIG9wZXJhdG9yKyhXYWxsVGltZSkgY29u
c3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKE1vbm90
b25pY1RpbWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUgb3BlcmF0b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0
OworICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBvcGVyYXRvci0oV2FsbFRp
bWUpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIG9wZXJhdG9y
LShNb25vdG9uaWNUaW1lKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUm
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShTZWNvbmRzIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcjwoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj4oU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KFNlY29uZHMg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPj0oU2Vjb25kcyBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90aGVyLm1fdmFsdWU7CisgICAg
fQorICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fdmFsdWUgeyAwIH07Cit9OworCitX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChTZWNvbmRzKTsKKworfSAvLyBuYW1lc3BhZSBX
VEYKKwordXNpbmcgV1RGOjpTZWNvbmRzOworCisjZW5kaWYgLy8gV1RGX1NlY29uZHNfaApJbmRl
eDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oIgorCisjaW5jbHVkZSAiQ29uZGl0aW9uLmgiCisjaW5jbHVk
ZSAiTG9jay5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXVEYgewor
CitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpub3co
Q2xvY2tUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDbG9ja1R5
cGU6OldhbGw6CisgICAgICAgIHJldHVybiBXYWxsVGltZTo6bm93KCk7CisgICAgY2FzZSBDbG9j
a1R5cGU6Ok1vbm90b25pYzoKKyAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUoKTsKK30KKworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6bm93V2l0aFNhbWVDbG9jaygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG5vdyhjbG9ja1R5cGUoKSk7Cit9CisKK1dhbGxUaW1lIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZTo6d2FsbFRpbWUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9
PSBDbG9ja1R5cGU6OldhbGwpOworICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
bV92YWx1ZSk7Cit9CisKK01vbm90b25pY1RpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpt
b25vdG9uaWNUaW1lKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gQ2xv
Y2tUeXBlOjpNb25vdG9uaWMpOworICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vj
b25kcyhtX3ZhbHVlKTsKK30KKworV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjph
cHByb3hpbWF0ZVdhbGxUaW1lKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAg
IGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgorICAgICAgICByZXR1cm4gd2FsbFRpbWUoKTsKKyAgICBj
YXNlIENsb2NrVHlwZTo6TW9ub3RvbmljOgorICAgICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgp
LmFwcHJveGltYXRlV2FsbFRpbWUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gV2FsbFRpbWUoKTsKK30KKworTW9ub3RvbmljVGltZSBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU6OmFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENsb2NrVHlwZTo6V2FsbDoKKyAgICAg
ICAgcmV0dXJuIHdhbGxUaW1lKCkuYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCk7CisgICAgY2Fz
ZSBDbG9ja1R5cGU6Ok1vbm90b25pYzoKKyAgICAgICAgcmV0dXJuIG1vbm90b25pY1RpbWUoKTsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTW9u
b3RvbmljVGltZSgpOworfQorCitTZWNvbmRzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3Bl
cmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIFNl
Y29uZHMobV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOworfQorCitib29sIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTo6b3BlcmF0b3I8KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1fdHlwZSk7
CisgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90aGVyLm1f
dHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOworfQorCitib29sIFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6b3BlcmF0b3I8PShjb25zdCBUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUmIG90aGVyKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBv
dGhlci5tX3R5cGUpOworICAgIHJldHVybiBtX3ZhbHVlIDw9IG90aGVyLm1fdmFsdWU7Cit9CisK
K2Jvb2wgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcj49KGNvbnN0IFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV90
eXBlID09IG90aGVyLm1fdHlwZSk7CisgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIubV92YWx1
ZTsKK30KKwordm9pZCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiKCIsIG1fdmFsdWUsICIgc2Vj
KSIpOworfQorCit2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGlt
ZSkKK3sKKyAgICBMb2NrIGZha2VMb2NrOworICAgIENvbmRpdGlvbiBmYWtlQ29uZGl0aW9uOwor
ICAgIExvY2tIb2xkZXIgZmFrZUxvY2tlcihmYWtlTG9jayk7CisgICAgZmFrZUNvbmRpdGlvbi53
YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAor
I2RlZmluZSBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9D
bG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0
Zi9XYWxsVGltZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisK
K2NsYXNzIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSB7CitwdWJsaWM6CisgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlKCkgeyB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
KFdhbGxUaW1lIHRpbWUpCisgICAgICAgIDogbV92YWx1ZSh0aW1lLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkKKyAgICAgICAgLCBtX3R5cGUoQ2xvY2tUeXBlOjpXYWxsKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlKE1vbm90b25pY1RpbWUgdGlt
ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKQor
ICAgICAgICAsIG1fdHlwZShDbG9ja1R5cGU6Ok1vbm90b25pYykKKyAgICB7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgZnJvbVJhd1NlY29uZHMoZG91
YmxlIHZhbHVlLCBDbG9ja1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSB0eXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vj
b25kcyhtX3ZhbHVlKTsgfQorICAgIENsb2NrVHlwZSBjbG9ja1R5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSBub3coQ2xvY2tUeXBlKTsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG5vd1dpdGhTYW1lQ2xvY2soKSBjb25zdDsK
KyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgd2l0aFNhbWVDbG9ja0FuZFJhd1Nl
Y29uZHMoZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZTo6ZnJvbVJhd1NlY29uZHModmFsdWUsIGNsb2NrVHlwZSgpKTsKKyAg
ICB9CisgICAgCisgICAgLy8gQXNzZXJ0cyB0aGF0IHRoZSB0aW1lIGlzIG9mIHRoZSB0eXBlIHlv
dSB3YW50LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSB3YWxsVGltZSgpIGNvbnN0
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIG1vbm90b25pY1RpbWUoKSBj
b25zdDsKKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUgYXBwcm94aW1hdGVX
YWxsVGltZSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNb25vdG9uaWNUaW1lIGFw
cHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICAKKyAgICBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gd2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMobV92YWx1ZSArIG90aGVy
LnZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3Bl
cmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2l0aFNh
bWVDbG9ja0FuZFJhd1NlY29uZHMobV92YWx1ZSAtIG90aGVyLnZhbHVlKCkpOworICAgIH0KKyAg
ICAKKyAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFz
IHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbnMu
IFNvLCB3ZSBhbGxvdyBpdC4KKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgb3BlcmF0b3It
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25k
cygtbV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBv
cGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAq
dGhpcyArIG90aGVyOworICAgIH0KKyAgICAKKyAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUg
b3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID0g
KnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFNlY29u
ZHMgb3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAg
IAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1
ZQorICAgICAgICAgICAgJiYgbV90eXBlID09IG90aGVyLm1fdHlwZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
ICAgIAorICAgIC8vIFRvIGRvIHJlbGF0aXZlIGNvbXBhcmlzb25zLCB5b3UgbXVzdCBiZSB1c2lu
ZyB0aW1lcyB3aXRoIHRoZSBzYW1lIGNsb2NrIHR5cGUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0Owor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPihjb25zdCBUaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUmKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIG9wZXJhdG9yPj0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JikgY29uc3Q7CisgICAgCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsK
KyAgICBDbG9ja1R5cGUgbV90eXBlIHsgQ2xvY2tUeXBlOjpXYWxsIH07Cit9OworCitXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlOworCisjZW5kaWYgLy8gV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
V2FsbFRpbWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
YWxsVGltZS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJNb25vdG9u
aWNUaW1lLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1dhbGxUaW1lIFdhbGxUaW1l
Ojpub3coKQoreworICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhjdXJyZW50VGltZSgpKTsKK30K
KworTW9ub3RvbmljVGltZSBXYWxsVGltZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIE1vbm90b25pY1RpbWU6Om5vdygpOwor
fQorCit2b2lkIFdhbGxUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJXYWxsKCIsIG1fdmFsdWUsICIgc2VjKSIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XYWxsVGltZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1dhbGxUaW1lLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvV2FsbFRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9XYWxsVGlt
ZV9oCisjZGVmaW5lIFdURl9XYWxsVGltZV9oCisKKyNpbmNsdWRlIDx3dGYvQ2xvY2tUeXBlLmg+
CisjaW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1v
bm90b25pY1RpbWU7CitjbGFzcyBQcmludFN0cmVhbTsKKworLy8gVGhlIGN1cnJlbnQgdGltZSBh
Y2NvcmRpbmcgdG8gYSB3YWxsIGNsb2NrIChha2EgcmVhbCB0aW1lIGNsb2NrKS4gVGhpcyB1c2Vz
IGZsb2F0aW5nIHBvaW50CisvLyBpbnRlcm5hbGx5IHNvIHRoYXQgeW91IGNhbiByZWFzb24gYWJv
dXQgaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1hdGguIEl0J3MKKy8v
IGFjY2VwdGFibGUgdG8gdXNlIHRoaXMgdG8gd3JhcCBOYU4gdGltZXMsIG5lZ2F0aXZlIHRpbWVz
LCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleQorLy8gYXJlIHJlbGF0aXZlIHRv
IHRoZSBzYW1lIGNsb2NrLiBTcGVjaWZpY2FsbHksIFdhbGxUaW1lIHNob3VsZCBiZSB1c2VkIGlu
IGFncmVlbWVudCB3aXRoIHRoZQorLy8gcHJpbmNpcGxlIHRoYXQgV2FsbFRpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSBpcyB0aGUgc2FtZSBhcyBXVEY6OmN1cnJlbnRUaW1l
KCkuCitjbGFzcyBXYWxsVGltZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IENsb2NrVHlw
ZSBjbG9ja1R5cGUgPSBDbG9ja1R5cGU6OldhbGw7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUg
ZXBvY2guIFNvLCB4LnNlY29uZHNTaW5jZUVwb2NoKCkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHgg
LSBXYWxsVGltZSgpLgorICAgIFdhbGxUaW1lKCkgeyB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIGRvdWJsZSByZXByZXNlbnRzIHRpbWUgYWNj
b3JkaW5nIHRvCisgICAgLy8gV1RGOjpjdXJyZW50VGltZSgpLiBJdCBtdXN0IGJlIGluIHNlY29u
ZHMgYW5kIGl0IG11c3QgYmUgZnJvbSB0aGUgc2FtZSB0aW1lIHNvdXJjZS4KKyAgICBzdGF0aWMg
V2FsbFRpbWUgZnJvbVJhd1NlY29uZHMoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgV2Fs
bFRpbWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFdhbGxUaW1lIG5vdygpOworICAgIAorICAgIHN0YXRpYyBXYWxsVGltZSBpbmZpbml0eSgpIHsg
cmV0dXJuIGZyb21SYXdTZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5p
dHkoKSk7IH0KKyAgICAKKyAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyBy
ZXR1cm4gU2Vjb25kcyhtX3ZhbHVlKTsgfQorICAgIAorICAgIFdhbGxUaW1lIGFwcHJveGltYXRl
V2FsbFRpbWUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBNb25vdG9uaWNUaW1lIGFwcHJveGltYXRlTW9ub3RvbmljVGltZSgpIGNvbnN0OworICAgIAor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0K
KyAgICAKKyAgICBXYWxsVGltZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcyhtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIFdhbGxUaW1lIG9wZXJhdG9yLShTZWNvbmRzIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb21SYXdTZWNvbmRzKG1fdmFsdWUgLSBvdGhlci52
YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGltZSBpcyBhIHNjYWxhciBhbmQgc2NhbGFy
cyBjYW4gYmUgbmVnYXRlZCBhcyB0aGlzIGNvdWxkIGFyaXNlIGZyb20gYWxnZWJyYWljCisgICAg
Ly8gdHJhbnNmb3JtYXRpb25zLiBTbywgd2UgYWxsb3cgaXQuCisgICAgV2FsbFRpbWUgb3BlcmF0
b3ItKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25kcygtbV92YWx1
ZSk7CisgICAgfQorICAgIAorICAgIFdhbGxUaW1lJiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIp
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOworICAgIH0KKyAg
ICAKKyAgICBXYWxsVGltZSYgb3BlcmF0b3ItPShTZWNvbmRzIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgU2Vjb25k
cyBvcGVyYXRvci0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
U2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I9PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
PShXYWxsVGltZSBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9
IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFdhbGxUaW1l
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPihXYWxsVGltZSBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjw9KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcj49KFdhbGxUaW1lIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKK307CisKK1dURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHNsZWVwKFdhbGxUaW1lKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
V2FsbFRpbWU7CisKKyNlbmRpZiAvLyBXVEZfV2FsbFRpbWVfaApJbmRleDogU291cmNlL1dURi93
dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291
cmNlL1dURi93dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1
LDEzICs0NSwxNCBAQCB2b2lkIEJpbmFyeVNlbWFwaG9yZTo6c2lnbmFsKCkKICAgICBtX2NvbmRp
dGlvbi5zaWduYWwoKTsKIH0KIAotYm9vbCBCaW5hcnlTZW1hcGhvcmU6OndhaXQoZG91YmxlIGFi
c29sdXRlVGltZSkKK2Jvb2wgQmluYXJ5U2VtYXBob3JlOjp3YWl0KFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSBhYnNvbHV0ZVRpbWUpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OwogCiAgICAgYm9vbCB0aW1lZE91dCA9IGZhbHNlOwogICAgIHdoaWxlICghbV9pc1NldCkgewot
ICAgICAgICB0aW1lZE91dCA9ICFtX2NvbmRpdGlvbi50aW1lZFdhaXQobV9tdXRleCwgYWJzb2x1
dGVUaW1lKTsKKyAgICAgICAgdGltZWRPdXQgPSAhbV9jb25kaXRpb24udGltZWRXYWl0KAorICAg
ICAgICAgICAgbV9tdXRleCwgYWJzb2x1dGVUaW1lLmFwcHJveGltYXRlV2FsbFRpbWUoKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwogICAgICAgICBpZiAodGltZWRPdXQpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvdGhyZWFkcy9C
aW5hcnlTZW1hcGhvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90aHJlYWRzL0Jp
bmFyeVNlbWFwaG9yZS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV1RGL3d0Zi90aHJl
YWRzL0JpbmFyeVNlbWFwaG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQ
cmltaXRpdmVzLmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgog
CiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzksNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIH5CaW5hcnlTZW1hcGhvcmUoKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNpZ25hbCgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHdhaXQoZG91Ymxl
IGFic29sdXRlVGltZSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgd2FpdChUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUpOwogCiBwcml2YXRlOgogICAgIGJvb2wgbV9pc1NldDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTExLTA0ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNob3VsZCBzdG9w
IHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9uIGNhc3RzIGFy
ZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisK
KyAgICAgICAgTm8gbmV3IGxheW91dCB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4gVGhl
IG5ldyBXVEYgdGltZSBjbGFzc2VzIGhhdmUgc29tZSB1bml0IHRlc3RzCisgICAgICAgIGluIFRl
c3RXZWJLaXRBUEkuCisKKyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6YmxvYlNpemUp
OgorICAgICAgICAqIHBsYXRmb3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZFRpbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkVGltZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFRpbWVyczo6dXBkYXRlU2hhcmVkVGltZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2NmL01haW5UaHJlYWRTaGFyZWRUaW1lckNGLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvTWFpblRocmVhZFNoYXJlZFRpbWVyRWZsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwp
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUpOgorCiAyMDE2LTExLTAzICBSeWFuIEhhZGRhZCAg
PHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyMDgzMDIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVn
aXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3
ICsxNTAsNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgVGhyZWFkYWJsZUJsb2JSZWdpc3RyCiAgICAg
ICAgICAgICByZXN1bHRTaXplID0gYmxvYlJlZ2lzdHJ5KCkuYmxvYlNpemUodXJsKTsKICAgICAg
ICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICAgICAgfSk7Ci0gICAgICAgIHNlbWFwaG9y
ZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworICAgICAgICBzZW1h
cGhvcmUud2FpdChXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHRTaXplOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWFpblRocmVhZFNoYXJl
ZFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWFpblRocmVh
ZFNoYXJlZFRpbWVyLmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
TWFpblRocmVhZFNoYXJlZFRpbWVyJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgc2V0RmlyZWRG
dW5jdGlvbihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRG
aXJlSW50ZXJ2YWwoZG91YmxlKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEZpcmVJbnRlcnZhbChT
ZWNvbmRzKSBvdmVycmlkZTsKICAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKICAgICB2b2lkIGlu
dmFsaWRhdGUoKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRU
aW1lci5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlZEZ1
bmN0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CiAKICAgICAvLyBUaGUgZmlyZSBp
bnRlcnZhbCBpcyBpbiBzZWNvbmRzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vbm90b25pYyBj
bG9jayB0aW1lLgotICAgIHZpcnR1YWwgdm9pZCBzZXRGaXJlSW50ZXJ2YWwoZG91YmxlKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVJbnRlcnZhbChTZWNvbmRzKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIHsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCShyZXZpc2lv
biAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRUaW1lcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBUaHJlYWRUaW1lcnM6OnVwZGF0ZVNoYXJlZFRpbWVyKCkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gCiAgICAgICAgIG1fcGVuZGluZ1No
YXJlZFRpbWVyRmlyZVRpbWUgPSBuZXh0RmlyZVRpbWU7Ci0gICAgICAgIG1fc2hhcmVkVGltZXIt
PnNldEZpcmVJbnRlcnZhbChzdGQ6Om1heChuZXh0RmlyZVRpbWUgLSBjdXJyZW50TW9ub3Rvbmlj
VGltZSwgMC4wKSk7CisgICAgICAgIG1fc2hhcmVkVGltZXItPnNldEZpcmVJbnRlcnZhbChTZWNv
bmRzKHN0ZDo6bWF4KG5leHRGaXJlVGltZSAtIGN1cnJlbnRNb25vdG9uaWNUaW1lLCAwLjApKSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9NYWluVGhyZWFk
U2hhcmVkVGltZXJDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvTWFpblRocmVhZFNoYXJlZFRpbWVyQ0YuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9NYWluVGhyZWFkU2hhcmVkVGltZXJDRi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEw
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsMTEgKzkzLDExIEBAIHZvaWQgTWFpblRocmVhZFNoYXJl
ZFRpbWVyOjppbnZhbGlkYXRlKCkKICAgICBzaGFyZWRUaW1lciA9IG51bGxwdHI7CiB9CiAKLXZv
aWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFs
KQordm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGlu
dGVydmFsKQogewogICAgIEFTU0VSVChtX2ZpcmVkRnVuY3Rpb24pOwogCi0gICAgQ0ZBYnNvbHV0
ZVRpbWUgZmlyZURhdGUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGludGVydmFsOwor
ICAgIENGQWJzb2x1dGVUaW1lIGZpcmVEYXRlID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
KyBpbnRlcnZhbC52YWx1ZSgpOwogICAgIGlmICghc2hhcmVkVGltZXIpIHsKICAgICAgICAgc2hh
cmVkVGltZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShudWxscHRyLCBmaXJlRGF0ZSwga0NGVGlt
ZUludGVydmFsRGlzdGFudEZ1dHVyZSwgMCwgMCwgdGltZXJGaXJlZCwgbnVsbHB0cik7CiAjaWYg
UExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL01haW5UaHJl
YWRTaGFyZWRUaW1lckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1lckVmbC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAgICAgIChDKSAyMDA4IEFm
b25zbyBSYWJlbG8gQ29zdGEgSnIuCiAgKiAgICAgICAgICAgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcwogICogICAgICAgICAgIChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsMTAgKzU0LDEw
IEBAIHZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzdG9wKCkKICAgICB9CiB9CiAKLXZvaWQg
TWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQor
dm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbChTZWNvbmRzIGludGVy
dmFsKQogewogICAgIHN0b3AoKTsKLSAgICBzaGFyZWRUaW1lciA9IGVjb3JlX3RpbWVyX2xvb3Bf
YWRkKGludGVydmFsLCB0aW1lckV2ZW50LCBudWxscHRyKTsKKyAgICBzaGFyZWRUaW1lciA9IGVj
b3JlX3RpbWVyX2xvb3BfYWRkKGludGVydmFsLnZhbHVlKCksIHRpbWVyRXZlbnQsIG51bGxwdHIp
OwogfQogCiB2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6aW52YWxpZGF0ZSgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFyZWRUaW1lckdMaWIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvTWFpblRocmVhZFNo
YXJlZFRpbWVyR0xpYi5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dsaWIvTWFpblRocmVhZFNoYXJlZFRpbWVyR0xpYi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAt
MzksMTAgKzM5LDEwIEBAIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6TWFpblRocmVhZFNoYXJlZFQK
ICAgICBtX3RpbWVyLnNldFByaW9yaXR5KEdfUFJJT1JJVFlfSElHSF9JRExFICsgMjApOwogfQog
Ci12b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0RmlyZUludGVydmFsKGRvdWJsZSBpbnRl
cnZhbCkKK3ZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzZXRGaXJlSW50ZXJ2YWwoU2Vjb25k
cyBpbnRlcnZhbCkKIHsKICAgICBBU1NFUlQobV9maXJlZEZ1bmN0aW9uKTsKLSAgICBtX3RpbWVy
LnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoaW50ZXJ2
YWwudmFsdWUoKSk7CiB9CiAKIHZvaWQgTWFpblRocmVhZFNoYXJlZFRpbWVyOjpzdG9wKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhyZWFkU2hhcmVkVGltZXJXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NYWluVGhyZWFk
U2hhcmVkVGltZXJXaW4uY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vTWFpblRocmVhZFNoYXJlZFRpbWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEyMSwxMiArMTIxLDEyIEBAIHN0YXRpYyB2b2lkIE5UQVBJIHF1ZXVlVGltZXJQcm9jKFBWT0lE
LCAKICAgICAgICAgUG9zdE1lc3NhZ2UodGltZXJXaW5kb3dIYW5kbGUsIHRpbWVyRmlyZWRNZXNz
YWdlLCAwLCAwKTsKIH0KIAotdm9pZCBNYWluVGhyZWFkU2hhcmVkVGltZXI6OnNldEZpcmVJbnRl
cnZhbChkb3VibGUgaW50ZXJ2YWwpCit2b2lkIE1haW5UaHJlYWRTaGFyZWRUaW1lcjo6c2V0Rmly
ZUludGVydmFsKFNlY29uZHMgaW50ZXJ2YWxJblNlY29uZHMpCiB7CiAgICAgQVNTRVJUKG1fZmly
ZWRGdW5jdGlvbik7CiAKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBpbnRlcnZhbEluU2Vjb25kcy5t
aWxsaXNlY29uZHMoKTsKICAgICB1bnNpZ25lZCBpbnRlcnZhbEluTVM7Ci0gICAgaW50ZXJ2YWwg
Kj0gMTAwMDsKICAgICBpZiAoaW50ZXJ2YWwgPiBVU0VSX1RJTUVSX01BWElNVU0pCiAgICAgICAg
IGludGVydmFsSW5NUyA9IFVTRVJfVElNRVJfTUFYSU1VTTsKICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC00OSwxNiArNTAsMTYgQEAgY2xhc3MgV29ya2VyU2hhcmVkVGltZXIgZmluYWwgOiBwdWJsaWMg
UwogcHVibGljOgogICAgIC8vIFNoYXJlZFRpbWVyIGludGVyZmFjZS4KICAgICB2b2lkIHNldEZp
cmVkRnVuY3Rpb24oc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pIG92ZXJyaWRlIHsg
bV9zaGFyZWRUaW1lckZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbik7IH0KLSAgICB2b2lkIHNl
dEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUg
PSBpbnRlcnZhbCArIGN1cnJlbnRUaW1lKCk7IH0KLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZSB7
IG1fbmV4dEZpcmVUaW1lID0gMDsgfQorICAgIHZvaWQgc2V0RmlyZUludGVydmFsKFNlY29uZHMg
aW50ZXJ2YWwpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRlcnZhbCArIFdhbGxUaW1l
Ojpub3coKTsgfQorICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlIHsgbV9uZXh0RmlyZVRpbWUgPSBX
YWxsVGltZSgpOyB9CiAKICAgICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gbV9zaGFyZWRUaW1l
ckZ1bmN0aW9uICYmIG1fbmV4dEZpcmVUaW1lOyB9Ci0gICAgZG91YmxlIGZpcmVUaW1lKCkgeyBy
ZXR1cm4gbV9uZXh0RmlyZVRpbWU7IH0KKyAgICBXYWxsVGltZSBmaXJlVGltZSgpIHsgcmV0dXJu
IG1fbmV4dEZpcmVUaW1lOyB9CiAgICAgdm9pZCBmaXJlKCkgeyBtX3NoYXJlZFRpbWVyRnVuY3Rp
b24oKTsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3NoYXJlZFRp
bWVyRnVuY3Rpb247Ci0gICAgZG91YmxlIG1fbmV4dEZpcmVUaW1lIHsgMCB9OworICAgIFdhbGxU
aW1lIG1fbmV4dEZpcmVUaW1lOwogfTsKIAogY2xhc3MgTW9kZVByZWRpY2F0ZSB7CkBAIC0xNTcs
MTUgKzE1OCwxNiBAQCBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1CiAg
ICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihtYWluQ29udGV4dCwgRkFMU0UpOwogI2Vu
ZGlmCiAKLSAgICBkb3VibGUgZGVhZGxpbmUgPSBNZXNzYWdlUXVldWU8VGFzaz46OmluZmluaXRl
VGltZSgpOworICAgIFdhbGxUaW1lIGRlYWRsaW5lID0gV2FsbFRpbWU6OmluZmluaXR5KCk7CiAK
ICNpZiBVU0UoQ0YpCiAgICAgQ0ZBYnNvbHV0ZVRpbWUgbmV4dENGUnVuTG9vcFRpbWVyRmlyZURh
dGUgPSBDRlJ1bkxvb3BHZXROZXh0VGltZXJGaXJlRGF0ZShDRlJ1bkxvb3BHZXRDdXJyZW50KCks
IGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiAgICAgZG91YmxlIHRpbWVVbnRpbE5leHRDRlJ1bkxv
b3BUaW1lckluU2Vjb25kcyA9IG5leHRDRlJ1bkxvb3BUaW1lckZpcmVEYXRlIC0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCk7Ci0gICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSgpICsgc3RkOjpt
YXgoMC4wLCB0aW1lVW50aWxOZXh0Q0ZSdW5Mb29wVGltZXJJblNlY29uZHMpOworICAgIGRlYWRs
aW5lID0gV2FsbFRpbWU6Om5vdygpICsgc3RkOjptYXgoCisgICAgICAgIFNlY29uZHMoMCksIFNl
Y29uZHModGltZVVudGlsTmV4dENGUnVuTG9vcFRpbWVySW5TZWNvbmRzKSk7CiAjZW5kaWYKIAot
ICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWUgPSAwLjA7CisgICAgV2FsbFRpbWUgYWJzb2x1dGVUaW1l
OwogICAgIGlmICh3YWl0TW9kZSA9PSBXYWl0Rm9yTWVzc2FnZSkgewogICAgICAgICBpZiAocHJl
ZGljYXRlLmlzRGVmYXVsdE1vZGUoKSAmJiBtX3NoYXJlZFRpbWVyLT5pc0FjdGl2ZSgpKQogICAg
ICAgICAgICAgYWJzb2x1dGVUaW1lID0gc3RkOjptaW4oZGVhZGxpbmUsIG1fc2hhcmVkVGltZXIt
PmZpcmVUaW1lKCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTYt
MTEtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEY6OlBh
cmtpbmdMb3Qgc2hvdWxkIHN0b3AgdXNpbmcgc3RkOjpjaHJvbm8gYmVjYXVzZSBzdGQ6OmNocm9u
bzo6ZHVyYXRpb24gY2FzdHMgYXJlIHByb25lIHRvIG92ZXJmbG93cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMDQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQW5keSBFc3Rlcy4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNw
cDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6U3luY01lc3NhZ2VTdGF0ZTo6d2FpdCk6Cisg
ICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRNZXNzYWdlKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6dGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcpOgorICAg
ICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNv
bm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246Ondh
aXRGb3JTeW5jUmVwbHkpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmg6Cisg
ICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnNlbmRTeW5jKToKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHkpOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9NZXNzYWdlU2VuZGVyLmg6CisgICAgICAgIChJUEM6Ok1lc3NhZ2VTZW5kZXI6OnNlbmRT
eW5jKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJveHkuaDoKKyAgICAgICAg
KFdlYktpdDo6Q2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQcm94eTo6c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGxpY2F0aW9uV2lsbFRl
cm1pbmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5Lm1tOgorICAgICAgICAoLVtXS09uZVNob3REaXNwbGF5TGlua0hhbmRsZXIg
ZGlzcGxheUxpbmtGaXJlZDpdKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eTo6Y29tbWl0TGF5ZXJUcmVlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVmcmVzaERpc3BsYXkpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yRGlkVXBkYXRl
QWN0aXZpdHlTdGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYVByb3h5Ojp3YWl0Rm9yRGlkVXBkYXRlQWN0aXZpdHlTdGF0ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9XS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW06CisgICAg
ICAgICgtW1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBpbW1lZGlhdGVBY3Rpb25SZWNvZ25p
emVyV2lsbEJlZ2luQW5pbWF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0cmluZ1NlbGVj
dGlvbkZvclBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRhdGFT
ZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpy
ZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6YWNjZXB0c0ZpcnN0TW91c2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q2hyb21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDaHJvbWVDbGllbnQ6OnByaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JSZXNwb25zZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGlu
Zyk6CisKIDIwMTYtMTEtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUHJpbnRpbmcgdG8gUERGIHNob3VsZCBwcm9kdWNlIGludGVybmFsIGxpbmtz
IHdoZW4gSFRNTCBoYXMgaW50ZXJuYWwgbGlua3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw3ICs3Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV93YWl0Rm9yU3luY1JlcGx5U2VtYXBob3JlLnNpZ25hbCgp
OwogICAgIH0KIAotICAgIGJvb2wgd2FpdChkb3VibGUgYWJzb2x1dGVUaW1lKQorICAgIGJvb2wg
d2FpdChUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgYWJzb2x1dGVUaW1lKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fd2FpdEZvclN5bmNSZXBseVNlbWFwaG9yZS53YWl0KGFic29sdXRlVGltZSk7
CiAgICAgfQpAQCAtMzc2LDcgKzM3Niw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2Uo
c3RkOjp1bmlxdWUKICAgICAgICAgYXV0byB3cmFwcGVkTWVzc2FnZSA9IGNyZWF0ZVN5bmNNZXNz
YWdlRW5jb2RlcigiSVBDIiwgIldyYXBwZWRBc3luY01lc3NhZ2VGb3JUZXN0aW5nIiwgZW5jb2Rl
ci0+ZGVzdGluYXRpb25JRCgpLCBzeW5jUmVxdWVzdElEKTsKICAgICAgICAgd3JhcHBlZE1lc3Nh
Z2UtPnNldEZ1bGx5U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZygpOwogICAgICAgICB3cmFwcGVk
TWVzc2FnZS0+d3JhcEZvclRlc3RpbmcoV1RGTW92ZShlbmNvZGVyKSk7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPihzZW5kU3luY01lc3NhZ2Uoc3luY1JlcXVlc3RJRCwgV1RGTW92
ZSh3cmFwcGVkTWVzc2FnZSksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCB7IH0p
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHNlbmRTeW5jTWVzc2FnZShzeW5j
UmVxdWVzdElELCBXVEZNb3ZlKHdyYXBwZWRNZXNzYWdlKSwgU2Vjb25kczo6aW5maW5pdHkoKSwg
eyB9KSk7CiAgICAgfQogCiAgICAgaWYgKHNlbmRPcHRpb25zLmNvbnRhaW5zKFNlbmRPcHRpb246
OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSkKQEAgLTQyMCwxMiAr
NDIwLDEyIEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZFN5bmNSZXBseShzdGQ6OnVuaXEKICAgICBy
ZXR1cm4gc2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgeyB9KTsKIH0KIAotc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyBDb25uZWN0aW9uOjp0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVv
dXRzRm9yVGVzdGluZyhzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQpIGNvbnN0CitT
ZWNvbmRzIENvbm5lY3Rpb246OnRpbWVvdXRSZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0
aW5nKFNlY29uZHMgdGltZW91dCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pZ25vcmVUaW1lb3V0
c0ZvclRlc3RpbmcgPyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSA6IHRpbWVvdXQ7
CisgICAgcmV0dXJuIG1faWdub3JlVGltZW91dHNGb3JUZXN0aW5nID8gU2Vjb25kczo6aW5maW5p
dHkoKSA6IHRpbWVvdXQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9u
Ojp3YWl0Rm9yTWVzc2FnZShTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0
Rm9yT3B0aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9y
TWVzc2FnZShTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgU3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQs
IE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00NjksMTAgKzQ2OSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWkKICAgICAgICAgbV93YWl0aW5nRm9yTWVzc2FnZSA9
ICZ3YWl0aW5nRm9yTWVzc2FnZTsKICAgICB9CiAKLSAgICAvLyBDbGFtcCB0aGUgdGltZW91dCB0
byBob3dldmVyIG11Y2ggdGltZSBpcyByZW1haW5pbmcgb24gb3VyIGNsb2NrLgotICAgIGF1dG8g
bm93ID0gQ29uZGl0aW9uOjpDbG9jazo6bm93KCk7Ci0gICAgYXV0byByZW1haW5pbmdDbG9ja1Rp
bWUgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
PihDb25kaXRpb246OkNsb2NrOjp0aW1lX3BvaW50OjptYXgoKSAtIG5vdyk7Ci0gICAgYXV0byBh
YnNvbHV0ZVRpbWVvdXQgPSBub3cgKyBzdGQ6Om1pbihyZW1haW5pbmdDbG9ja1RpbWUsIHRpbWVv
dXQpOworICAgIE1vbm90b25pY1RpbWUgYWJzb2x1dGVUaW1lb3V0ID0gTW9ub3RvbmljVGltZTo6
bm93KCkgKyB0aW1lb3V0OwogCiAgICAgLy8gTm93IHdhaXQgZm9yIGl0IHRvIGJlIHNldC4KICAg
ICB3aGlsZSAodHJ1ZSkgewpAQCAtNDk2LDcgKzQ5Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEZWNv
ZGVyPiBDb25uZWN0aW9uOjp3YWkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbmRTeW5jTWVzc2FnZSh1aW50NjRfdCBzeW5j
UmVxdWVzdElELCBzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2Rlciwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5j
T3B0aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjpzZW5kU3luY01l
c3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVu
Y29kZXIsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3lu
Y09wdGlvbnMpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNTQxLDEw
ICs1MzgsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OnNlbgogICAg
IHJldHVybiByZXBseTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246
OndhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3luY1JlcXVlc3RJRCwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0
aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBDb25uZWN0aW9uOjp3YWl0Rm9yU3luY1Jl
cGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIFNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCiB7CiAgICAgdGltZW91dCA9IHRpbWVvdXRS
ZXNwZWN0aW5nSWdub3JlVGltZW91dHNGb3JUZXN0aW5nKHRpbWVvdXQpOwotICAgIGRvdWJsZSBh
YnNvbHV0ZVRpbWUgPSBjdXJyZW50VGltZSgpICsgKHRpbWVvdXQuY291bnQoKSAvIDEwMDAuMCk7
CisgICAgV2FsbFRpbWUgYWJzb2x1dGVUaW1lID0gV2FsbFRpbWU6Om5vdygpICsgdGltZW91dDsK
IAogICAgIHdpbGxTZW5kU3luY01lc3NhZ2Uoc2VuZFN5bmNPcHRpb25zKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMjA4MzU4
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKQEAgLTE2NiwxMyArMTY2LDEzIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGJvb2wgc2VuZChUJiYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgT3B0
aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zID0geyB9KTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIHNlbmRXaXRoUmVwbHkoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIEZ1bmN0aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNwYXRjaGVyLCBGdW5jdGlvbjx2b2lk
IChPcHRpb25hbDx0eXBlbmFtZSBDb2RpbmdUeXBlPHR5cGVuYW1lIFQ6OlJlcGx5Pjo6VHlwZT4p
PiYmIHJlcGx5SGFuZGxlcik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3lu
YyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGlu
YXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kczo6bWF4KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zID0geyB9KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHdhaXRGb3JBbmRE
aXNwYXRjaEltbWVkaWF0ZWx5KHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFdhaXRGb3JPcHRpb24+IHdhaXRGb3JPcHRp
b25zID0geyB9KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5hdGlv
bklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0
aW9ucyA9IHsgfSk7CiAKICAgICBib29sIHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNv
ZGVyPiwgT3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zKTsKICAgICB2b2lkIHNlbmRN
ZXNzYWdlV2l0aFJlcGx5KHVpbnQ2NF90IHJlcXVlc3RJRCwgc3RkOjp1bmlxdWVfcHRyPEVuY29k
ZXI+LCBGdW5jdGlvbkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248dm9pZCAo
c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+KT4mJiByZXBseUhhbmRsZXIpOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxFbmNvZGVyPiBjcmVhdGVTeW5jTWVzc2FnZUVuY29kZXIoU3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0
X3QgZGVzdGluYXRpb25JRCwgdWludDY0X3QmIHN5bmNSZXF1ZXN0SUQpOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxEZWNvZGVyPiBzZW5kU3luY01lc3NhZ2UodWludDY0X3Qgc3luY1JlcXVlc3RJRCwg
c3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVv
dXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gc2VuZFN5bmNNZXNzYWdlKHVpbnQ2NF90IHN5bmNSZXF1ZXN0
SUQsIHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8
U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyk7CiAgICAgYm9vbCBzZW5kU3luY1JlcGx5
KHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPik7CiAKICAgICB2b2lkIHdha2VVcFJ1bkxvb3AoKTsK
QEAgLTIwOCw5ICsyMDgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXpl
KElkZW50aWZpZXIpOwogICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CiAgICAgCi0gICAg
c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHdhaXRGb3JNZXNzYWdlKFN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUsIHVpbnQ2NF90
IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9u
U2V0PFdhaXRGb3JPcHRpb24+KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gd2FpdEZv
ck1lc3NhZ2UoU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIFN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0
LCBPcHRpb25TZXQ8V2FpdEZvck9wdGlvbj4pOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxE
ZWNvZGVyPiB3YWl0Rm9yU3luY1JlcGx5KHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQsIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IHdhaXRGb3JTeW5jUmVwbHkodWludDY0X3Qgc3lu
Y1JlcXVlc3RJRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsK
IAogICAgIC8vIENhbGxlZCBvbiB0aGUgY29ubmVjdGlvbiB3b3JrIHF1ZXVlLgogICAgIHZvaWQg
cHJvY2Vzc0luY29taW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4pOwpAQCAtMjM4
LDcgKzIzOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsU2VuZFN5bmNNZXNzYWdlKE9wdGlv
blNldDxTZW5kU3luY09wdGlvbj4pOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNSZXBseShPcHRp
b25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKIAotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
dGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3Rpbmcoc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcykgY29uc3Q7CisgICAgU2Vjb25kcyB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRp
bWVvdXRzRm9yVGVzdGluZyhTZWNvbmRzKSBjb25zdDsKICAgICAKICAgICBDbGllbnQmIG1fY2xp
ZW50OwogICAgIGJvb2wgbV9pc1NlcnZlcjsKQEAgLTM2NSw3ICszNjUsNyBAQCB2b2lkIENvbm5l
Y3Rpb246OnNlbmRXaXRoUmVwbHkoVCYmIG1lc3NhCiAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1l
IFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMgdGltZW91dCwgT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09w
dGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENvbm5lY3Rpb246OnNlbmRTeW5jKFQm
JiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlv
bklELCBTZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJUKFQ6OmlzU3luYywgU3luY01lc3NhZ2VFeHBl
Y3RlZCk7CiAKQEAgLTM4OSw3ICszODksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIENv
bm5lY3Rpb246OnNlCiAgICAgcmV0dXJuIHJlcGx5RGVjb2Rlci0+ZGVjb2RlKHJlcGx5KTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBDb25uZWN0aW9uOjp3YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseSh1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxXYWl0Rm9yT3B0aW9uPiB3YWl0Rm9yT3B0aW9ucykK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgQ29ubmVjdGlvbjo6d2FpdEZvckFuZERpc3BhdGNo
SW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgU2Vjb25kcyB0aW1lb3V0LCBPcHRp
b25TZXQ8V2FpdEZvck9wdGlvbj4gd2FpdEZvck9wdGlvbnMpCiB7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+IGRlY29kZXIgPSB3YWl0Rm9yTWVzc2FnZShUOjpyZWNlaXZlck5hbWUoKSwg
VDo6bmFtZSgpLCBkZXN0aW5hdGlvbklELCB0aW1lb3V0LCB3YWl0Rm9yT3B0aW9ucyk7CiAgICAg
aWYgKCFkZWNvZGVyKQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL01lc3NhZ2VT
ZW5kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvTWVzc2Fn
ZVNlbmRlci5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9J
UEMvTWVzc2FnZVNlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBzZW5kU3luYyhUJiYg
bWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiByZXBseSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyB0aW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIE9wdGlvblNl
dDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zID0geyB9KQorICAgIGJvb2wgc2VuZFN5
bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIFNlY29uZHMgdGltZW91
dCA9IFNlY29uZHM6OmluZmluaXR5KCksIE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5
bmNPcHRpb25zID0geyB9KQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChUOjppc1N5bmMs
ICJNZXNzYWdlIGlzIG5vdCBzeW5jISIpOwogCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgc2VuZFN5bmMoVCYmIG1l
c3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQs
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM6Om1heCgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9
IHsgfSkKKyAgICBib29sIHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYm
IHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRz
OjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9
IHsgfSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpKTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWFQcm94eS5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6
OndhaXRGbwogICAgIC8vIGNob29zZSB0aGUgbW9zdCByZWNlbnQgb25lLCBvciB0aGUgb25lIHRo
YXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBzaXplLgogCiAgICAgLy8gVGhlIHRpbWVvdXQs
IGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFza2VkIHRvIHBhaW50LgotICAgIG1fd2ViUGFn
ZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0
ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0
ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAw
KSk7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+d2FpdEZvckFu
ZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlPihtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgU2Vjb25kczo6ZnJv
bU1pbGxpc2Vjb25kcyg1MDApKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHk6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYgbGF5ZXJUcmVlQ29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaGls
ZFByb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
aGlsZFByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ2hpbGRQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw3ICs0NCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gYm9vbCBzZW5kKFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25T
ZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhUJiYgbWVzc2FnZSwgdHlwZW5hbWUgVDo6UmVwbHkmJiwg
dWludDY0X3QgZGVzdGluYXRpb25JRCwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lb3V0
ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMSksIE9wdGlvblNldDxJUEM6OlNlbmRTeW5jT3B0aW9u
PiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
c2VuZFN5bmMoVCYmIG1lc3NhZ2UsIHR5cGVuYW1lIFQ6OlJlcGx5JiYsIHVpbnQ2NF90IGRlc3Rp
bmF0aW9uSUQsIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHMoMSksIE9wdGlvblNldDxJUEM6OlNl
bmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMgPSB7IH0pOwogCiAgICAgSVBDOjpDb25uZWN0
aW9uKiBjb25uZWN0aW9uKCkgY29uc3QKICAgICB7CkBAIC0xMDIsNyArMTAyLDcgQEAgYm9vbCBD
aGlsZFByb2Nlc3NQcm94eTo6c2VuZChUJiYgbWVzc2FnZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiAKLWJvb2wgQ2hpbGRQcm9jZXNzUHJveHk6OnNlbmRTeW5jKFUmJiBtZXNzYWdlLCB0eXBl
bmFtZSBVOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHRpbWVvdXQsIE9wdGlvblNldDxJUEM6OlNlbmRTeW5jT3B0aW9uPiBz
ZW5kU3luY09wdGlvbnMpCitib29sIENoaWxkUHJvY2Vzc1Byb3h5OjpzZW5kU3luYyhVJiYgbWVz
c2FnZSwgdHlwZW5hbWUgVTo6UmVwbHkmJiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
U2Vjb25kcyB0aW1lb3V0LCBPcHRpb25TZXQ8SVBDOjpTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zKQogewogICAgIENPTVBJTEVfQVNTRVJUKFU6OmlzU3luYywgU3luY01lc3NhZ2VFeHBl
Y3RlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSArNzEsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKIAogICAgIC8v
IFRoZSB0aW1lb3V0IHdlIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlR2VvbWV0cnkg
bWVzc2FnZS4KLSAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KCkgeyByZXR1cm4gc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyg1MDApOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGRpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpIHsgcmV0dXJuIFNlY29uZHM6OmZyb21NaWxs
aXNlY29uZHMoNTAwKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHdhaXRGb3JQb3NzaWJsZUdlb21l
dHJ5VXBkYXRlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgPSBkaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZVRpbWVvdXQoKSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JQb3NzaWJsZUdl
b21ldHJ5VXBkYXRlKFNlY29uZHMgPSBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRpbWVvdXQo
KSkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY29sb3JTcGFjZURpZENoYW5nZSgpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBtaW5pbXVtTGF5b3V0U2l6ZURpZENoYW5nZSgpIHsgfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIw
ODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNl
bmRQcm9jZXNzV2lsbFN1cwogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGhhbmRsZWQgPSBm
YWxzZTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseSgpLCBNZXNzYWdlczo6V2ViUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDEpKTsK
KyAgICBzZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1t
aW5lbnRseSgpLCBNZXNzYWdlczo6V2ViUHJvY2Vzczo6UHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIFNlY29uZHMoMSkpOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6c2VuZFByZXBhcmVUb1N1c3BlbmQoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEz
LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcAogICAgICAgICAv
LyBNYWtlIHN1cmUgYW55IG9uZ29pbmcgd29yayBpbiBvdXIgcXVldWUgaXMgZmluaXNoZWQgYmVm
b3JlIHdlIHRlcm1pbmF0ZS4KICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH0pOwot
ICAgIHNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwor
ICAgIHNlbWFwaG9yZS53YWl0KFdhbGxUaW1lOjppbmZpbml0eSgpKTsKIH0KIAogU3RyaW5nIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyc2lzdGVudFN0b3JhZ2VQYXRoKGNvbnN0
IFN0cmluZyYgbGFiZWwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjA4
MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2VuZFByb2Nlc3NXaWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBoYW5k
bGVkID0gZmFsc2U7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCksIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJv
Y2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseTo6UmVwbHkoaGFuZGxlZCksIDAsIHN0ZDo6Y2hyb25v
OjpzZWNvbmRzKDEpKTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlBy
b2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKSwgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
cm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5OjpSZXBseShoYW5kbGVkKSwgMCwgU2Vjb25kcygx
KSk7CiB9CiAgICAgCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRQcmVwYXJlVG9TdXNw
ZW5kKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NDMsNyAr
ODQzLDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6YXBwbGljYXRpb25XaWxsVGVybQogCiAgICAg
ICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKLSAgICBzZW1hcGhvcmUud2FpdChzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICBzZW1hcGhvcmUud2FpdChXYWxs
VGltZTo6aW5maW5pdHkoKSk7CiB9CiAKIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYSogU3Rv
cmFnZU1hbmFnZXI6OmZpbmRTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjc4LDcgKzY3OCw3IEBAIC0gKE5TVUludGVnZXIpX3drX3BhZ2VDb3VudEZvclByaW50Rm9y
bWEKIC0gKENHUERGRG9jdW1lbnRSZWYpX3drX3ByaW50ZWREb2N1bWVudAogewogICAgIGlmIChf
aXNQcmludGluZ1RvUERGKSB7Ci0gICAgICAgIGlmICghX3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0
aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRyYXdUb1BERkNhbGxiYWNrPihfcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM6Om1heCgpKSkgeworICAgICAgICBpZiAoIV9wYWdlLT5wcm9jZXNzKCkuY29ubmVj
dGlvbigpLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEcmF3VG9QREZDYWxsYmFjaz4oX3BhZ2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0
eSgpKSkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5bmNocm9uaXplRHluYW1p
Y1ZpZQogICAgICAgICBkb3VibGUgbmV3U2NhbGU7CiAgICAgICAgIEZsb2F0UG9pbnQgbmV3U2Ny
b2xsUG9zaXRpb247CiAgICAgICAgIHVpbnQ2NF90IG5leHRWYWxpZExheWVyVHJlZVRyYW5zYWN0
aW9uSUQ7Ci0gICAgICAgIGlmIChtX3Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTeW5jaHJvbml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZSgpLCBNZXNzYWdlczo6V2ViUGFnZTo6
U3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGU6OlJlcGx5KG5ld1NjYWxlLCBuZXdTY3Jv
bGxQb3NpdGlvbiwgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCksIG1fcGFnZUlELCBz
dGQ6OmNocm9ubzo6c2Vjb25kcygyKSkpIHsKKyAgICAgICAgaWYgKG1fcHJvY2Vzcy0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlN5bmNocm9uaXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlKCks
IE1lc3NhZ2VzOjpXZWJQYWdlOjpTeW5jaHJvbml6ZUR5bmFtaWNWaWV3cG9ydFVwZGF0ZTo6UmVw
bHkobmV3U2NhbGUsIG5ld1Njcm9sbFBvc2l0aW9uLCBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2Fj
dGlvbklEKSwgbV9wYWdlSUQsIFNlY29uZHMoMikpKSB7CiAgICAgICAgICAgICBtX2R5bmFtaWNW
aWV3cG9ydFNpemVVcGRhdGVXYWl0aW5nRm9yVGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBt
X2R5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVMYXllclRyZWVUcmFuc2FjdGlvbklEID0gbmV4dFZh
bGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRDsKICAgICAgICAgICAgIG1fcGFnZUNsaWVudC5keW5h
bWljVmlld3BvcnRVcGRhdGVDaGFuZ2VkVGFyZ2V0KG5ld1NjYWxlLCBuZXdTY3JvbGxQb3NpdGlv
biwgbmV4dFZhbGlkTGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHkuaAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBuZXh0TGF5ZXJUcmVlVHJh
bnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ0xheWVyVHJlZVRyYW5zYWN0aW9u
SUQgKyAxOyB9CiAgICAgdWludDY0X3QgbGFzdENvbW1pdHRlZExheWVyVHJlZVRyYW5zYWN0aW9u
SUQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSURGb3JQZW5kaW5nQ0FDb21taXQ7IH0K
IAotICAgIHZvaWQgZGlkUmVmcmVzaERpc3BsYXkoZG91YmxlIHRpbWVzdGFtcCk7CisgICAgdm9p
ZCBkaWRSZWZyZXNoRGlzcGxheSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgc2l6ZURpZENoYW5n
ZSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQkocmV2aXNp
b24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsNyArODEsNyBAQCAt
ICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpZGlzcGxheUxpbmtGaXJlZDooQ0FEaXNwbGF5TGluayAq
KXNlbmRlcgogewogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwotICAgIF9kcmF3aW5nQXJlYVBy
b3h5LT5kaWRSZWZyZXNoRGlzcGxheShzZW5kZXIudGltZXN0YW1wKTsKKyAgICBfZHJhd2luZ0Fy
ZWFQcm94eS0+ZGlkUmVmcmVzaERpc3BsYXkoKTsKIH0KIAogLSAodm9pZClpbnZhbGlkYXRlCkBA
IC0yMjgsMTEgKzIyOCwxMSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6
OmNvCiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKHN0ZDo6ZXhjaGFuZ2UobV9kaWRVcGRh
dGVNZXNzYWdlU3RhdGUsIE5lZWRzRGlkVXBkYXRlKSA9PSBNaXNzZWRDb21taXQpCi0gICAgICAg
IGRpZFJlZnJlc2hEaXNwbGF5KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKKyAgICAg
ICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKICAgICBbbV9kaXNwbGF5TGlua0hhbmRsZXIgc2NoZWR1
bGVdOwogI2Vsc2UKICAgICBtX2RpZFVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IE5lZWRzRGlkVXBkYXRl
OwotICAgIGRpZFJlZnJlc2hEaXNwbGF5KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsK
KyAgICBkaWRSZWZyZXNoRGlzcGxheSgpOwogI2VuZGlmCiAKICAgICBpZiAoYXV0byBtaWxlc3Rv
bmVzID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24ubmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcygp
KQpAQCAtMzk0LDcgKzM5NCw3IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eTo6aW4KICAgICB9CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6
ZGlkUmVmcmVzaERpc3BsYXkoZG91YmxlKQordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5OjpkaWRSZWZyZXNoRGlzcGxheSgpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyNiwxNiArNDI2LDE2IEBAIHZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6d2EKICAgICAvLyBXZSBtdXN0IHNlbmQgdGhl
IGRpZFVwZGF0ZSBtZXNzYWdlIGJlZm9yZSBibG9ja2luZyBvbiB0aGUgbmV4dCBjb21taXQsIG90
aGVyd2lzZQogICAgIC8vIHdlIGNhbiBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIG5leHQgY29tbWl0
IHdvbid0IGNvbWUgdW50aWwgYWZ0ZXIgdGhlIHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5
IHRpbWVzIG91dC4KICAgICBpZiAobV9kaWRVcGRhdGVNZXNzYWdlU3RhdGUgIT0gRG9lc05vdE5l
ZWREaWRVcGRhdGUpCi0gICAgICAgIGRpZFJlZnJlc2hEaXNwbGF5KG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpKTsKKyAgICAgICAgZGlkUmVmcmVzaERpc3BsYXkoKTsKIAotICAgIHN0YXRp
YyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0g
W10geworICAgIHN0YXRpYyBTZWNvbmRzIGFjdGl2aXR5U3RhdGVVcGRhdGVUaW1lb3V0ID0gW10g
ewogICAgICAgICBpZiAoaWQgdmFsdWUgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXSBvYmplY3RGb3JLZXk6QCJXZWJLaXRPdmVycmlkZUFjdGl2aXR5U3RhdGVVcGRhdGVU
aW1lb3V0Il0pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4o
W3ZhbHVlIGRvdWJsZVZhbHVlXSkpOworICAgICAgICAgICAgcmV0dXJuIFNlY29uZHMoW3ZhbHVl
IGRvdWJsZVZhbHVlXSk7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIHJldHVybiBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCk7CisgICAgICAgIHJldHVybiBTZWNvbmRzOjpmcm9t
TWlsbGlzZWNvbmRzKDUwMCk7CiAjZWxzZQotICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcygyNTApOworICAgICAgICByZXR1cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25k
cygyNTApOwogI2VuZGlmCiAgICAgfSgpOwogICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5j
b25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjpDb21taXRMYXllclRyZWU+KG1fd2ViUGFnZVBy
b3h5LnBhZ2VJRCgpLCBhY3Rpdml0eVN0YXRlVXBkYXRlVGltZW91dCwgSVBDOjpXYWl0Rm9yT3B0
aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gRHJhd2lu
Z0FyZWFQcm94eQogICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNpemVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JQ
b3NzaWJsZUdlb21ldHJ5VXBkYXRlKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZW91dCA9
IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpKSBvdmVycmlkZTsKKyAgICB2b2lk
IHdhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKFNlY29uZHMgdGltZW91dCA9IGRpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlVGltZW91dCgpKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbG9yU3Bh
Y2VEaWRDaGFuZ2UoKSBvdmVycmlkZTsKICAgICB2b2lkIG1pbmltdW1MYXlvdXRTaXplRGlkQ2hh
bmdlKCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHku
bW0JKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3
MCw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eToKICAgICBzZW5k
VXBkYXRlR2VvbWV0cnkoKTsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YVByb3h5Ojp3YWl0Rm9yUG9zc2libGVHZW9tZXRyeVVwZGF0ZShzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVvdXQpCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHk6
OndhaXRGb3JQb3NzaWJsZUdlb21ldHJ5VXBkYXRlKFNlY29uZHMgdGltZW91dCkKIHsKICNpZiAh
SEFWRShDT1JFQU5JTUFUSU9OX0ZFTkNFUykKICAgICBpZiAoIW1faXNXYWl0aW5nRm9yRGlkVXBk
YXRlR2VvbWV0cnkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYVByb3h5OgogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJv
eHk6OndhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKCkKIHsKLSAgICBhdXRvIGFjdGl2aXR5
U3RhdGVVcGRhdGVUaW1lb3V0ID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygyNTApOworICAg
IFNlY29uZHMgYWN0aXZpdHlTdGF0ZVVwZGF0ZVRpbWVvdXQgPSBTZWNvbmRzOjpmcm9tTWlsbGlz
ZWNvbmRzKDI1MCk7CiAgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmNvbm5lY3Rpb24oKS0+
d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
VXBkYXRlQWN0aXZpdHlTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIGFjdGl2aXR5U3Rh
dGVVcGRhdGVUaW1lb3V0LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5
bmNNZXNzYWdlQXJyaXZlcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCShyZXZp
c2lvbiAyMDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTYsNyArMTk2LDcgQEAgLSAodm9p
ZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyV2lsbEJlZwogICAgIC8vIEZJWE1FOiBDb25uZWN0
aW9uIGNhbiBiZSBudWxsIGlmIHRoZSBwcm9jZXNzIGlzIGNsb3NlZDsgd2Ugc2hvdWxkIGNsZWFu
IHVwIGJldHRlciBpbiB0aGF0IGNhc2UuCiAgICAgaWYgKF9zdGF0ZSA9PSBJbW1lZGlhdGVBY3Rp
b25TdGF0ZTo6UGVuZGluZykgewogICAgICAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9IF9wYWdl
LT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKSB7Ci0gICAgICAgICAgICBib29sIHJlY2VpdmVkUmVw
bHkgPSBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdD4oX3BhZ2UtPnBh
Z2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUwMCkpOworICAgICAgICAgICAgYm9v
bCByZWNlaXZlZFJlcGx5ID0gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRl
bHk8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRl
c3Q+KF9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyg1MDApKTsKICAg
ICAgICAgICAgIGlmICghcmVjZWl2ZWRSZXBseSkKICAgICAgICAgICAgICAgICBfc3RhdGUgPSBJ
bW1lZGlhdGVBY3Rpb25TdGF0ZTo6VGltZWRPdXQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAy
MDgzNTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMjksNyArMjI5LDcgQEAgU3RyaW5nIFdlYlBh
Z2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUAogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAg
ICByZXR1cm4gdmFsdWU7CiAgICAgCi0gICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0
ZDo6Y2hyb25vOjpzZWNvbmRzKDIwKTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0
KDIwKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFN0cmlu
Z1NlbGVjdGlvbkZvclBhc3RlYm9hcmQoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkdldFN0cmluZ1Nl
bGVjdGlvbkZvclBhc3RlYm9hcmQ6OlJlcGx5KHZhbHVlKSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1l
b3V0KTsKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGFnZVBybwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDA7
Ci0gICAgY29uc3QgYXV0byBtZXNzYWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDIw
KTsKKyAgICBjb25zdCBTZWNvbmRzIG1lc3NhZ2VUaW1lb3V0KDIwKTsKICAgICBwcm9jZXNzKCku
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkdldERhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJk
KHBhc3RlYm9hcmRUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXREYXRhU2VsZWN0aW9uRm9yUGFzdGVib2Fy
ZDo6UmVwbHkoaGFuZGxlLCBzaXplKSwgbV9wYWdlSUQsIG1lc3NhZ2VUaW1lb3V0KTsKICAgICBp
ZiAoaGFuZGxlLmlzTnVsbCgpKQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgV2ViUGFnZVByb3h5
OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1lb3V0ID0gc3RkOjpj
aHJvbm86OnNlY29uZHMoMjApOworICAgIGNvbnN0IFNlY29uZHMgbWVzc2FnZVRpbWVvdXQoMjAp
OwogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6UmVhZFNlbGVjdGlv
bkZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlJlYWRT
ZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDo6UmVwbHkocmVzdWx0KSwgbV9wYWdlSUQsIG1lc3NhZ2VU
aW1lb3V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDA4LDcgKzQwOCw3IEBAIGJvb2wg
V2ViUGFnZVByb3h5OjpzaG91bGREZWxheVdpbmRvd09yZGUKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBjb25zdCBhdXRvIG1lc3NhZ2VUaW1l
b3V0ID0gc3RkOjpjaHJvbm86OnNlY29uZHMoMyk7CisgICAgY29uc3QgU2Vjb25kcyBtZXNzYWdl
VGltZW91dCgzKTsKICAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlNo
b3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChldmVudCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpT
aG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBt
ZXNzYWdlVGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxOSw3ICs0MTksNyBA
QCBib29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0ZpcnN0TW91c2UoaW50CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgY29uc3QgYXV0byBtZXNz
YWdlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDMpOworICAgIGNvbnN0IFNlY29uZHMg
bWVzc2FnZVRpbWVvdXQoMyk7CiAgICAgcHJvY2VzcygpLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpBY2NlcHRzRmlyc3RNb3VzZShldmVudE51bWJlciwgZXZlbnQpLCBNZXNzYWdlczo6V2Vi
UGFnZTo6QWNjZXB0c0ZpcnN0TW91c2U6OlJlcGx5KHJlc3VsdCksIG1fcGFnZUlELCBtZXNzYWdl
VGltZW91dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAJKHJldmlzaW9uIDIwODM1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcg
KzM1NCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb24KIAogICAg
IEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAo
IVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCht
ZXNzYWdlLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRDbG9zZSksIG1fcGFnZS0+cGFn
ZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0
aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkpCisgICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwg
d2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBT
ZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVBy
b2Nlc3NXaWxsU3VzcGVuZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBz
aG91bGRDbG9zZTsKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVu
SmF2YVNjcmlwdEFsZXJ0CiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlv
bkRpc2FibGVyOwogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlw
dEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1l
KGZyYW1lKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlw
dEFsZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2ls
bFN1c3BlbmQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRB
bGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShm
cmFtZSksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRB
bGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBD
OjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOwogfQog
CiBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1l
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC00MTcsNyArNDE3LDcgQEAgYm9vbCBXZWJDaHJv
bWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maQogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBo
YW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIGlm
ICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJh
bWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNz
YWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OlJlcGx5
KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1h
eCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVu
ZCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29u
ZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21GcmFtZShm
cmFtZSksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29u
ZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHko
KSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDM2LDcg
KzQzNiw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXAKIAogICAg
IEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAo
IVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUt
PmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBtZXNzYWdl
LCBkZWZhdWx0VmFsdWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJv
bXB0OjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNz
V2lsbFN1c3BlbmQpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2
YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZy
b21GcmFtZShmcmFtZSksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlE
KCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuICFyZXN1bHQuaXNOdWxsKCk7CkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnByaW50KEZyYW1lKiBmcmFtZQogICAgIH0KICNlbmRpZgogCi0gICAgbV9wYWdlLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lKHdlYkZyYW1lLT5mcmFt
ZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lOjpSZXBseSgpLCBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3Jt
UGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZTo6UmVwbHkoKSwgU2Vjb25kczo6aW5maW5pdHko
KSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQp
OwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1l
KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIERhdGFiYXNlRGV0YWlscyBkZXRh
aWxzKQpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERh
dGFiYXNlUXUKICAgICBpZiAoIW5ld1F1b3RhKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAogICAgICAgICAgICAg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhKHdlYkZyYW1lLT5m
cmFtZUlEKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGRhdGFiYXNlTmFtZSwgZGV0
YWlscy5kaXNwbGF5TmFtZSgpLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwgZGV0
YWlscy5jdXJyZW50VXNhZ2UoKSwgZGV0YWlscy5leHBlY3RlZFVzYWdlKCkpLAotICAgICAgICAg
ICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpSZXBseShu
ZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1h
eCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVu
ZCk7CisgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNl
UXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5p
dHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3Bl
bmQpOwogICAgIH0KIAogICAgIGRiTWFuYWdlci5zZXRRdW90YShvcmlnaW4sIG5ld1F1b3RhKTsK
QEAgLTcxMyw3ICs3MTMsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0
aW9uCiAgICAgdWludDY0X3QgbmV3UXVvdGEgPSAwOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAogICAgICAgICBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGN1cnJlbnRRdW90YSwgdG90YWxCeXRlc05lZWRlZCks
Ci0gICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hl
T3JpZ2luUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kczo6bWF4KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3Bh
Z2UtPnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJ
bmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CiAKICAgICBjYWNoZVN0b3JhZ2Uuc3Rv
cmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBuZXdRdW90YSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCw3ICs2OTAsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERlY2lkCiAKICAgICBSZWY8V2ViRnJhbWU+IHByb3RlY3QoKm1fZnJh
bWUpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUo
KTsKLSAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRl
Y2lkZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbUZyYW1lKGNvcmVGcmFtZSksIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93
TUlNRVR5cGUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYzo6UmVwbHkocmVjZWl2
ZWRQb2xpY3lBY3Rpb24sIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCksIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHM6Om1heCgpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVBy
b2Nlc3NXaWxsU3VzcGVuZCkpIHsKKyAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1lLT5mcmFt
ZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKGNvcmVGcmFtZSksIHJlc3BvbnNl
LCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkp
LmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNl
U3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJ
RCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRm
b3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkgewogICAgICAgICBtX2ZyYW1lLT5kaWRSZWNlaXZlUG9s
aWN5RGVjaXNpb24obGlzdGVuZXJJRCwgUG9saWN5SWdub3JlLCAwLCB7IH0pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjA4MzU4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAot
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgpAQCAtNTUzNiw3ICs1NTM1LDcgQEAgdm9pZCBXZWJQYWdlOjpwb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVAogICAgIFVzZXJEYXRhIHJldHVyblVzZXJEYXRhOwogCiAgICAg
YXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIGlmICghc2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKG1l
c3NhZ2VOYW1lLCBVc2VyRGF0YSh3ZWJQcm9jZXNzLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
bWVzc2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhhbmRsZVN5bmNocm9ub3Vz
TWVzc2FnZTo6UmVwbHkocmV0dXJuVXNlckRhdGEpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6VXNlRnVsbHlTeW5jaHJvbm91c01vZGVGb3JU
ZXN0aW5nKSkKKyAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhhbmRs
ZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEod2ViUHJvY2Vzcy50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5KHJldHVyblVzZXJEYXRhKSwgU2Vj
b25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6VXNlRnVsbHlTeW5jaHJvbm91
c01vZGVGb3JUZXN0aW5nKSkKICAgICAgICAgcmV0dXJuRGF0YSA9IG51bGxwdHI7CiAgICAgZWxz
ZQogICAgICAgICByZXR1cm5EYXRhID0gd2ViUHJvY2Vzcy50cmFuc2Zvcm1IYW5kbGVzVG9PYmpl
Y3RzKHJldHVyblVzZXJEYXRhLm9iamVjdCgpKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQwNSkKKysrIFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTExLTA0ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGOjpQYXJraW5nTG90IHNo
b3VsZCBzdG9wIHVzaW5nIHN0ZDo6Y2hyb25vIGJlY2F1c2Ugc3RkOjpjaHJvbm86OmR1cmF0aW9u
IGNhc3RzIGFyZSBwcm9uZSB0byBvdmVyZmxvd3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHkg
RXN0ZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvbmRpdGlvbi5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRvVXBwZXJDb252ZXJ0ZXI6OnN0b3BQcm9kdWNpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VG9VcHBlckNvbnZlcnRlcjo6c3RvcENvbnN1bWluZyk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVGltZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTExLTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIwODI5My4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gMjA4MzU4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1N0cmluZ09wZXJhdG9ycy5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvVGVtcG9yYXJ5Q2hhbmdlLmNwcAorICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9UaW1lLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9VbmlxdWVSZWYuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV1RGL1ZhcmlhbnQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1Zl
Y3Rvci5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDgzNTgpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCQkwRjEzOUU3NzFBNDIzQTVC
MDBGNTkwRjUgLyogV2Vha09iakNQdHIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3NTFBNDIzQTUzMDBGNTkwRjUgLyogV2Vha09iakNQdHIu
bW0gKi87IH07CiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGll
c0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87
IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlF
NzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CisJ
CTBGMkMyMEI4MURDRDU0NTAwMDU0MkQ5RSAvKiBUaW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBU
aW1lLmNwcCAqLzsgfTsKIAkJMEYzQjk0QTcxQTc3MjY3NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2
YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUph
dmFTY3JpcHQubW0gKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBmaW5kLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUEzNTI0QUUx
RDYzQTRGQjAwMzE3MjlCIC8qIFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMzUyNEFDMUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAg
Ki87IH07CkBAIC03MjIsNiArNzIzLDcgQEAKIAkJMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8q
IFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tOyBwYXRoID0gY29jb2EvUGxhdGZv
cm1VdGlsaXRpZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzlF
NzUxQTQyM0E1MzAwRjU5MEY1IC8qIFdlYWtPYmpDUHRyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vha09iakNQdHIubW07IHBhdGggPSBjb2NvYS9XZWFrT2Jq
Q1B0ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxN0JCRDQxNUFGNkM0RDAw
N0FCNzUzIC8qIFdlYkNvcmVTdGF0aXN0aWNzV2l0aE5vV2ViUHJvY2Vzcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlU3RhdGlzdGljc1dpdGhOb1dlYlBy
b2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDMjBCNzFEQ0Q1NDQ4
MDA1NDJEOUUgLyogVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjk0QTUxQTc3MjY2
QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBD
IC8qIFJlZEJsYWNrVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWRCbGFja1RyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRD
RTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MjUsNiArMTgyNyw3IEBACiAJCQkJN0M3NEQ0MkQxODgyMjhGMzAwRTVF
RDU3IC8qIFN0cmluZ1ZpZXcuY3BwICovLAogCQkJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAv
KiBTeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLywKIAkJCQkwQkNEODU2OTE0ODVDOThCMDBF
QTIwMDMgLyogVGVtcG9yYXJ5Q2hhbmdlLmNwcCAqLywKKwkJCQkwRjJDMjBCNzFEQ0Q1NDQ4MDA1
NDJEOUUgLyogVGltZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVu
aXF1ZVJlZi5jcHAgKi8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQu
Y3BwICovLAogCQkJCUJDNTVGNUY4MTRBRDc4RUUwMDQ4NEJFMSAvKiBWZWN0b3IuY3BwICovLApA
QCAtMjI4Nyw2ICsyMjkwLDcgQEAKIAkJCQk3QzgzREVBMDFEMEE1OTBDMDBGRUJDRjMgLyogQ2hl
Y2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNzdCQUEz
MUQ5QUZGRkMwMDVGQzU2OCAvKiBPcHRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4
M0RFQzMxRDBBNTkwQzAwRkVCQ0YzIC8qIENvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJDMjBCODFEQ0Q1NDUwMDA1NDJEOUUgLyogVGltZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTM1MjRBRTFENjNBNEZCMDAzMTcyOUIgLyogU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4M0RFQTYxRDBBNTkwQzAwRkVCQ0YzIC8qIENvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDODNERUE5MUQwQTU5MEMwMEZFQkNGMyAvKiBDU3RyaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29uZGl0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25kaXRpb24uY3Bw
CShyZXZpc2lvbiAyMDgzNTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db25k
aXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDkgQEAgZW51bSBOb3RpZnlTdHlsZSB7
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCB3YWl0KENvbmRpdGlvbiYg
Y29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIsIGNvbnN0IEZ1bmN0b3Im
IHByZWRpY2F0ZSwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyB0aW1lb3V0KQordm9pZCB3YWl0
KENvbmRpdGlvbiYgY29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+JiBsb2NrZXIsIGNv
bnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSwgU2Vjb25kcyB0aW1lb3V0KQogewotICAgIGlmICh0aW1l
b3V0ID09IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM6Om1heCgpKQorICAgIGlmICh0aW1lb3V0
ID09IFNlY29uZHM6OmluZmluaXR5KCkpCiAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlciwg
cHJlZGljYXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVGhpcyB0ZXN0cyB0aW1lb3V0cyBp
biB0aGUgc2Vuc2UgdGhhdCBpdCB2ZXJpZmllcyB0aGF0IHdlIGNhbiBjYWxsIHdhaXQoKSBhZ2Fp
biBhZnRlciBhCkBAIC04MCw4ICs4MCw4IEBAIHZvaWQgcnVuVGVzdCgKICAgICB1bnNpZ25lZCBt
YXhRdWV1ZVNpemUsCiAgICAgdW5zaWduZWQgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwKICAgICBO
b3RpZnlTdHlsZSBub3RpZnlTdHlsZSwKLSAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHRp
bWVvdXQgPSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOjptYXgoKSwKLSAgICBzdGQ6OmNocm9u
bzo6bWljcm9zZWNvbmRzIGRlbGF5ID0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kczo6emVybygp
KQorICAgIFNlY29uZHMgdGltZW91dCA9IFNlY29uZHM6OmluZmluaXR5KCksCisgICAgU2Vjb25k
cyBkZWxheSA9IFNlY29uZHMoMCkpCiB7CiAgICAgRGVxdWU8dW5zaWduZWQ+IHF1ZXVlOwogICAg
IGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgcnVu
VGVzdCgKICAgICAgICAgY29uc3VtZXJUaHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsK
ICAgICB9CiAKLSAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoZGVsYXkpOworICAgIHNs
ZWVwKGRlbGF5KTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bVByb2R1Y2VyczsgaS0tOykg
ewogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJl
YWQoCkBAIC0xODYsOCArMTg2LDggQEAgVEVTVChXVEZfQ29uZGl0aW9uLCBPbmVQcm9kdWNlck9u
ZUNvbnN1bQogewogICAgIHJ1blRlc3QoCiAgICAgICAgIDEsIDEsIDEsIDEwMDAwMCwgVGFjdGlj
YWxseU5vdGlmeUFsbCwKLSAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwMCks
Ci0gICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMDAwMCkpOworICAgICAgICBT
ZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDEwKSwKKyAgICAgICAgU2Vjb25kcygxKSk7CiB9CiAK
IFRFU1QoV1RGX0NvbmRpdGlvbiwgT25lUHJvZHVjZXJPbmVDb25zdW1lckh1bmRyZWRTbG90cykK
QEAgLTI0Nyw3ICsyNDcsNyBAQCBURVNUKFdURl9Db25kaXRpb24sIFRpbWVvdXRUaW1lc091dCkK
IAogICAgIGxvY2subG9jaygpOwogICAgIGJvb2wgcmVzdWx0ID0gY29uZGl0aW9uLndhaXRGb3Io
Ci0gICAgICAgIGxvY2ssIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMTAwMDApLCBbXSAoKSAt
PiBib29sIHsgcmV0dXJuIGZhbHNlOyB9KTsKKyAgICAgICAgbG9jaywgU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcygxMCksIFtdICgpIC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0pOwogICAgIGxv
Y2sudW5sb2NrKCk7CiAKICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0KTsKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N5bmNocm9uaXplZEZpeGVkUXVl
dWUuY3BwCShyZXZpc2lvbiAyMDgzNTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzEx
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBtX2xvd2VyUXVl
dWUuY2xvc2UoKTsKLSAgICAgICAgbV9wcm9kdWNlQ2xvc2VTZW1hcGhvcmUud2FpdChzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKKyAgICAgICAgbV9wcm9kdWNlQ2xvc2VTZW1h
cGhvcmUud2FpdChXYWxsVGltZTo6aW5maW5pdHkoKSk7CiAgICAgICAgIG1fcHJvZHVjZVF1ZXVl
ID0gbnVsbHB0cjsKICAgICB9CiAgICAgCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1fdXBwZXJRdWV1ZS5jbG9zZSgpOwotICAgICAg
ICBtX2NvbnN1bWVDbG9zZVNlbWFwaG9yZS53YWl0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6bWF4KCkpOworICAgICAgICBtX2NvbnN1bWVDbG9zZVNlbWFwaG9yZS53YWl0KFdhbGxUaW1l
OjppbmZpbml0eSgpKTsKICAgICAgICAgbV9jb25zdW1lUXVldWUgPSBudWxscHRyOwogICAgIH0K
ICAgICAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RpbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RpbWUuY3BwCShub25leGlz
dGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RpbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworc3RkOjpiYXNpY19v
c3RyZWFtPGNoYXI+JiBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxjaGFyPiYgb3V0LCBT
ZWNvbmRzIHZhbHVlKQoreworICAgIG91dCA8PCB0b0NTdHJpbmcodmFsdWUpLmRhdGEoKTsKKyAg
ICByZXR1cm4gb3V0OworfQorCitzdGQ6OmJhc2ljX29zdHJlYW08Y2hhcj4mIG9wZXJhdG9yPDwo
c3RkOjpiYXNpY19vc3RyZWFtPGNoYXI+JiBvdXQsIFdhbGxUaW1lIHZhbHVlKQoreworICAgIG91
dCA8PCB0b0NTdHJpbmcodmFsdWUpLmRhdGEoKTsKKyAgICByZXR1cm4gb3V0OworfQorCitzdGQ6
OmJhc2ljX29zdHJlYW08Y2hhcj4mIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPGNoYXI+
JiBvdXQsIE1vbm90b25pY1RpbWUgdmFsdWUpCit7CisgICAgb3V0IDw8IHRvQ1N0cmluZyh2YWx1
ZSkuZGF0YSgpOworICAgIHJldHVybiBvdXQ7Cit9CisKK3N0ZDo6YmFzaWNfb3N0cmVhbTxjaGFy
PiYgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08Y2hhcj4mIG91dCwgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlIHZhbHVlKQoreworICAgIG91dCA8PCB0b0NTdHJpbmcodmFsdWUpLmRhdGEo
KTsKKyAgICByZXR1cm4gb3V0OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2Ugewor
CitTZWNvbmRzIHMoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKTsK
K30KKworV2FsbFRpbWUgd3QoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHModmFsdWUpOworfQorCitNb25vdG9uaWNUaW1lIG10KGRvdWJsZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6ZnJvbVJhd1NlY29uZHModmFsdWUpOwor
fQorCitUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgZHQoZG91YmxlIHZhbHVlLCBDbG9ja1R5cGUg
dHlwZSkKK3sKKyAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpmcm9tUmF3U2Vj
b25kcyh2YWx1ZSwgdHlwZSk7Cit9CisKK1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBkdHcoZG91
YmxlIHZhbHVlKQoreworICAgIHJldHVybiBkdCh2YWx1ZSwgQ2xvY2tUeXBlOjpXYWxsKTsKK30K
KworVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGR0bShkb3VibGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIGR0KHZhbHVlLCBDbG9ja1R5cGU6Ok1vbm90b25pYyk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitURVNUKFdURl9UaW1lLCBwbHVzKQoreworICAgIEVYUEVDVF9FUShzKDYp
LCBzKDEpICsgcyg1KSk7CisgICAgRVhQRUNUX0VRKHMoNiksIHMoNSkgKyBzKDEpKTsKKyAgICBF
WFBFQ1RfRVEod3QoNiksIHMoMSkgKyB3dCg1KSk7CisgICAgRVhQRUNUX0VRKHd0KDYpLCBzKDUp
ICsgd3QoMSkpOworICAgIEVYUEVDVF9FUSh3dCg2KSwgd3QoMSkgKyBzKDUpKTsKKyAgICBFWFBF
Q1RfRVEod3QoNiksIHd0KDUpICsgcygxKSk7CisgICAgRVhQRUNUX0VRKG10KDYpLCBzKDEpICsg
bXQoNSkpOworICAgIEVYUEVDVF9FUShtdCg2KSwgcyg1KSArIG10KDEpKTsKKyAgICBFWFBFQ1Rf
RVEobXQoNiksIG10KDEpICsgcyg1KSk7CisgICAgRVhQRUNUX0VRKG10KDYpLCBtdCg1KSArIHMo
MSkpOworICAgIEVYUEVDVF9FUShkdHcoNiksIHMoMSkgKyBkdHcoNSkpOworICAgIEVYUEVDVF9F
UShkdHcoNiksIHMoNSkgKyBkdHcoMSkpOworICAgIEVYUEVDVF9FUShkdHcoNiksIGR0dygxKSAr
IHMoNSkpOworICAgIEVYUEVDVF9FUShkdHcoNiksIGR0dyg1KSArIHMoMSkpOworICAgIEVYUEVD
VF9FUShkdG0oNiksIHMoMSkgKyBkdG0oNSkpOworICAgIEVYUEVDVF9FUShkdG0oNiksIHMoNSkg
KyBkdG0oMSkpOworICAgIEVYUEVDVF9FUShkdG0oNiksIGR0bSgxKSArIHMoNSkpOworICAgIEVY
UEVDVF9FUShkdG0oNiksIGR0bSg1KSArIHMoMSkpOworfQorCitURVNUKFdURl9UaW1lLCBtaW51
cykKK3sKKyAgICBFWFBFQ1RfRVEocygtNCksIHMoMSkgLSBzKDUpKTsKKyAgICBFWFBFQ1RfRVEo
cyg0KSwgcyg1KSAtIHMoMSkpOworICAgIEVYUEVDVF9FUSh3dCgtNCksIHMoMSkgLSB3dCg1KSk7
CisgICAgRVhQRUNUX0VRKHd0KDQpLCBzKDUpIC0gd3QoMSkpOworICAgIEVYUEVDVF9FUSh3dCgt
NCksIHd0KDEpIC0gcyg1KSk7CisgICAgRVhQRUNUX0VRKHd0KDQpLCB3dCg1KSAtIHMoMSkpOwor
ICAgIEVYUEVDVF9FUShtdCgtNCksIHMoMSkgLSBtdCg1KSk7CisgICAgRVhQRUNUX0VRKG10KDQp
LCBzKDUpIC0gbXQoMSkpOworICAgIEVYUEVDVF9FUShtdCgtNCksIG10KDEpIC0gcyg1KSk7Cisg
ICAgRVhQRUNUX0VRKG10KDQpLCBtdCg1KSAtIHMoMSkpOworICAgIEVYUEVDVF9FUShkdHcoLTQp
LCBzKDEpIC0gZHR3KDUpKTsKKyAgICBFWFBFQ1RfRVEoZHR3KDQpLCBzKDUpIC0gZHR3KDEpKTsK
KyAgICBFWFBFQ1RfRVEoZHR3KC00KSwgZHR3KDEpIC0gcyg1KSk7CisgICAgRVhQRUNUX0VRKGR0
dyg0KSwgZHR3KDUpIC0gcygxKSk7CisgICAgRVhQRUNUX0VRKGR0bSgtNCksIHMoMSkgLSBkdG0o
NSkpOworICAgIEVYUEVDVF9FUShkdG0oNCksIHMoNSkgLSBkdG0oMSkpOworICAgIEVYUEVDVF9F
UShkdG0oLTQpLCBkdG0oMSkgLSBzKDUpKTsKKyAgICBFWFBFQ1RfRVEoZHRtKDQpLCBkdG0oNSkg
LSBzKDEpKTsKK30KKworVEVTVChXVEZfVGltZSwgbmVnYXRlKQoreworICAgIEVYUEVDVF9FUShz
KC03KSwgLXMoNykpOworICAgIEVYUEVDVF9FUShzKDcpLCAtcygtNykpOworICAgIEVYUEVDVF9F
USh3dCgtNyksIC13dCg3KSk7CisgICAgRVhQRUNUX0VRKHd0KDcpLCAtd3QoLTcpKTsKKyAgICBF
WFBFQ1RfRVEobXQoLTcpLCAtbXQoNykpOworICAgIEVYUEVDVF9FUShtdCg3KSwgLW10KC03KSk7
CisgICAgRVhQRUNUX0VRKGR0dygtNyksIC1kdHcoNykpOworICAgIEVYUEVDVF9FUShkdHcoNyks
IC1kdHcoLTcpKTsKKyAgICBFWFBFQ1RfRVEoZHRtKC03KSwgLWR0bSg3KSk7CisgICAgRVhQRUNU
X0VRKGR0bSg3KSwgLWR0bSgtNykpOworfQorCitURVNUKFdURl9UaW1lLCB0aW1lcykKK3sKKyAg
ICBFWFBFQ1RfRVEocygxNSksIHMoMykgKiA1KTsKK30KKworVEVTVChXVEZfVGltZSwgZGl2aWRl
KQoreworICAgIEVYUEVDVF9FUShzKDMpLCBzKDE1KSAvIDUpOworfQorCitURVNUKFdURl9UaW1l
LCBsZXNzKQoreworICAgIEVYUEVDVF9FUShmYWxzZSwgcygyKSA8IHMoMSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgcygyKSA8IHMoMikpOworICAgIEVYUEVDVF9FUSh0cnVlLCBzKDIpIDwgcygz
KSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB3dCgyKSA8IHd0KDEpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIHd0KDIpIDwgd3QoMikpOworICAgIEVYUEVDVF9FUSh0cnVlLCB3dCgyKSA8IHd0KDMp
KTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG10KDIpIDwgbXQoMSkpOworICAgIEVYUEVDVF9FUShm
YWxzZSwgbXQoMikgPCBtdCgyKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG10KDIpIDwgbXQoMykp
OworICAgIEVYUEVDVF9FUShmYWxzZSwgZHR3KDIpIDwgZHR3KDEpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIGR0dygyKSA8IGR0dygyKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIGR0dygyKSA8IGR0
dygzKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBkdG0oMikgPCBkdG0oMSkpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgZHRtKDIpIDwgZHRtKDIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgZHRtKDIp
IDwgZHRtKDMpKTsKK30KKworVEVTVChXVEZfVGltZSwgbGVzc0VxdWFsKQoreworICAgIEVYUEVD
VF9FUShmYWxzZSwgcygyKSA8PSBzKDEpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcygyKSA8PSBz
KDIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcygyKSA8PSBzKDMpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIHd0KDIpIDw9IHd0KDEpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgd3QoMikgPD0gd3Qo
MikpOworICAgIEVYUEVDVF9FUSh0cnVlLCB3dCgyKSA8PSB3dCgzKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBtdCgyKSA8PSBtdCgxKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG10KDIpIDw9IG10
KDIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgbXQoMikgPD0gbXQoMykpOworICAgIEVYUEVDVF9F
UShmYWxzZSwgZHR3KDIpIDw9IGR0dygxKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIGR0dygyKSA8
PSBkdHcoMikpOworICAgIEVYUEVDVF9FUSh0cnVlLCBkdHcoMikgPD0gZHR3KDMpKTsKKyAgICBF
WFBFQ1RfRVEoZmFsc2UsIGR0bSgyKSA8PSBkdG0oMSkpOworICAgIEVYUEVDVF9FUSh0cnVlLCBk
dG0oMikgPD0gZHRtKDIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgZHRtKDIpIDw9IGR0bSgzKSk7
Cit9CisKK1RFU1QoV1RGX1RpbWUsIGdyZWF0ZXIpCit7CisgICAgRVhQRUNUX0VRKHRydWUsIHMo
MikgPiBzKDEpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHMoMikgPiBzKDIpKTsKKyAgICBFWFBF
Q1RfRVEoZmFsc2UsIHMoMikgPiBzKDMpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgd3QoMikgPiB3
dCgxKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCB3dCgyKSA+IHd0KDIpKTsKKyAgICBFWFBFQ1Rf
RVEoZmFsc2UsIHd0KDIpID4gd3QoMykpOworICAgIEVYUEVDVF9FUSh0cnVlLCBtdCgyKSA+IG10
KDEpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIG10KDIpID4gbXQoMikpOworICAgIEVYUEVDVF9F
UShmYWxzZSwgbXQoMikgPiBtdCgzKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIGR0dygyKSA+IGR0
dygxKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBkdHcoMikgPiBkdHcoMikpOworICAgIEVYUEVD
VF9FUShmYWxzZSwgZHR3KDIpID4gZHR3KDMpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgZHRtKDIp
ID4gZHRtKDEpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIGR0bSgyKSA+IGR0bSgyKSk7CisgICAg
RVhQRUNUX0VRKGZhbHNlLCBkdG0oMikgPiBkdG0oMykpOworfQorCitURVNUKFdURl9UaW1lLCBn
cmVhdGVyRXF1YWwpCit7CisgICAgRVhQRUNUX0VRKHRydWUsIHMoMikgPj0gcygxKSk7CisgICAg
RVhQRUNUX0VRKHRydWUsIHMoMikgPj0gcygyKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBzKDIp
ID49IHMoMykpOworICAgIEVYUEVDVF9FUSh0cnVlLCB3dCgyKSA+PSB3dCgxKSk7CisgICAgRVhQ
RUNUX0VRKHRydWUsIHd0KDIpID49IHd0KDIpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHd0KDIp
ID49IHd0KDMpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgbXQoMikgPj0gbXQoMSkpOworICAgIEVY
UEVDVF9FUSh0cnVlLCBtdCgyKSA+PSBtdCgyKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBtdCgy
KSA+PSBtdCgzKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIGR0dygyKSA+PSBkdHcoMSkpOworICAg
IEVYUEVDVF9FUSh0cnVlLCBkdHcoMikgPj0gZHR3KDIpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2Us
IGR0dygyKSA+PSBkdHcoMykpOworICAgIEVYUEVDVF9FUSh0cnVlLCBkdG0oMikgPj0gZHRtKDEp
KTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgZHRtKDIpID49IGR0bSgyKSk7CisgICAgRVhQRUNUX0VR
KGZhbHNlLCBkdG0oMikgPj0gZHRtKDMpKTsKK30KKworVEVTVChXVEZfVGltZSwgZXF1YWwpCit7
CisgICAgRVhQRUNUX0VRKGZhbHNlLCBzKDIpID09IHMoMSkpOworICAgIEVYUEVDVF9FUSh0cnVl
LCBzKDIpID09IHMoMikpOworICAgIEVYUEVDVF9FUShmYWxzZSwgcygyKSA9PSBzKDMpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIHd0KDIpID09IHd0KDEpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwg
d3QoMikgPT0gd3QoMikpOworICAgIEVYUEVDVF9FUShmYWxzZSwgd3QoMikgPT0gd3QoMykpOwor
ICAgIEVYUEVDVF9FUShmYWxzZSwgbXQoMikgPT0gbXQoMSkpOworICAgIEVYUEVDVF9FUSh0cnVl
LCBtdCgyKSA9PSBtdCgyKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBtdCgyKSA9PSBtdCgzKSk7
CisgICAgRVhQRUNUX0VRKGZhbHNlLCBkdHcoMikgPT0gZHR3KDEpKTsKKyAgICBFWFBFQ1RfRVEo
dHJ1ZSwgZHR3KDIpID09IGR0dygyKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBkdHcoMikgPT0g
ZHR3KDMpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIGR0bSgyKSA9PSBkdG0oMSkpOworICAgIEVY
UEVDVF9FUSh0cnVlLCBkdG0oMikgPT0gZHRtKDIpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIGR0
bSgyKSA9PSBkdG0oMykpOworfQorCitURVNUKFdURl9UaW1lLCBub3RFcXVhbCkKK3sKKyAgICBF
WFBFQ1RfRVEodHJ1ZSwgcygyKSAhPSBzKDEpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHMoMikg
IT0gcygyKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIHMoMikgIT0gcygzKSk7CisgICAgRVhQRUNU
X0VRKHRydWUsIHd0KDIpICE9IHd0KDEpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIHd0KDIpICE9
IHd0KDIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgd3QoMikgIT0gd3QoMykpOworICAgIEVYUEVD
VF9FUSh0cnVlLCBtdCgyKSAhPSBtdCgxKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBtdCgyKSAh
PSBtdCgyKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIG10KDIpICE9IG10KDMpKTsKKyAgICBFWFBF
Q1RfRVEodHJ1ZSwgZHR3KDIpICE9IGR0dygxKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBkdHco
MikgIT0gZHR3KDIpKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgZHR3KDIpICE9IGR0dygzKSk7Cisg
ICAgRVhQRUNUX0VRKHRydWUsIGR0bSgyKSAhPSBkdG0oMSkpOworICAgIEVYUEVDVF9FUShmYWxz
ZSwgZHRtKDIpICE9IGR0bSgyKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIGR0bSgyKSAhPSBkdG0o
MykpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>