<?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>61878</bug_id>
          
          <creation_ts>2011-06-01 12:48:34 -0700</creation_ts>
          <short_desc>Smooth scrolling for Chromium</short_desc>
          <delta_ts>2011-06-20 16:16:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Scott Byer">scottbyer</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>pkasting</cc>
    
    <cc>scottbyer</cc>
    
    <cc>tony</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>413591</commentid>
    <comment_count>0</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-01 12:48:34 -0700</bug_when>
    <thetext>Smooth scrolling for Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413593</commentid>
    <comment_count>1</comment_count>
      <attachid>95645</attachid>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-01 12:50:15 -0700</bug_when>
    <thetext>Created attachment 95645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413597</commentid>
    <comment_count>2</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-01 12:54:33 -0700</bug_when>
    <thetext>This is a start; it adds the plumbing for run-time enablement and an initial implementation (that leaves lots of tuning to do). Currently doesn&apos;t affect the standalone WebKit build at all. The initial focus is Linux/Chromium OS, but eventually this code wants to be refactored with the existing but turned off Windows smooth scrolling code into something more cross platform. Some of this will also dovetail with the platform gestures work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414148</commentid>
    <comment_count>3</comment_count>
      <attachid>95645</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 08:36:00 -0700</bug_when>
    <thetext>Comment on attachment 95645
Patch

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

I&apos;m very confused by this.  Why would we want to use anything other than the platform scroll behavior?

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests. (OOPS!)

This will cause the cq to fail.  We should really make the style-bot warn about this.  This should be replaced with a list of tests or xplaination of why testing is impossible/impractical/not-needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414214</commentid>
    <comment_count>4</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-02 09:58:36 -0700</bug_when>
    <thetext>&gt; I&apos;m very confused by this.  Why would we want to use anything other than the platform scroll behavior?

When the platform doesn&apos;t have a smooth scrolling implementation on it&apos;s own that is reasonable (e.g., Linux, Windows). When the device doesn&apos;t have smooth scrolling on any platform in Chromium (e.g., keyboard, mouse wheel) - though on the Mac it may make more sense to plumb through the platform scrolling behavior instead. And to animate flick gestures for devices and platforms that don&apos;t provide it (e.g., trackpad on anything other than a Mac).


&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        No new tests. (OOPS!)
&gt;
&gt;This will cause the cq to fail.  We should really make the style-bot warn about
&gt;this.  This should be replaced with a list of tests or xplaination of why
&gt;testing is impossible/impractical/not-needed.

I&apos;ll update the ChangeLogs. Currently, testing is manual only, and only on Chromium when it&apos;s compiled in. I expect to have some automated testing as I figure out how to measure when things go wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414290</commentid>
    <comment_count>5</comment_count>
      <attachid>95781</attachid>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-02 11:19:23 -0700</bug_when>
    <thetext>Created attachment 95781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414315</commentid>
    <comment_count>6</comment_count>
      <attachid>95781</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-02 11:48:39 -0700</bug_when>
    <thetext>Comment on attachment 95781
Patch

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

&gt; Source/WebCore/platform/chromium/ScrollAnimatorSettings.cpp:42
&gt; +static ScrollAnimatorSettings&amp; globalScrollAnimatorSettings()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(ScrollAnimatorSettings, settings, ());
&gt; +    return settings;
&gt; +}

Why is this a static?  Should this be part of WebCore::Settings?  It seems like a per-Page concept.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414355</commentid>
    <comment_count>7</comment_count>
      <attachid>95781</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-02 12:50:40 -0700</bug_when>
    <thetext>Comment on attachment 95781
Patch

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

This looks pretty good to me (I&apos;m not a WK reviewer, I&apos;m afraid).  Some comments inline.  I think ideally we&apos;d want to make this available on windows too by switching the gyp file to include this version of the scroll animator instead of scrollAnimatorWin.  Also, why not have it compiled in by default and rely on the settings flag alone to turn it on or off?

&gt; Source/WebCore/page/Settings.cpp:189
&gt; +    , m_enableScrollAnimator(false)

This variable isn&apos;t used.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:57
&gt; +    Settings initial = { false, 0.25, Linear, 0.01, Linear, 0.01, false, false, Linear, 0, 0 };

Better to use ScrollAnimatorSettings::Settings to make it clear this isn&apos;t the WebCore::Settings class.  Here and below.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:402
&gt; +        multiplier *= 1.5;

Magic values here and below should probably be constants somewhere, although not necessarily for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414358</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-06-02 12:54:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think ideally we&apos;d want to make this available on windows too by switching the gyp file to include this version of the scroll animator instead of scrollAnimatorWin.

scrollAnimatorWin was written by me for Chromium.  AFAIK no one actually uses the algorithm in it.  If we&apos;re not going to be using that algorithm either, then that file should be pretty much completely eliminated, rather than left in as dead code.

I think Scott sees things along the same lines here given comment 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414406</commentid>
    <comment_count>9</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-02 13:48:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 95781 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95781&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ScrollAnimatorSettings.cpp:42
&gt; &gt; +static ScrollAnimatorSettings&amp; globalScrollAnimatorSettings()
&gt; &gt; +{
&gt; &gt; +    DEFINE_STATIC_LOCAL(ScrollAnimatorSettings, settings, ());
&gt; &gt; +    return settings;
&gt; &gt; +}
&gt; 
&gt; Why is this a static?  Should this be part of WebCore::Settings?  It seems like a per-Page concept.

Looking through things, I&apos;m thinking that the right way to do that is for ScrollableArea to have a routine which gets the settings, which FrameView overrides to provide them from the Page. Does that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414484</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-02 15:01:40 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 95781 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95781&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/chromium/ScrollAnimatorSettings.cpp:42
&gt; &gt; &gt; +static ScrollAnimatorSettings&amp; globalScrollAnimatorSettings()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    DEFINE_STATIC_LOCAL(ScrollAnimatorSettings, settings, ());
&gt; &gt; &gt; +    return settings;
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; Why is this a static?  Should this be part of WebCore::Settings?  It seems like a per-Page concept.
&gt; 
&gt; Looking through things, I&apos;m thinking that the right way to do that is for ScrollableArea to have a routine which gets the settings, which FrameView overrides to provide them from the Page. Does that make sense?

That&apos;s a reasonable design.  I don&apos;t know enough context to understand the issue fully, but the state should be attached to the object graph somewhere.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414590</commentid>
    <comment_count>11</comment_count>
      <attachid>95843</attachid>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-02 18:21:58 -0700</bug_when>
    <thetext>Created attachment 95843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414591</commentid>
    <comment_count>12</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-02 18:25:11 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; That&apos;s a reasonable design.  I don&apos;t know enough context to understand the issue fully, but the state should be attached to the object graph somewhere.  :)

Everything should be in a better place now - no bloat to the Settings when not compiled for Chromium smooth scrolling, but that&apos;s where the info is placed when it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414592</commentid>
    <comment_count>13</comment_count>
      <attachid>95843</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-02 18:28:02 -0700</bug_when>
    <thetext>Comment on attachment 95843
Patch

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

The structure of this patch makes very little sense.  I recommend splitting off the settings part because that&apos;s going to require a very different kind of review than the guts of the algorithm.

&gt; Source/WebCore/page/FrameView.h:340
&gt; +    virtual const ScrollAnimatorSettings* scrollAnimatorSettings() const;

const ScrollAnimatorSettings* =&gt; ScrollAnimatorSettings const*  right?

&gt; Source/WebCore/platform/ScrollAnimatorSettings.h:44
&gt; +class ScrollAnimatorSettings {
&gt; +public:
&gt; +    static PassOwnPtr&lt;ScrollAnimatorSettings&gt; create();
&gt; +
&gt; +    virtual void setEnableScrollAnimator(bool flag) { }
&gt; +    virtual bool scrollAnimatorEnabled() const { return false; }
&gt; +};

This seems like way overkill.  Is this supposed to be a client?  This isn&apos;t how we do settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414603</commentid>
    <comment_count>14</comment_count>
      <attachid>95843</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-02 19:15:06 -0700</bug_when>
    <thetext>Comment on attachment 95843
Patch

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

The Settings design confuses me too.  What functionality are you going for? Wouldn&apos;t things be a lot simpler if ScrollAnimatorSettingsChromium was a class nested in ScrollAnimatorChrome?  Are you trying to expose the scroll animator settings so that they can be modified from outside this code (i.e. via a UI or flags)?

&gt; Source/WebCore/page/FrameView.cpp:2248
&gt; +        return m_page-&gt;settings()-&gt;scrollAnimatorSettings();

I&apos;m missing the point here.  Why go through the FrameView to get settings that are global to the Page?

&gt;&gt; Source/WebCore/platform/ScrollAnimatorSettings.h:44
&gt;&gt; +};
&gt; 
&gt; This seems like way overkill.  Is this supposed to be a client?  This isn&apos;t how we do settings.

I agree with Adam.  Even if you do end up with a separate ScrolAnimatorSettings class, I think the enable/disable still fits as a boolean in WebCore::Settings .

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:382
&gt; +    const ScrollAnimatorSettingsChromium::Settings *input_settings;

input_settings -&gt; inputSettings

&gt; Source/WebCore/platform/chromium/ScrollAnimatorSettingsChromium.cpp:56
&gt; +    for (int i = 0; i &lt; 5; ++i)

Better to augment the Type enum with a last value entry and replace the 5 here by the entry&apos;s name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414605</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-02 19:23:57 -0700</bug_when>
    <thetext>&gt; The Settings design confuses me too.

The design is very simple.  There are two ways to control the behavior of WebCore:

1) You can push a bool (or an string, something simple) into WebCore per Page using a WebCore::Setting.  Not all code can find the Setting object, but those than can are able to read that simple type.

2) For more complicated things, or things that need to be more fine-grained than a Page, you can add a client interface, which is a pure virtual callback to the WebKit layer.  There are a number of these interfaces that you can extend, or (in rare cases) you can create a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414941</commentid>
    <comment_count>16</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-03 09:17:03 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 95843 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95843&amp;action=review
&gt; 
&gt; The Settings design confuses me too.  What functionality are you going for? Wouldn&apos;t things be a lot simpler if ScrollAnimatorSettingsChromium was a class nested in ScrollAnimatorChrome?  Are you trying to expose the scroll animator settings so that they can be modified from outside this code (i.e. via a UI or flags)?

Yes, I think eventually some of the settings will want to be modified base on values that the Browser knows (e.g., keyboard repeat rate). In addition, when we got down to the nitty-gritty of fine tuning things, I wanted to have a WebUI where I could fiddle with everything and see traces. For something like smooth scrolling, modify-compile-run is too slow.



&gt; I agree with Adam.  Even if you do end up with a separate ScrolAnimatorSettings class, I think the enable/disable still fits as a boolean in WebCore::Settings .

That makes sense.

&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:382
&gt; &gt; +    const ScrollAnimatorSettingsChromium::Settings *input_settings;
&gt; 
&gt; input_settings -&gt; inputSettings

Good catch. Not a fan of CamelCase (years of Microsoft Word auto-correcting Photoshop incorrectly), but I&apos;m learning to cope.

&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ScrollAnimatorSettingsChromium.cpp:56
&gt; &gt; +    for (int i = 0; i &lt; 5; ++i)
&gt; 
&gt; Better to augment the Type enum with a last value entry and replace the 5 here by the entry&apos;s name.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414944</commentid>
    <comment_count>17</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-03 09:20:18 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; The Settings design confuses me too.
&gt; 
&gt; The design is very simple.  There are two ways to control the behavior of WebCore:
&gt; 
&gt; 1) You can push a bool (or an string, something simple) into WebCore per Page using a WebCore::Setting.  Not all code can find the Setting object, but those than can are able to read that simple type.
&gt; 
&gt; 2) For more complicated things, or things that need to be more fine-grained than a Page, you can add a client interface, which is a pure virtual callback to the WebKit layer.  There are a number of these interfaces that you can extend, or (in rare cases) you can create a new one.

This definitely falls into the more complicated category. It&apos;s why I ended up with the static data in the first place - the settings are bulky and don&apos;t need to be per page.

If you could give me a quick pointer at an example you think would fit, and I&apos;ll get things cleaned up. I&apos;m going to be working in WebKit more moving forward, so now is a good time to teach me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415029</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-03 11:31:58 -0700</bug_when>
    <thetext>&gt; If you could give me a quick pointer at an example you think would fit, and I&apos;ll get things cleaned up. I&apos;m going to be working in WebKit more moving forward, so now is a good time to teach me.

I don&apos;t really understand what this code is all about, so it&apos;s difficult to give you good advice.  ChromeClient.h might make sense given that ChromeClient deals with UI stuff.  (Note the &quot;Chrome&quot; in ChromeClient refers to &quot;browser chrome&quot; not &quot;the browser named Chrome.&quot;)

Really, you should find a reviewer who both understands how WebKit fits together and understands what you&apos;re trying to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415060</commentid>
    <comment_count>19</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-03 11:55:57 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; If you could give me a quick pointer at an example you think would fit, and I&apos;ll get things cleaned up. I&apos;m going to be working in WebKit more moving forward, so now is a good time to teach me.
&gt; 
&gt; I don&apos;t really understand what this code is all about, so it&apos;s difficult to give you good advice.  ChromeClient.h might make sense given that ChromeClient deals with UI stuff.  (Note the &quot;Chrome&quot; in ChromeClient refers to &quot;browser chrome&quot; not &quot;the browser named Chrome.&quot;)
&gt; 
&gt; Really, you should find a reviewer who both understands how WebKit fits together and understands what you&apos;re trying to do.

Using ChromeClient seems like a good idea.  We already use it for some other settings related to compositing. 

In the interest of making this check-in more manageable and since the current scroll settings are hardwired, would it make sense to embed the settings in the ScrollAnimatorChromium class and separate them out in a subsequent CL when we figure out who needs to adjust them an how?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415063</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-03 11:59:31 -0700</bug_when>
    <thetext>&gt; In the interest of making this check-in more manageable and since the current scroll settings are hardwired, would it make sense to embed the settings in the ScrollAnimatorChromium class and separate them out in a subsequent CL when we figure out who needs to adjust them an how?

That sounds like a great idea.  I feel bad delaying your work with these settings / configuration issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415067</commentid>
    <comment_count>21</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-03 12:01:50 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; In the interest of making this check-in more manageable and since the current scroll settings are hardwired, would it make sense to embed the settings in the ScrollAnimatorChromium class and separate them out in a subsequent CL when we figure out who needs to adjust them an how?
&gt; 
&gt; That sounds like a great idea.  I feel bad delaying your work with these settings / configuration issues.

Don&apos;t. I need to learn. That&apos;s what code reviews are for, and I appreciate the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415278</commentid>
    <comment_count>22</comment_count>
      <attachid>95985</attachid>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-03 16:37:18 -0700</bug_when>
    <thetext>Created attachment 95985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415279</commentid>
    <comment_count>23</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-03 16:38:50 -0700</bug_when>
    <thetext>(In reply to comment #19)

&gt; In the interest of making this check-in more manageable and since the current scroll settings are hardwired, would it make sense to embed the settings in the ScrollAnimatorChromium class and separate them out in a subsequent CL when we figure out who needs to adjust them an how?

Done. That simplified things quite a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415283</commentid>
    <comment_count>24</comment_count>
      <attachid>95985</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-03 16:44:10 -0700</bug_when>
    <thetext>Comment on attachment 95985
Patch

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

&gt; Source/WebCore/platform/ScrollableArea.h:142
&gt; +    virtual bool scrollAnimatorEnabled() const { return false; }

this doesn&apos;t seem like a property of a ScrollableArea.  Do we ever intend to have the scroll animator on for some ScrollableAreas but off for others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415301</commentid>
    <comment_count>25</comment_count>
      <attachid>95985</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-03 17:01:11 -0700</bug_when>
    <thetext>Comment on attachment 95985
Patch

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

(Again, I don&apos;t have any understanding of the actual content of this patch, the below are mostly just style nits.)

Three high-level points:

1) This code appears to be untested.  As a general rule, the project doesn&apos;t accept code without tests.  Sometimes it&apos;s difficult to have a testing plan in the initial stages of bringing up a feature.  You discuss this some in your ChangeLog.  Is there a plan for automated testing in the future?  How can folks work on this code without immediately breaking it?

2) None of this patch seems to be specific to Chromium.  Instead, this looks like a generic implementation that anyone could use if they&apos;re running on a platform without a platform-native implementation.  Rather than siloing this code away in a directory named &quot;chromium,&quot; it&apos;s probably better to put it in the main platform directory.  In the past, we&apos;ve used suffixes like &quot;None&quot; to indicate that a particular implementation is a generic version that you can use if your platform or library suite doesn&apos;t include this sort of functionality.

3) A bunch of the code around the settings is still really strange.  I don&apos;t fully understand what&apos;s going on there, but it doesn&apos;t look the way any other code in the project looks, which leads me to believe something isn&apos;t quite right there.  Rather than continuing to post on this bug, it might be helpful to find me or someone else on #webkit and we can try to understand what you&apos;re trying to accomplish there.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:54
&gt; +    ScrollAnimatorSettings::Settings initial =
&gt; +            { false, 0.25, Linear, 0.01, Linear, 0.01, false, false, Linear, 0, 0 };

Pls merge these lines.  There&apos;s no line length limit in WebKit.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:59
&gt; +    ScrollAnimatorSettings::Settings keyboardLine =
&gt; +            { true, 7 * kTickTime, Quadratic, 3 * kTickTime, Quadratic, 3 * kTickTime, false, false, Quadratic, 0, 0 };

Same for all these.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:121
&gt; +double ScrollAnimatorChromium::PerAxisData::attackCurve(ScrollAnimatorSettings::Curve curve, double deltaT,
&gt; +                                                        double curveT, double startPos, double attackPos)

These can all be one line too.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:137
&gt; +    default:
&gt; +        notImplemented();
&gt; +        break;

You should list all the enum values explicitly.  That way the compiler will complain when this code evolves.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:218
&gt; +                                                                 const ScrollAnimatorSettings::Settings* settings)

the const in &quot;const ScrollAnimatorSettings::Settings*&quot; is kind of meaningless.  That means the value of the pointer can&apos;t change, not that the object pointed to can&apos;t change.  I&apos;d just drop he const.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:318
&gt; +        double currentAttackPos = m_desiredVelocity ? attackCurve(m_attackCurve, deltaT, m_attackTime,
&gt; +                                                              m_startPos, m_attackPos) : m_startPos;

I&apos;d merge these lines.  They&apos;re already pretty tricky to read.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:321
&gt; +        double newAttackPos = m_desiredVelocity ? attackCurve(m_attackCurve, deltaT, m_attackTime,
&gt; +                                                          m_startPos, m_attackPos) : m_startPos;

ditto

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:346
&gt; +        // attack is based on adding velocity

I&apos;d remove this comment.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:348
&gt; +        double newPos = attackCurve(m_attackCurve, deltaT, m_attackTime,
&gt; +                                    m_startPos, m_attackPos) + m_attackOffset;

merge


newPos =&gt; newPosition (WebKit doesn&apos;t like to abbreviate works in variable names.)  I guess really all instances of &quot;pos&quot; should be &quot;position&quot; in this class.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:394
&gt; +    // TODO(scottbyer): get the type passed in. MouseWheel could also be by line, but should still have different

TODO(scottbyer) =&gt; FIXME
(This is just a stylistic difference between Chromium and WebKit.)

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.cpp:396
&gt; +    static ScrollAnimatorSettings settings;

If you need a non-trivial static, you need to use DECLARE_STATIC_LOCAL.  However, having this static here is very strange.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:64
&gt; +    // Can be overspecified. animationTime takes priority over releaseTime takes priority over attackTime.
&gt; +    // Missing: how to specify animation time accumulation (e.g., pure additive, asymptotic to a limit with a curve?)

&quot;Can be overspecified.&quot; =&gt; Please use complete sentences in comments.  Should &quot;Missing&quot; be &quot;FIXME&quot; ?

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:84
&gt; +    Settings settings[5];

5 =&gt; No magic numbers please.  Presumably this is LastEntry ?

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:86
&gt; +    // Allow for per-platform initialization.

Please remove this comment.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:91
&gt; +  public:

No indent for these qualifiers.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:99
&gt; +    friend class ::ScrollAnimatorChromiumTest;

This class does not appear to exist.  Please remove.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:113
&gt; +        static double attackCurve(ScrollAnimatorSettings::Curve, double deltaT, double curveT,
&gt; +                                  double startPos, double attackPos);
&gt; +        static double releaseCurve(ScrollAnimatorSettings::Curve, double deltaT, double curveT,
&gt; +                                   double releasePos, double desiredPos);

Please merge these lines.

&gt; Source/WebCore/platform/chromium/ScrollAnimatorChromium.h:149
&gt; +    static const double animationTimerDelay;

Why static?  This is strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415316</commentid>
    <comment_count>26</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-03 17:21:03 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 95985 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95985&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.h:142
&gt; &gt; +    virtual bool scrollAnimatorEnabled() const { return false; }
&gt; 
&gt; this doesn&apos;t seem like a property of a ScrollableArea.  Do we ever intend to have the scroll animator on for some ScrollableAreas but off for others?

In the long run, no. This is for the short term while things are under development, in order to leave them behind a run-time flag. This was the simplest path for ScrollAnimator to reach up and get the flag from Settings. Is there a preferred way to do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415403</commentid>
    <comment_count>27</comment_count>
      <attachid>95985</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-03 22:34:52 -0700</bug_when>
    <thetext>Comment on attachment 95985
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:2243
&gt; +bool FrameView::scrollAnimatorEnabled() const

Are the changes to the FrameView still needed?

&gt;&gt;&gt; Source/WebCore/platform/ScrollableArea.h:142
&gt;&gt;&gt; +    virtual bool scrollAnimatorEnabled() const { return false; }
&gt;&gt; 
&gt;&gt; this doesn&apos;t seem like a property of a ScrollableArea.  Do we ever intend to have the scroll animator on for some ScrollableAreas but off for others?
&gt; 
&gt; In the long run, no. This is for the short term while things are under development, in order to leave them behind a run-time flag. This was the simplest path for ScrollAnimator to reach up and get the flag from Settings. Is there a preferred way to do that?

I don&apos;t see an easy way for the ScrollableArea to reach to the page Settings either...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415878</commentid>
    <comment_count>28</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-06 10:09:59 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 95985 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95985&amp;action=review
&gt; 
&gt; (Again, I don&apos;t have any understanding of the actual content of this patch, the below are mostly just style nits.)
&gt; 
&gt; Three high-level points:
&gt; 
&gt; 1) This code appears to be untested.  As a general rule, the project doesn&apos;t accept code without tests.  Sometimes it&apos;s difficult to have a testing plan in the initial stages of bringing up a feature.  You discuss this some in your ChangeLog.  Is there a plan for automated testing in the future?  How can folks work on this code without immediately breaking it?

Would window.scrollTo() go through this code? 

&gt; 
&gt; 2) None of this patch seems to be specific to Chromium.  Instead, this looks like a generic implementation that anyone could use if they&apos;re running on a platform without a platform-native implementation.  Rather than siloing this code away in a directory named &quot;chromium,&quot; it&apos;s probably better to put it in the main platform directory.  In the past, we&apos;ve used suffixes like &quot;None&quot; to indicate that a particular implementation is a generic version that you can use if your platform or library suite doesn&apos;t include this sort of functionality.

While I do agree that this would be generally useful, it&apos;s still under early development.  If it does get checked in to the common directory then any port that enabled SMOOTH_SCROLLING will be affected by it. What if we leave it in platform/graphics/chromium for now and move it back when it&apos;s ready to be used by others as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415909</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-06 11:25:33 -0700</bug_when>
    <thetext>&gt; Would window.scrollTo() go through this code? 

Dunno.

&gt; While I do agree that this would be generally useful, it&apos;s still under early development.  If it does get checked in to the common directory then any port that enabled SMOOTH_SCROLLING will be affected by it. What if we leave it in platform/graphics/chromium for now and move it back when it&apos;s ready to be used by others as well?

Maybe it would be better to have a USE(SCROLL_ANIMATOR) define instead?  I&apos;m skeptical the code will actually get moved when it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415917</commentid>
    <comment_count>30</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-06-06 11:40:04 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Maybe it would be better to have a USE(SCROLL_ANIMATOR) define instead?

Even non-animating scrolls use the ScrollAnimator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415921</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-06 11:43:13 -0700</bug_when>
    <thetext>As I said, I don&apos;t really understand what this code is doing.  My perspective is just that it looks non-Chromium specific so it shouldn&apos;t be in a Chromium-specific file and directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423916</commentid>
    <comment_count>32</comment_count>
      <attachid>97852</attachid>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-20 13:32:16 -0700</bug_when>
    <thetext>Created attachment 97852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423918</commentid>
    <comment_count>33</comment_count>
      <attachid>97852</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-20 13:35:12 -0700</bug_when>
    <thetext>Comment on attachment 97852
Patch

This looks great (from the perspective of someone ignorant of smooth scrolling)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423922</commentid>
    <comment_count>34</comment_count>
      <attachid>97852</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-20 13:38:44 -0700</bug_when>
    <thetext>Comment on attachment 97852
Patch

Marking R+ based on Vangelis&apos; comments above.  Thanks for iterating on the patch.  I very much appreciate it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423925</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-20 13:44:03 -0700</bug_when>
    <thetext>Let&apos;s let the EWS bots munch on the patch for a bit before setting commit-queue+ (given that this patch contains a bunch of ifdefs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423998</commentid>
    <comment_count>36</comment_count>
      <attachid>97852</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-20 15:37:19 -0700</bug_when>
    <thetext>Comment on attachment 97852
Patch

We&apos;ll need to watch this one when it lands.  I&apos;ll should be in the channel to make sure its ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424007</commentid>
    <comment_count>37</comment_count>
    <who name="Scott Byer">scottbyer</who>
    <bug_when>2011-06-20 15:42:30 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 97852 [details])
&gt; We&apos;ll need to watch this one when it lands.  I&apos;ll should be in the channel to make sure its ok.

Ok, I&apos;ll stick around as long as I can as well. Thanks for all the help!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424044</commentid>
    <comment_count>38</comment_count>
      <attachid>97852</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-20 16:16:36 -0700</bug_when>
    <thetext>Comment on attachment 97852
Patch

Clearing flags on attachment: 97852

Committed r89305: &lt;http://trac.webkit.org/changeset/89305&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424045</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-20 16:16:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95645</attachid>
            <date>2011-06-01 12:50:15 -0700</date>
            <delta_ts>2011-06-02 11:19:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61878-20110601125014.patch</filename>
            <type>text/plain</type>
            <size>38749</size>
            <attacher name="Scott Byer">scottbyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1Y2EzOTMxNDAwZTNmYTU3
ZDE0ODFlMjZmMTFmNzI0MDZkZmM1ZjUzLi44ZmFkMTU1MDgxYWQ3MzNmNDdiMjBkMjFkMDM2MWEw
NTA1Yjc3MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDYtMDEgIFNjb3R0
IEJ5ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBp
bml0aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBzY3JvbGxpbmcgYW5pbWF0b3IgaW4gdGhl
IENocm9taXVtIHBsYXRmb3JtIGRpcmVjdG9yeSwgYWRkIGluIGEgc2V0dGluZ3MgbWVjaGFuaXNt
LCBpbmNsdWRpbmcgcnVuLXRpbWUKKyAgICAgICAgZW5hYmxlbWVudCBvZiB0aGUgc2Nyb2xsaW5n
IGFuaW1hdG9yLiBUaGUgc21vb3RoIHNjcm9sbGluZyBjb2RlIGlzIGNvbXBpbGVkIG91dCBieSBk
ZWZhdWx0LiBUZXN0cyB0byBmb2xsb3cuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEp
CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6U2V0dGluZ3M6OnNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzY3JvbGxBbmltYXRvckVuYWJsZWQpOgorICAgICAgICAqIHBhZ2UvU2V0dGlu
Z3MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVt
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNldHRpbmdzOjpT
Y3JvbGxBbmltYXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVy
QXhpc0RhdGE6OmN1cnZlSW50ZWdyYWxBdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6Y3VydmVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjphdHRhY2tDdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6cmVsZWFz
ZUN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4
aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpQZXJBeGlzRGF0YTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OnVwZGF0ZURhdGFGcm9tU2V0dGluZ3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmFuaW1h
dGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OmFuaW1hdGlvblRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6c3RvcEFuaW1hdGlvblRp
bWVySWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
Q2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JTZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2xvYmFsU2Nyb2xs
QW5pbWF0b3JTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRTY3JvbGxBbmltYXRvclNl
dHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0U2Nyb2xsQW5pbWF0b3JFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvclNldHRpbmdzLmg6IEFkZGVkLgorCiAyMDExLTA2
LTAxICBBbmRyYXMgQmVjc2kgIDxhYmVjc2lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTAwM2I5YWUxN2Qy
NTM4ZDVlMDZlZmI3ZjAxNDBjZjE3ZmExYWY3YS4uYzlkNzZlYzJkOTU4OWI2M2ZlOGY1MWNkNDUz
MGI3NDA2M2JhMTlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzgzNCw2ICszODM0LDEwIEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21p
dW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0
aW5ncy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
U2V0dGluZ3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3Zl
cmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbScsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmNwcAppbmRleCA4NzhhOWI4MmY2YThkYjY0ZTQ5ZDgzMTI0NDc5NTA0ODM1
M2ZkNzFkLi4zMjk2MzlhZjY0YzUwZjlmOTM5NzU4ZTIyZDhiNjY4MzVkMGViOWE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlICJTdG9yYWdl
TWFwLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5oIgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE4MSw2ICsxODUsOSBAQCBT
ZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fc2hvdWxkSW5qZWN0VXNlclNj
cmlwdHNJbkluaXRpYWxFbXB0eURvY3VtZW50KGZhbHNlKQogICAgICwgbV9hbGxvd0Rpc3BsYXlP
Zkluc2VjdXJlQ29udGVudCh0cnVlKQogICAgICwgbV9hbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29u
dGVudCh0cnVlKQorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICwgbV9lbmFibGVT
Y3JvbGxBbmltYXRvcihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHlUaW1lcih0aGlzLCAmU2V0dGluZ3M6OmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseVRpbWVy
RmlyZWQpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwg
c28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIApAQCAtNzU1LDQgKzc2MiwxNiBAQCB2
b2lkIFNldHRpbmdzOjpzZXRUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQoYm9vbCBlbmFibGVkKQog
I2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKK3ZvaWQgU2V0dGluZ3M6
OnNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wgZmxhZykKK3sKKyAgICBzZXRTY3JvbGxBbmlt
YXRvckVuYWJsZWQoZmxhZyk7Cit9CisKK2Jvb2wgU2V0dGluZ3M6OnNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5lbmFi
bGVkOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuaAppbmRleCA4OTljOTdjNGU3ZDg1OWZjNTVhM2ZjNDUxMWI3MWJhZTNkYTkxYzQ0Li41MjBl
MDBkNGYzZGY2NWE2NDEyZjUxOWJlNjQ2ZWE5OTM1OTU4MTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oCkBAIC00MDUsNiArNDA1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChib29sIGZsYWcpIHsgbV9hbGxvd1J1
bm5pbmdPZkluc2VjdXJlQ29udGVudCA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBhbGxvd1J1bm5p
bmdPZkluc2VjdXJlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dSdW5uaW5nT2ZJbnNl
Y3VyZUNvbnRlbnQ7IH0KIAorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICAgICB2
b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wgZmxhZyk7CisgICAgICAgIGJvb2wgc2Ny
b2xsQW5pbWF0b3JFbmFibGVkKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIFBhZ2UqIG1fcGFnZTsKIApAQCAtNTEwLDYgKzUxNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBtX3Nob3VsZEluamVjdFVzZXJTY3JpcHRzSW5Jbml0aWFsRW1wdHlE
b2N1bWVudCA6IDE7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVu
dCA6IDE7CiAgICAgICAgIGJvb2wgbV9hbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCA6IDE7
CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgICAgIGJvb2wgbV9lbmFibGVTY3Jv
bGxBbmltYXRvciA6IDE7CisjZW5kaWYKIAogICAgICAgICBUaW1lcjxTZXR0aW5ncz4gbV9sb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHlUaW1lcjsKICAgICAgICAgdm9pZCBsb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHlUaW1lckZpcmVkKFRpbWVyPFNldHRpbmdzPiopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40NWY0NjEzOTZjYjI4MzEyNDEyNjIzZWFiYzk5MTQyMDBlYWZlMzZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPd25BcnJheVB0ci5oIgorI2luY2x1ZGUgIlNjcm9s
bEFuaW1hdG9yU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUg
PGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkb3VibGUga1Rp
Y2tUaW1lID0gLjAxNjY7CisKK1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlNjcm9sbEFuaW1hdG9y
U2V0dGluZ3MoKQoreworICAgIC8vIERpc2FibGVkIGJ5IGRlZmF1bHQgZm9yIG5vdy4KKyAgICBl
bmFibGVkID0gZmFsc2U7CisKKyAgICBTZXR0aW5ncyBpbml0aWFsID0geyBmYWxzZSwgMC4yNSwg
TGluZWFyLCAwLjAxLCBMaW5lYXIsIDAuMDEsIGZhbHNlLCBmYWxzZSwgTGluZWFyLCAwLCAwIH07
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpCisgICAgICAgIHNldHRpbmdzW2ldID0g
aW5pdGlhbDsKKworICAgIFNldHRpbmdzIGtleWJvYXJkTGluZSA9IHsgdHJ1ZSwgNyAqIGtUaWNr
VGltZSwgUXVhZHJhdGljLCAzICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDMgKiBrVGlja1RpbWUs
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIFF1YWRyYXRpYywg
MCwgMCB9OworICAgIHNldHRpbmdzW0tleWJvYXJkTGluZV0gPSBrZXlib2FyZExpbmU7CisKKyAg
ICBTZXR0aW5ncyBrZXlib2FyZFBhZ2UgPSB7IHRydWUsIDE1ICoga1RpY2tUaW1lLCBRdWFkcmF0
aWMsIDUgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgNSAqIGtUaWNrVGltZSwgZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgUXVhZHJhdGljLCAwLCAwIH07CisgICAg
c2V0dGluZ3NbS2V5Ym9hcmRQYWdlXSA9IGtleWJvYXJkUGFnZTsKKworICAgIFNldHRpbmdzIG1v
dXNlV2hlZWwgPSB7IHRydWUsIDExICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDMgKiBrVGlja1Rp
bWUsIFF1YWRyYXRpYywgMyAqIGtUaWNrVGltZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ1ZSwgUXVhZHJhdGljLCAwLCAwIH07CisgICAgc2V0dGluZ3NbTW91c2VXaGVl
bF0gPSBtb3VzZVdoZWVsOworfQorCitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxB
bmltYXRvcjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICBp
ZiAoc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpLmVuYWJsZWQpCisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bShzY3JvbGxhYmxlQXJlYSkpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpKTsKK30KKwor
Ly8gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUgdGltZXIgZGVsYXkgLSBob3cgbXVjaCBzbWFsbGVy
IHRoYW4gYSB0aWNrIGRvZXMgaXQgbmVlZCB0byBiZT8KK2NvbnN0IGRvdWJsZSBTY3JvbGxBbmlt
YXRvckNocm9taXVtOjphbmltYXRpb25UaW1lckRlbGF5ID0ga1RpY2tUaW1lOworCitkb3VibGUg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmN1cnZlSW50ZWdyYWxBdChTY3Jv
bGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSBjdXJ2ZSwgZG91YmxlIHQpCit7CisgICAgc3dpdGNo
IChjdXJ2ZSkgeworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6TGluZWFyOgorICAg
ICAgICByZXR1cm4gdCAqIHQgLyAyOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6
UXVhZHJhdGljOgorICAgICAgICByZXR1cm4gdCAqIHQgKiB0IC8gMzsKKyAgICBjYXNlIFNjcm9s
bEFuaW1hdG9yU2V0dGluZ3M6OkN1YmljOgorICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAv
IDQ7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpCb3VuY2U6CisgICAgICAgIGRv
dWJsZSB4LCBhcmVhOworICAgICAgICBpZiAodCA8IDEgLyAyLjc1KQorICAgICAgICAgICAgcmV0
dXJuIDIuNTIwODMgKiB0ICogdCAqIHQ7CisgICAgICAgIHggPSAxIC8gMi43NTsKKyAgICAgICAg
YXJlYSA9IDIuNTIwODMgKiB4ICogeCAqIHg7CisgICAgICAgIGlmICh0IDwgMiAvIDIuNzUpIHsK
KyAgICAgICAgICAgIGRvdWJsZSB0MSA9IHQgLSAxLjUgLyAyLjc1OworICAgICAgICAgICAgcmV0
dXJuIGFyZWEgKyAyLjUyMDgzICogdDEgKiAodDEgKiB0MSArIDAuMjk3NTEpOworICAgICAgICB9
CisgICAgICAgIHggPSAyIC8gMi43NTsKKyAgICAgICAgLy8gVGhlIGxhc3QgdHdvIGJvdW5jZXMg
YXJlbid0IGVub3VnaCB0byBhZmZlY3QgdGhpbmdzLgorICAgICAgICByZXR1cm4gYXJlYSArIDIu
NTIwODMgKiB4ICogKHggKiB4ICsgMHgyOTc1MSk7CisgICAgfQorfQorCitkb3VibGUgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmN1cnZlQXJlYShTY3JvbGxBbmltYXRvclNl
dHRpbmdzOjpDdXJ2ZSBjdXJ2ZSwgZG91YmxlIHN0YXJ0VCwgZG91YmxlIGVuZFQpCit7CisgICAg
c3RhdGljIGRvdWJsZSBjdXJ2ZUFyZWFbXSA9IHsgMS4wLCAwLjUsIDAuMzMsIDAuMSB9OworICAg
IGRvdWJsZSBzdGFydFZhbHVlID0gMDsKKyAgICBkb3VibGUgZW5kVmFsdWUgPSBjdXJ2ZUFyZWFb
Y3VydmVdOworCisgICAgaWYgKHN0YXJ0VCkKKyAgICAgICAgc3RhcnRWYWx1ZSA9IGN1cnZlSW50
ZWdyYWxBdChjdXJ2ZSwgc3RhcnRUKTsKKyAgICBpZiAoZW5kVCAhPSAxKQorICAgICAgICBlbmRW
YWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgZW5kVCk7CisgICAgcmV0dXJuIGVuZFZhbHVl
IC0gc3RhcnRWYWx1ZTsKK30KKworZG91YmxlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4
aXNEYXRhOjphdHRhY2tDdXJ2ZShTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSBjdXJ2ZSwg
ZG91YmxlIGRlbHRhVCwgZG91YmxlIGN1cnZlVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0UG9zLCBkb3VibGUgYXR0YWNr
UG9zKQoreworICAgIGRvdWJsZSB0ID0gZGVsdGFUIC8gY3VydmVUOworICAgIGRvdWJsZSBwb3Np
dGlvbkZhY3RvcjsKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRv
clNldHRpbmdzOjpMaW5lYXI6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gdDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpRdWFkcmF0aWM6CisgICAg
ICAgIHBvc2l0aW9uRmFjdG9yID0gdCAqIHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Ny
b2xsQW5pbWF0b3JTZXR0aW5nczo6Q3ViaWM6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gdCAq
IHQgKiB0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHN0YXJ0UG9zICsgcG9z
aXRpb25GYWN0b3IgKiAoYXR0YWNrUG9zIC0gc3RhcnRQb3MpOworfQorCitkb3VibGUgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OnJlbGVhc2VDdXJ2ZShTY3JvbGxBbmltYXRv
clNldHRpbmdzOjpDdXJ2ZSBjdXJ2ZSwgZG91YmxlIGRlbHRhVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjdXJ2ZVQsIGRvdWJs
ZSByZWxlYXNlUG9zLCBkb3VibGUgZGVzaXJlZFBvcykKK3sKKyAgICBkb3VibGUgdCA9IGRlbHRh
VCAvIGN1cnZlVDsKKyAgICBkb3VibGUgaW52VCA9IDEgLSB0OworICAgIGRvdWJsZSBwb3NpdGlv
bkZhY3RvcjsKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNl
dHRpbmdzOjpMaW5lYXI6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gMS4wIC0gaW52VDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpRdWFkcmF0aWM6
CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gMS4wIC0gaW52VCAqIGludlQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3ViaWM6CisgICAgICAgIHBv
c2l0aW9uRmFjdG9yID0gMS4wIC0gaW52VCAqIGludlQgKiBpbnZUOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkJvdW5jZToKKyAgICAgICAgaWYgKHQg
PCAxIC8gMi43NSkKKyAgICAgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gNy41NjI1ICogdCAqIHQ7
CisgICAgICAgIGVsc2UgaWYgKHQgPCAyIC8gMi43NSkgeworICAgICAgICAgICAgZG91YmxlIHQx
ID0gdCAtIDEuNSAvIDIuNzU7CisgICAgICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDcuNTYyNSAq
IHQxICogdDEgKyAuNzU7CisgICAgICAgIH0gZWxzZSBpZiAodCA8IDIuNSAvIDIuNzUpIHsKKyAg
ICAgICAgICAgIGRvdWJsZSB0MiA9IHQgLSAyLjI1IC8gMi43NTsKKyAgICAgICAgICAgIHBvc2l0
aW9uRmFjdG9yID0gNy41NjI1ICogdDIgKiB0MiArIC45Mzc1OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdCAtPSAyLjYyNSAvIDIuNzU7CisgICAgICAgICAgICBwb3NpdGlvbkZhY3Rv
ciA9IDcuNTYyNSAqIHQgKiB0ICsgLjk4NDM3NTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHJlbGVhc2VQb3MgKyAocG9zaXRpb25GYWN0b3IgKiAoZGVzaXJl
ZFBvcyAtIHJlbGVhc2VQb3MpKTsKK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhp
c0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0qIHBhcmVudCwgZmxvYXQq
IGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJlbnRQb3MoY3VycmVudFBvcykKKyAgICAsIG1fYW5p
bWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6YW5pbWF0aW9uVGlt
ZXJGaXJlZCkKK3sKKyAgICByZXNldCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW06OlBlckF4aXNEYXRhOjpyZXNldCgpCit7CisgICAgbV9jdXJyZW50VmVsb2NpdHkgPSAwOwor
CisgICAgbV9kZXNpcmVkUG9zID0gMDsKKyAgICBtX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisKKyAg
ICBtX3N0YXJ0UG9zID0gMDsKKyAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAgbV9zdGFydFZlbG9j
aXR5ID0gMDsKKworICAgIG1fYW5pbWF0aW9uVGltZSA9IDA7CisgICAgbV9sYXN0QW5pbWF0aW9u
VGltZSA9IDA7CisKKyAgICBtX2F0dGFja1BvcyA9IDA7CisgICAgbV9hdHRhY2tUaW1lID0gMDsK
KyAgICBtX2F0dGFja09mZnNldCA9IDA7CisgICAgbV9hdHRhY2tDdXJ2ZSA9IFNjcm9sbEFuaW1h
dG9yU2V0dGluZ3M6OlF1YWRyYXRpYzsKKworICAgIG1fcmVsZWFzZVBvcyA9IDA7CisgICAgbV9y
ZWxlYXNlVGltZSA9IDA7CisgICAgbV9yZWxlYXNlQ3VydmUgPSBTY3JvbGxBbmltYXRvclNldHRp
bmdzOjpRdWFkcmF0aWM7CisKKyAgICBtX2ZsaW5nVGltZSA9IDA7CisgICAgbV9mbGluZ0N1cnZl
ID0gU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6UXVhZHJhdGljOworCisgICAgbV9ib3VuY2UgPSBm
YWxzZTsKKyAgICBtX2ZsaW5nID0gZmFsc2U7CisgICAgbV9mbGluZ0Ftb3VudCA9IDA7Cit9CisK
KworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6dXBkYXRlRGF0YUZy
b21TZXR0aW5ncyhTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgbXVsdGlwbGllciwgZmxvYXQgc2Nyb2xsYWJsZVNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBjdXJyZW50VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6U2V0dGlu
Z3MqIHNldHRpbmdzKQoreworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIHBhcmFtZXRl
cml6ZWQgc28gdGhhdCBJIGNhbiB0cnkgZGlmZmVyZW50IGN1cnZlcyBiZXR3ZWVuIHRoZSBiYXNl
IGFuaW1hdGlvbiB0aW1lIGFuZCBhCisgICAgLy8gbWF4aW11bSBhbmltYXRpb24gdGltZSwgYmFz
ZWQgb24gY3VycmVudCB2ZWxvY2l0eSwgd2hpY2ggc2hvdWxkIGFsc28gZW5kIHVwIGJlaW5nIGNs
b3NlIHRvIHRoZSBmbGluZyB0aW1lLCBpZgorICAgIC8vIGxpbWl0ZWQgKHNlZSBiZWxvdykuCisg
ICAgZG91YmxlIHJlbWFpbmluZ0FuaW1hdGlvblRpbWUgPSBtX2FuaW1hdGlvblRpbWUgLSBtX2xh
c3RBbmltYXRpb25UaW1lICsgbV9zdGFydFRpbWU7CisgICAgbV9hbmltYXRpb25UaW1lID0gKHJl
bWFpbmluZ0FuaW1hdGlvblRpbWUgLyAyKSArIHNldHRpbmdzLT5hbmltYXRpb25UaW1lOworCisg
ICAgLy8gVGhvdWdodHMgb24gZmxpbmcuIEZsaW5nIHNob3VsZCBhbHdheXMgYmUgcHJlcGFyZWQg
Zm9yLCBidXQgc2hvdWxkbid0IGJlIGFjdHVhbGx5IHN0YXJ0ZWQgdW50aWwgd2UncmUgc3VyZSB0
aGUKKyAgICAvLyB1c2VyIGlzIG5vIGxvbmdlciBmaWRkbGluZyB3aXRoIHRoZSBkZXZpY2UgdGhh
dCdzIGRvaW5nIHRoZSBmbGluZy4gVGh1cywgdGhlIGZsaW5nIHRpbWUgcmVhbGx5IHNob3VsZCBi
ZQorICAgIC8vIHNwZWNpZmllZCB0aGUgb3RoZXIgd2F5LCBwZXIgZGV2aWNlIC0gaG93IGxvbmcg
c2luY2UgdGhlIGxhc3Qgc2Nyb2xsIG1lc3NhZ2UgZnJvbSB0aGF0IGRldmljZSBiZWZvcmUgd2Ug
Y29uc2lkZXIKKyAgICAvLyB0aGUgdXNlciB0byBoYXZlIGxldCBnbywgYW5kIGZvciB0aGUgZmxp
bmcgbW9kZWwgYW5kIGl0J3MgbXVjaC1mYXJ0aGVyLW91dCBkZXNpcmVkIHNjcm9sbCBwb3NpdGlv
biB0byB0YWtlIG92ZXIKKyAgICAvLyBmcm9tIHRoZSBhbmltYXRpb24gbW9kZWwuCisKKyAgICAv
LyBGSVhNRTogTmVlZCB0byB0aGluayBvZiBwb3NzaWJsZSBmbGluZyBtb2RlbHMuIFByb2plY3Rp
b24gYWxvbmcgYSBzbG9wZSwgcHJvcGVybHkgcGlubmVkPyBKdXN0IHBpbiB0aGUgc2xvcGU/Cisg
ICAgLy8gSGF2ZSBhIHNwZWVkIGxpbWl0IGFuZCBsZXQgdGhlIHRpbWUgZmxvYXQgbW9yZT8gSGF2
ZSBhIG1heCB0aW1lIGFzIHdlbGwsIHByaW9yaXRpemUgdGltZSBvciBzcGVlZD8KKyAgICBpZiAo
c2V0dGluZ3MtPmlzRmxpbmdFbmFibGVkKSB7CisgICAgICAgIGlmIChtX2FuaW1hdGlvblRpbWUg
PiAyICogc2V0dGluZ3MtPmFuaW1hdGlvblRpbWUpIHsKKyAgICAgICAgICAgIG1fZmxpbmcgPSB0
cnVlOworICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lICo9IDM7CisgICAgICAgICAgICBtdWx0
aXBsaWVyICo9IDI7CisgICAgICAgIH0gZWxzZSBpZiAobV9hbmltYXRpb25UaW1lIDwgMS4yICog
c2V0dGluZ3MtPmFuaW1hdGlvblRpbWUpCisgICAgICAgICAgICBtX2ZsaW5nID0gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IFNob3VsZCB3aGF0ZXZlciB3ZSBkbyBmb3IgYWRkaW5nIHRv
Z2V0aGVyIGFuaW1hdGlvbiB0aW1lcyBhbHNvIGJlIHJlZmxlY3RlZCBpbiB0aGUgYXR0YWNrIGFu
ZCByZWxlYXNlCisgICAgLy8gdGltZXMgLSBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG5ldyBhbmlt
YXRpb24gdGltZSBtYXliZT8KKyAgICBtX2F0dGFja1RpbWUgPSBzZXR0aW5ncy0+YXR0YWNrVGlt
ZTsKKyAgICBtX3JlbGVhc2VUaW1lID0gc2V0dGluZ3MtPnJlbGVhc2VUaW1lOworICAgIG1fYXR0
YWNrQ3VydmUgPSBzZXR0aW5ncy0+YXR0YWNrQ3VydmU7CisgICAgbV9yZWxlYXNlQ3VydmUgPSBz
ZXR0aW5ncy0+cmVsZWFzZUN1cnZlOworICAgIG1fZmxpbmdDdXJ2ZSA9IHNldHRpbmdzLT5mbGlu
Z0N1cnZlOworCisgICAgLy8gSSdtIHRoaW5raW5nIHRoYXQgZmxpbmcgdGltZSBzaG91bGQgYmUg
MnggdGhlIGV4cGVjdGVkIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gZXZlbnRzIGZyb20gdGhlIHNw
ZWNpZmljIGRldmljZSAtCisgICAgLy8gZS5nLiwgMS81MHRoIHNlY29uZCBmb3IgMTAwSHogZGV2
aWNlcyBsaWtlIHRoZSBtb3VzZSB3aGVlbCAoYW5kIHRvdWNoPykuIDEvMTAwdGggc2Vjb25kIGZv
ciBzb21ldGhpbmcgbGlrZSBhIGhpZ2gKKyAgICAvLyBzYW1wbGUgZnJlcXVlbmN5IHRhYmxldC4g
VGhlcmUncyBhIHRlbnNpb24gdGhlcmUgYmV0d2VlbiB0b3VjaCBkcmFncyB3YW50aW5nIGxvdyBs
YXRlbmN5IGFuZCBoYXZpbmcgZW5vdWdoIHRpbWUKKyAgICAvLyB0byBmaWd1cmUgb3V0IHRoZSBm
bGluZyB3aXRob3V0IHRoZSBtb3VzZSB1cCBldmVudHMuIFdoaWNoIGlzIHdoeSBmbGluZyBiZWhh
dmlvciAoYW5kIGV2ZW50dWFsIGZsaW5nIHRhcmdldGluZykKKyAgICAvLyBiZWxvbmdzIGluIHRo
ZSBnZXN0dXJlIHJlY29nbml6ZXIuIFRob3VnaCByZWNvZ25pemluZyBmbGluZ3Mgb24gYSBtb3Vz
ZSB3aGVlbCB3aWxsIGJlIGludGVyZXN0aW5nLi4uCisgICAgbV9mbGluZ1RpbWUgPSBzZXR0aW5n
cy0+ZmxpbmdUaW1lOworCisgICAgLy8gUHJpb3JpdGl6ZSBvdXIgd2F5IG91dCBvZiBvdmVyIGNv
bnN0cmFpbnQuCisgICAgaWYgKG1fYXR0YWNrVGltZSArIG1fcmVsZWFzZVRpbWUgPiBtX2FuaW1h
dGlvblRpbWUpIHsKKyAgICAgICAgaWYgKG1fcmVsZWFzZVRpbWUgPiBtX2FuaW1hdGlvblRpbWUp
CisgICAgICAgICAgICBtX3JlbGVhc2VUaW1lID0gbV9hbmltYXRpb25UaW1lOworICAgICAgICBt
X2F0dGFja1RpbWUgPSBtX2FuaW1hdGlvblRpbWUgLSBtX3JlbGVhc2VUaW1lOworICAgIH0KKwor
ICAgIG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKKworICAgIGlmICghbV9kZXNpcmVkUG9z
KQorICAgICAgICBtX2Rlc2lyZWRQb3MgPSAqbV9jdXJyZW50UG9zOworICAgIGZsb2F0IG5ld1Bv
cyA9IG1fZGVzaXJlZFBvcyArIChzdGVwICogbXVsdGlwbGllcik7CisKKyAgICAvLyBGSVhNRTog
UmVhbGx5LCB0aGUgYm91bmNlIGN1cnZlIHNob3VsZCBiZSBhY3RpdmF0ZWQgb25seSB3aGVuIHVu
ZGVyIHRoZSBmbGluZyBwcm9maWxlLiBUaGUgYm91bmNlIGVuYWJsZWQgc2hvdWxkCisgICAgLy8g
Z28gYXdheSBhcyBhIHNlcGFyYXRlIGZsYWcuCisgICAgaWYgKG5ld1BvcyA8IDAgfHwgbmV3UG9z
ID4gc2Nyb2xsYWJsZVNpemUpIHsKKyAgICAgICAgaWYgKHNldHRpbmdzLT5pc0JvdW5jZUVuYWJs
ZWQpIHsKKyAgICAgICAgICAgIG1fYm91bmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcmVsZWFz
ZUN1cnZlID0gU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Qm91bmNlOworICAgICAgICAgICAgbV9m
bGluZ0N1cnZlID0gU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Qm91bmNlOworICAgICAgICB9Cisg
ICAgICAgIG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKG5ld1Bvcywgc2Nyb2xsYWJsZVNpemUp
LCAwLjBmKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9ib3VuY2UgPSBmYWxzZTsKKworICAgIGlm
IChuZXdQb3MgPT0gbV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X2Rlc2lyZWRQb3MgPSBuZXdQb3M7CisKKyAgICBpZiAoIW1fc3RhcnRUaW1lKSB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB0aGUgdGltZSBmcm9tIHRoZSBldmVudCB0aGF0IGdv
dCB1cyBoZXJlLgorICAgICAgICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lIC0ga1RpY2tUaW1l
IC8gMjsKKyAgICAgICAgbV9zdGFydFBvcyA9ICptX2N1cnJlbnRQb3M7CisgICAgICAgIG1fbGFz
dEFuaW1hdGlvblRpbWUgPSBtX3N0YXJ0VGltZTsKKyAgICB9CisgICAgbV9zdGFydFZlbG9jaXR5
ID0gbV9jdXJyZW50VmVsb2NpdHk7CisKKyAgICBkb3VibGUgcmVtYWluaW5nRGVsdGEgPSBtX2Rl
c2lyZWRQb3MgLSAqbV9jdXJyZW50UG9zOworCisgICAgZG91YmxlIGF0dGFja0FyZWEgPSAwOwor
ICAgIGRvdWJsZSBkZWx0YVQgPSBtX2xhc3RBbmltYXRpb25UaW1lIC0gbV9zdGFydFRpbWU7Cisg
ICAgZG91YmxlIHJlbWFpbmluZ0F0dGFja1RpbWUgPSBzdGQ6Om1heChtX2F0dGFja1RpbWUgLSBk
ZWx0YVQsIDAuKTsKKworICAgIGlmIChyZW1haW5pbmdBdHRhY2tUaW1lID4gMCkgeworICAgICAg
ICBkb3VibGUgYXR0YWNrU3BvdCA9IChtX2xhc3RBbmltYXRpb25UaW1lIC0gbV9zdGFydFRpbWUp
IC8gbV9hdHRhY2tUaW1lOworICAgICAgICBkb3VibGUgYXR0YWNrQmFzZWxpbmUgPSBtX2Rlc2ly
ZWRWZWxvY2l0eSA/IG1fY3VycmVudFZlbG9jaXR5IC8gbV9kZXNpcmVkVmVsb2NpdHkgOiAwOwor
ICAgICAgICBhdHRhY2tBcmVhID0gYXR0YWNrQmFzZWxpbmUgKiByZW1haW5pbmdBdHRhY2tUaW1l
CisgICAgICAgICAgICAgICAgKyAoMSAtIGF0dGFja0Jhc2VsaW5lKSAqIHJlbWFpbmluZ0F0dGFj
a1RpbWUgKiBjdXJ2ZUFyZWEobV9hdHRhY2tDdXJ2ZSwgYXR0YWNrU3BvdCwgMSk7CisgICAgfQor
CisKKyAgICBkb3VibGUgcmVsZWFzZUFyZWEgPSBtX3JlbGVhc2VUaW1lICogY3VydmVBcmVhKG1f
cmVsZWFzZUN1cnZlLCAwLCAxKTsKKyAgICBkb3VibGUgc3VzdGFpbkFyZWEgPSBzdGQ6Om1heCht
X2FuaW1hdGlvblRpbWUgLSByZW1haW5pbmdBdHRhY2tUaW1lIC0gbV9yZWxlYXNlVGltZSwgMC4p
OworCisgICAgbV9kZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIChhdHRhY2tBcmVh
ICsgc3VzdGFpbkFyZWEgKyByZWxlYXNlQXJlYSk7CisgICAgbV9yZWxlYXNlUG9zID0gbV9kZXNp
cmVkUG9zIC0gbV9kZXNpcmVkVmVsb2NpdHkgKiByZWxlYXNlQXJlYTsKKworICAgIGlmIChhdHRh
Y2tBcmVhKSB7CisgICAgICAgIGRvdWJsZSBjdXJyZW50QXR0YWNrUG9zID0gbV9kZXNpcmVkVmVs
b2NpdHkgPyBhdHRhY2tDdXJ2ZShtX2F0dGFja0N1cnZlLCBkZWx0YVQsIG1fYXR0YWNrVGltZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGFydFBvcywgbV9hdHRhY2tQb3MpIDogbV9zdGFydFBvczsKKyAgICAgICAgbV9h
dHRhY2tQb3MgPSAqbV9jdXJyZW50UG9zICsgbV9kZXNpcmVkVmVsb2NpdHkgKiBjdXJ2ZUFyZWEo
bV9hdHRhY2tDdXJ2ZSwgMCwgMSkgKiBtX2F0dGFja1RpbWU7CisgICAgICAgIGRvdWJsZSBuZXdB
dHRhY2tQb3MgPSBtX2Rlc2lyZWRWZWxvY2l0eSA/IGF0dGFja0N1cnZlKG1fYXR0YWNrQ3VydmUs
IGRlbHRhVCwgbV9hdHRhY2tUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhcnRQb3MsIG1fYXR0YWNrUG9zKSA6IG1fc3Rh
cnRQb3M7CisgICAgICAgIGlmIChtX2N1cnJlbnRWZWxvY2l0eSAmJiBuZXdBdHRhY2tQb3MgIT0g
Y3VycmVudEF0dGFja1BvcykKKyAgICAgICAgICAgIG1fYXR0YWNrT2Zmc2V0ICs9IGN1cnJlbnRB
dHRhY2tQb3MgLSBuZXdBdHRhY2tQb3M7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9hdHRhY2tP
ZmZzZXQgPSAwOworICAgICAgICBtX2F0dGFja1BvcyA9ICptX2N1cnJlbnRQb3M7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogQWRkIGluIGphbmsgZGV0ZWN0aW9uIHRy
YWNlIGV2ZW50cyBpbnRvIHRoaXMgZnVuY3Rpb24uCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW06OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJsZSBjdXJyZW50VGltZSkKK3sKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZTsgZ3JhYmJpbmcgdGhlIGN1cnJlbnQgdGltZSBvbmNl
IGhlbHBzIGtlZXAgYSBjb25zaXN0ZW50IGhlYXJ0YmVhdC4KKyAgICBkb3VibGUgbGFzdFNjcm9s
bEludGVydmFsID0gY3VycmVudFRpbWUgLSBtX2xhc3RBbmltYXRpb25UaW1lOworICAgIG1fbGFz
dEFuaW1hdGlvblRpbWUgPSBjdXJyZW50VGltZTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRp
b24gPSB0cnVlOworICAgIGRvdWJsZSBkZWx0YVQgPSBjdXJyZW50VGltZSAtIG1fc3RhcnRUaW1l
OworCisgICAgaWYgKGRlbHRhVCA+IG1fYW5pbWF0aW9uVGltZSkgeworICAgICAgICBjb250aW51
ZUFuaW1hdGlvbiA9IGZhbHNlOworICAgICAgICAqbV9jdXJyZW50UG9zID0gbV9kZXNpcmVkUG9z
OworICAgICAgICByZXNldCgpOworICAgIH0gZWxzZSBpZiAoZGVsdGFUIDwgbV9hdHRhY2tUaW1l
KSB7CisgICAgICAgIC8vIGF0dGFjayBpcyBiYXNlZCBvbiBhZGRpbmcgdmVsb2NpdHkKKyAgICAg
ICAgZG91YmxlIG5ld1BvcyA9IGF0dGFja0N1cnZlKG1fYXR0YWNrQ3VydmUsIGRlbHRhVCwgbV9h
dHRhY2tUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydFBv
cywgbV9hdHRhY2tQb3MpICsgbV9hdHRhY2tPZmZzZXQ7CisgICAgICAgIC8vIERlbHRhIGlzIGFs
cmVhZHkgcGl4ZWxzIC8gc2VjLCBzaW5jZSB0aG9zZSBhcmUgdGhlIHR3byBpdGVtcyB3ZSBoYW5k
ZWQgaW4uCisgICAgICAgIGlmIChsYXN0U2Nyb2xsSW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAg
bV9jdXJyZW50VmVsb2NpdHkgPSAobmV3UG9zIC0gKm1fY3VycmVudFBvcykgLyBsYXN0U2Nyb2xs
SW50ZXJ2YWw7CisgICAgICAgICptX2N1cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgICAgIGRvdWJs
ZSByZW1haW5pbmdEZWx0YSA9IG1fcmVsZWFzZVBvcyAtICptX2N1cnJlbnRQb3M7CisgICAgICAg
IGRvdWJsZSByZW1haW5pbmdUaW1lID0gbV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSAt
IGRlbHRhVDsKKyAgICAgICAgbV9kZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIHJl
bWFpbmluZ1RpbWU7CisgICAgfSBlbHNlIGlmIChkZWx0YVQgPCAobV9hbmltYXRpb25UaW1lIC0g
bV9yZWxlYXNlVGltZSkpIHsKKyAgICAgICAgLy8gRGVzaXJlZCBzdGVhZHkgc3RhdGUgdmVsb2Np
dHkgcmUtZXN0aW1hdGlvbi4KKyAgICAgICAgZG91YmxlIG5ld1BvcyA9IG1fYXR0YWNrUG9zICsg
bV9hdHRhY2tPZmZzZXQgKyAoZGVsdGFUIC0gbV9hdHRhY2tUaW1lKSAqIG1fZGVzaXJlZFZlbG9j
aXR5OworICAgICAgICBpZiAobGFzdFNjcm9sbEludGVydmFsID4gMCkKKyAgICAgICAgICAgIG1f
Y3VycmVudFZlbG9jaXR5ID0gKG5ld1BvcyAtICptX2N1cnJlbnRQb3MpIC8gbGFzdFNjcm9sbElu
dGVydmFsOworICAgICAgICAqbV9jdXJyZW50UG9zID0gbmV3UG9zOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIHJlbGVhc2UgaXMgYmFzZWQgb24gdGFyZ2V0aW5nIHRoZSBleGFjdCBmaW5hbCBw
b3NpdGlvbi4KKyAgICAgICAgZG91YmxlIHJlbGVhc2VEZWx0YVQgPSBkZWx0YVQgLSAobV9hbmlt
YXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSk7CisgICAgICAgIGRvdWJsZSBuZXdQb3MgPSByZWxl
YXNlQ3VydmUobV9yZWxlYXNlQ3VydmUsIHJlbGVhc2VEZWx0YVQsIG1fcmVsZWFzZVRpbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWxlYXNlUG9zLCBtX2Rlc2ly
ZWRQb3MpOworICAgICAgICAvLyBOb3JtYWxpemUgdmVsb2NpdHkgdG8gYSBwZXIgc2Vjb25kIGFt
b3VudC4gQ291bGQgYmUgdXNlZCB0byBjaGVjayBmb3IgamFuay4KKyAgICAgICAgaWYgKGxhc3RT
Y3JvbGxJbnRlcnZhbCA+IDApCisgICAgICAgICAgICBtX2N1cnJlbnRWZWxvY2l0eSA9IChuZXdQ
b3MgLSAqbV9jdXJyZW50UG9zKSAvIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgKm1fY3Vy
cmVudFBvcyA9IG5ld1BvczsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRpbnVlQW5pbWF0aW9uOwor
fQorCitTY3JvbGxBbmltYXRvckNocm9taXVtOjpTY3JvbGxBbmltYXRvckNocm9taXVtKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFi
bGVBcmVhKQorICAgICwgbV9ob3Jpem9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAg
ICAsIG1fdmVydGljYWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxB
bmltYXRvckNocm9taXVtOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSgpCit7CisgICAgc3RvcEFu
aW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRp
b25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bTo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gVE9ETyhzY290dGJ5
ZXIpOiBnZXQgdGhlIHR5cGUgcGFzc2VkIGluLiBNb3VzZVdoZWVsIGNvdWxkIGFsc28gYmUgYnkg
bGluZSwgYnV0IHNob3VsZCBzdGlsbCBoYXZlIGRpZmZlcmVudAorICAgIC8vIGFuaW1hdGlvbiBz
ZXR0aW5ncyB0aGFuIHRoZSBrZXlib2FyZC4KKyAgICBjb25zdCBTY3JvbGxBbmltYXRvclNldHRp
bmdzOjpTZXR0aW5ncyAqc2V0dGluZ3M7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAg
IGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoKKyAgICAgICAgc2V0dGluZ3MgPSAmc2Nyb2xsQW5pbWF0
b3JTZXR0aW5ncygpLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkRlZmF1bHRdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5TGluZToKKyAgICAgICAgc2V0dGluZ3Mg
PSAmc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGlu
Z3M6OktleWJvYXJkTGluZV07CisgICAgICAgIG11bHRpcGxpZXIgKj0gMS41OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGFnZToKKyAgICAgICAgc2V0dGluZ3MgPSAmc2Nyb2xs
QW5pbWF0b3JTZXR0aW5ncygpLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OktleWJv
YXJkUGFnZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDoKKyAgICAg
ICAgaWYgKGZhYnMobXVsdGlwbGllcikgPiAyMCkKKyAgICAgICAgICAgIHNldHRpbmdzID0gJnNj
cm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5zZXR0aW5nc1tTY3JvbGxBbmltYXRvclNldHRpbmdzOjpN
b3VzZVdoZWVsXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0dGluZ3MgPSAmc2Nyb2xs
QW5pbWF0b3JTZXR0aW5ncygpLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlRyYWNr
cGFkXTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc2V0dGluZ3MgPSAm
c2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6
OkRlZmF1bHRdOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbmltYXRl
IGp1bXBpbmcgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGRvY3VtZW50LiA/Pz8KKyAg
ICBpZiAoIXNldHRpbmdzLT5pc0VuYWJsZWQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisK
KyAgICAvLyBUaGlzIGlzIGFuIGFuaW1hdGFibGUgc2Nyb2xsLiBDYWxjdWxhdGUgdGhlIHNjcm9s
bCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9udGFsRGF0YTsKKworICAg
IGZsb2F0IHNjcm9sbGFibGVTaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKTsKKyAgICBib29sIHJlc3VsdCA9IGRhdGEtPnVw
ZGF0ZURhdGFGcm9tU2V0dGluZ3Mob3JpZW50YXRpb24sIHN0ZXAsIG11bHRpcGxpZXIsIHNjcm9s
bGFibGVTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXVEY6OmN1cnJlbnRUaW1lKCksIHNldHRpbmdzKTsKKyAgICBpZiAoIWRhdGEtPm1fYW5pbWF0
aW9uVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICByZXN1bHQgJj0gZGF0YS0+YW5pbWF0ZVNj
cm9sbChXVEY6OmN1cnJlbnRUaW1lKCkpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxh
eSk7CisgICAgfQorICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6c2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzdG9wQW5pbWF0
aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRp
bWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKKworICAgIG1faG9yaXpvbnRhbERhdGEucmVz
ZXQoKTsKKyAgICAqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MgPSBvZmZzZXQueCgpOwor
ICAgIG1faG9yaXpvbnRhbERhdGEubV9kZXNpcmVkUG9zID0gb2Zmc2V0LngoKTsKKworICAgIG1f
dmVydGljYWxEYXRhLnJlc2V0KCk7CisgICAgKm1fdmVydGljYWxEYXRhLm1fY3VycmVudFBvcyA9
IG9mZnNldC55KCk7CisgICAgbV92ZXJ0aWNhbERhdGEubV9kZXNpcmVkUG9zID0gb2Zmc2V0Lnko
KTsKKworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW06OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bT4qIHRpbWVyKQoreworICAgIGlmICgodGltZXIgPT0gJm1faG9yaXpvbnRhbERhdGEubV9h
bmltYXRpb25UaW1lcikgPworICAgICAgICBtX2hvcml6b250YWxEYXRhLmFuaW1hdGVTY3JvbGwo
V1RGOjpjdXJyZW50VGltZSgpKSA6CisgICAgICAgIG1fdmVydGljYWxEYXRhLmFuaW1hdGVTY3Jv
bGwoV1RGOjpjdXJyZW50VGltZSgpKSkKKyAgICAgICAgdGltZXItPnN0YXJ0T25lU2hvdChhbmlt
YXRpb25UaW1lckRlbGF5KTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJB
eGlzRGF0YSogZGF0YSkKK3sKKyAgICBpZiAoZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTcxYzNjYmRhYTJmMzA2NGM1MTEwNDQ0MDZk
MmYyZTcxNzg4NzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bV9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1faAorCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorCitjbGFzcyBTY3JvbGxBbmltYXRvckNocm9taXVtVGVzdDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxBbmltYXRvckNocm9taXVtIDogcHVibGlj
IFNjcm9sbEFuaW1hdG9yIHsKKyAgcHVibGljOgorICAgIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0o
U2Nyb2xsYWJsZUFyZWEqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNocm9taXVtKCk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisK
KyAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgOjpTY3JvbGxBbmltYXRvckNocm9taXVtVGVz
dDsKKworICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW0qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpOworICAgICAgICB2
b2lkIHJlc2V0KCk7CisgICAgICAgIGJvb2wgdXBkYXRlRGF0YUZyb21TZXR0aW5ncyhTY3JvbGxi
YXJPcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgZmxvYXQgc2Nyb2xs
YWJsZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgY3Vy
cmVudFRpbWUsIGNvbnN0IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlNldHRpbmdzKik7CisgICAg
ICAgIGJvb2wgYW5pbWF0ZVNjcm9sbChkb3VibGUgY3VycmVudFRpbWUpOworCisgICAgICAgIHN0
YXRpYyBkb3VibGUgY3VydmVJbnRlZ3JhbEF0KFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1cnZl
LCBkb3VibGUgdCk7CisgICAgICAgIHN0YXRpYyBkb3VibGUgY3VydmVBcmVhKFNjcm9sbEFuaW1h
dG9yU2V0dGluZ3M6OkN1cnZlLCBkb3VibGUgc3RhcnRULCBkb3VibGUgZW5kVCk7CisgICAgICAg
IHN0YXRpYyBkb3VibGUgYXR0YWNrQ3VydmUoU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUs
IGRvdWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHN0YXJ0UG9zLCBkb3VibGUgYXR0YWNrUG9zKTsKKyAgICAgICAgc3Rh
dGljIGRvdWJsZSByZWxlYXNlQ3VydmUoU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUsIGRv
dWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSByZWxlYXNlUG9zLCBkb3VibGUgZGVzaXJlZFBvcyk7CisKKyAgICAgICAg
ZmxvYXQqIG1fY3VycmVudFBvczsKKyAgICAgICAgZG91YmxlIG1fY3VycmVudFZlbG9jaXR5Owor
CisgICAgICAgIGRvdWJsZSBtX2Rlc2lyZWRQb3M7CisgICAgICAgIGRvdWJsZSBtX2Rlc2lyZWRW
ZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fY29hc3RWZWxvY2l0eTsKKworICAgICAgICBkb3Vi
bGUgbV9zdGFydFBvczsKKyAgICAgICAgZG91YmxlIG1fc3RhcnRUaW1lOworICAgICAgICBkb3Vi
bGUgbV9zdGFydFZlbG9jaXR5OworCisgICAgICAgIGRvdWJsZSBtX2FuaW1hdGlvblRpbWU7Cisg
ICAgICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25UaW1lOworCisgICAgICAgIGRvdWJsZSBtX2F0
dGFja1BvczsKKyAgICAgICAgZG91YmxlIG1fYXR0YWNrVGltZTsKKyAgICAgICAgZG91YmxlIG1f
YXR0YWNrT2Zmc2V0OworICAgICAgICBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSBtX2F0
dGFja0N1cnZlOworCisgICAgICAgIGRvdWJsZSBtX3JlbGVhc2VQb3M7CisgICAgICAgIGRvdWJs
ZSBtX3JlbGVhc2VUaW1lOworICAgICAgICBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSBt
X3JlbGVhc2VDdXJ2ZTsKKworICAgICAgICBkb3VibGUgbV9mbGluZ1RpbWU7CisgICAgICAgIFNj
cm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1cnZlIG1fZmxpbmdDdXJ2ZTsKKworICAgICAgICBib29s
IG1fYm91bmNlOworICAgICAgICBib29sIG1fZmxpbmc7CisgICAgICAgIGRvdWJsZSBtX2ZsaW5n
QW1vdW50OworICAgICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworCisg
ICAgICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0+IG1fYW5pbWF0aW9uVGltZXI7Cisg
ICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgYW5pbWF0aW9uVGltZXJEZWxheTsKKwor
ICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVt
PiopOworICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsK
KworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92
ZXJ0aWNhbERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
QW5pbWF0b3JTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvclNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGM0YzdkODU4MGU1NDRmZjA2
MWViYjkyOTRlMWEzYzZjMWMxZmJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
cy5oIgorCisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MmIGdsb2JhbFNjcm9sbEFuaW1hdG9yU2V0
dGluZ3MoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
cywgc2V0dGluZ3MsICgpKTsKKyAgICByZXR1cm4gc2V0dGluZ3M7Cit9CisKK3ZvaWQgc2V0U2Ny
b2xsQW5pbWF0b3JTZXR0aW5ncyhjb25zdCBTY3JvbGxBbmltYXRvclNldHRpbmdzJiBzZXR0aW5n
cykKK3sKKyAgICBnbG9iYWxTY3JvbGxBbmltYXRvclNldHRpbmdzKCkgPSBzZXR0aW5nczsKK30K
KworY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncyYgc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygp
Cit7CisgICAgcmV0dXJuIGdsb2JhbFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKTsKK30KKwordm9p
ZCBzZXRTY3JvbGxBbmltYXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGdsb2JhbFNj
cm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5lbmFibGVkID0gZW5hYmxlZDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwYTEwM2IzMzVhZmRj
M2E5OGM2M2MxYmNiMWI3OWE0MjA4NGE0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvclNldHRpbmdzLmgKQEAgLTAsMCAr
MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NfaAorI2RlZmluZSBTY3JvbGxB
bmltYXRvclNldHRpbmdzX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgU2Nyb2xs
QW5pbWF0b3JTZXR0aW5ncyB7CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgRGVmYXVsdCA9IDAs
CisgICAgICAgIEtleWJvYXJkTGluZSwKKyAgICAgICAgS2V5Ym9hcmRQYWdlLAorICAgICAgICBN
b3VzZVdoZWVsLAorICAgICAgICBUcmFja3BhZAorICAgIH07CisKKyAgICBlbnVtIEN1cnZlIHsK
KyAgICAgICAgTGluZWFyLAorICAgICAgICBRdWFkcmF0aWMsCisgICAgICAgIEN1YmljLAorICAg
ICAgICBCb3VuY2UKKyAgICB9OworCisgICAgLy8gQ2FuIGJlIG92ZXJzcGVjaWZpZWQuIGFuaW1h
dGlvblRpbWUgdGFrZXMgcHJpb3JpdHkgb3ZlciByZWxlYXNlVGltZSB0YWtlcyBwcmlvcml0eSBv
dmVyIGF0dGFja1RpbWUuCisgICAgLy8gTWlzc2luZzogaG93IHRvIHNwZWNpZnkgYW5pbWF0aW9u
IHRpbWUgYWNjdW11bGF0aW9uIChlLmcuLCBwdXJlIGFkZGl0aXZlLCBhc3ltcHRvdGljIHRvIGEg
bGltaXQgd2l0aCBhIGN1cnZlPykKKyAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIGJvb2wg
aXNFbmFibGVkOworCisgICAgICAgIGRvdWJsZSBhbmltYXRpb25UaW1lOworCisgICAgICAgIEN1
cnZlIGF0dGFja0N1cnZlOworICAgICAgICBkb3VibGUgYXR0YWNrVGltZTsKKworICAgICAgICBD
dXJ2ZSByZWxlYXNlQ3VydmU7CisgICAgICAgIGRvdWJsZSByZWxlYXNlVGltZTsKKworICAgICAg
ICBib29sIGlzQm91bmNlRW5hYmxlZDsKKworICAgICAgICBib29sIGlzRmxpbmdFbmFibGVkOwor
ICAgICAgICBDdXJ2ZSBmbGluZ0N1cnZlOworICAgICAgICBkb3VibGUgZmxpbmdUaW1lOworICAg
ICAgICBkb3VibGUgZmxpbmdNaW5pbXVtU2xvcGU7CisgICAgfSBTZXR0aW5nczsKKworICAgIFNl
dHRpbmdzIHNldHRpbmdzWzVdOworICAgIGJvb2wgZW5hYmxlZDsKKworICAgIC8vIEFsbG93IGZv
ciBwZXItcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uCisgICAgU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
cygpOworfTsKKworLy8gRnVuY3Rpb25zIHRvIHNldCBvciByZXRyaWV2ZSB0aGUgZ2xvYmFsIHNj
cm9sbCBhbmltYXRpb24gc2V0dGluZ3MuCit2b2lkIHNldFNjcm9sbEFuaW1hdG9yU2V0dGluZ3Mo
Y29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncyYpOworY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0
aW5ncyYgc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpOwordm9pZCBzZXRTY3JvbGxBbmltYXRvckVu
YWJsZWQoYm9vbCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDBhM2ExZDgwYzgzNWVlM2YzZTllZDI4Y2JjZDZiZWM0ZTNh
ZTIzMDAuLjUwNzBiODQ1OGE3NjRkOTc0MTRjM2Y4YTk1OTZhNmI4N2RhYmI3MDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDYtMDEgIFNjb3R0IEJ5
ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBpbml0
aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBzY3JvbGxpbmcgYW5pbWF0b3IgaW4gdGhlIENo
cm9taXVtIHBsYXRmb3JtIGRpcmVjdG9yeSwgYWRkIGluIGEgc2V0dGluZ3MgbWVjaGFuaXNtLCBp
bmNsdWRpbmcgcnVuLXRpbWUKKyAgICAgICAgZW5hYmxlbWVudCBvZiB0aGUgc2Nyb2xsaW5nIGFu
aW1hdG9yLiBUaGUgc21vb3RoIHNjcm9sbGluZyBjb2RlIGlzIGNvbXBpbGVkIG91dCBieSBkZWZh
dWx0LiBUZXN0cyB0byBmb2xsb3cuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoK
KyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2V0dGluZ3NJbXBsOjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcik6CisgICAgICAgICogc3JjL1dl
YlNldHRpbmdzSW1wbC5oOgorCiAyMDExLTA2LTAxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZp
ZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODc3
ODguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCAz
NjE5MjczNGE2ZjczOGMzMDc5YjFiMjQ1MTBkYWEwZDcyNTljNDFmLi4yM2ZmY2NjMjBmNmJhNzNl
NTIyYzQxN2U0ZDNiMDk1NTcyMjU5ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNldHRpbmdzLmgKQEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldEZ1bGxTY3JlZW5FbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChib29sKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wpID0gMDsKIAogcHJvdGVjdGVk
OgogICAgIH5XZWJTZXR0aW5ncygpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggZjM3NDQ4ZjNmNjEwNTg0ZjhhMzUyOTg4OGNmM2Jk
NDEzNDA0MWQwOS4uNTQzY2VhYzFiOWIyMzM2OWE5YTQ3NTc5MWZjMTgxOTgyODcyNWMwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC00
MTcsNCArNDE3LDE0IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBbGxvd1J1bm5pbmdPZklu
c2VjdXJlQ29udGVudChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0QWxsb3dSdW5u
aW5nT2ZJbnNlY3VyZUNvbnRlbnQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBs
OjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sIGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpCisgICAgbV9zZXR0aW5ncy0+c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3Io
ZW5hYmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQor
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAppbmRleCBjMGU4YTNkYWRlMjNiMzVlMjIxNGE2OThlMGU4NjM1NTEx
MzFlMjgyLi40ZTg1MGJiODUwNmUxZjBkYWMyNjdiZTg4NmIwZjcwNjEyZGJlZWM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtMTE2LDYgKzEx
Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9v
bCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGJv
b2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChi
b29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCk7CiAK
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2V0dGluZ3MqIG1fc2V0dGluZ3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95781</attachid>
            <date>2011-06-02 11:19:23 -0700</date>
            <delta_ts>2011-06-02 18:21:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61878-20110602111922.patch</filename>
            <type>text/plain</type>
            <size>38869</size>
            <attacher name="Scott Byer">scottbyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc5MjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNDAzM2ExNWJjZDdmZjI2
ZTM0NzcwMjUwYzRkODgxNmI2ZThhOGJiLi5hOTNiOTdmMTNmYTRhYWFkMDNlN2VkZmJmMjY1MGRm
ZTg3MGQ3Y2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDYtMDEgIFNjb3R0
IEJ5ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBp
bml0aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBzY3JvbGxpbmcgYW5pbWF0b3IgaW4gdGhl
IENocm9taXVtIHBsYXRmb3JtIGRpcmVjdG9yeSwgYWRkIGluIGEgc2V0dGluZ3MgbWVjaGFuaXNt
LCBpbmNsdWRpbmcgcnVuLXRpbWUKKyAgICAgICAgZW5hYmxlbWVudCBvZiB0aGUgc2Nyb2xsaW5n
IGFuaW1hdG9yLiBUaGUgc21vb3RoIHNjcm9sbGluZyBjb2RlIGlzIGNvbXBpbGVkIG91dCBieSBk
ZWZhdWx0LiBUZXN0cyB0byBmb2xsb3cuCisKKyAgICAgICAgQ3VycmVudGx5LCB0ZXN0aW5nIGlz
IG1hbnVhbCwgYW5kIHRoZSBjb2RlIGlzIG5vdCBjb21waWxlZCBpbiBieSBkZWZhdWx0LiBBdXRv
bWF0ZWQgdGVzdHMgd2lsbCBiZSBidWlsdCBhcyBpbnRlcmVzdGluZyB1c2VyIGlucHV0IGNhc2Vz
IGFyZSBmb3VuZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL1Nl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNjcm9sbEFuaW1hdG9yRW5hYmxlZCk6CisgICAgICAgICog
cGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
U2V0dGluZ3M6OlNjcm9sbEFuaW1hdG9yU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpQZXJBeGlzRGF0YTo6Y3VydmVJbnRlZ3JhbEF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpjdXJ2ZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmF0dGFja0N1
cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNE
YXRhOjpyZWxlYXNlQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bTo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6dXBkYXRlRGF0YUZyb21TZXR0
aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlz
RGF0YTo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpTY3JvbGxBbmltYXRvckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW06On5TY3JvbGxBbmltYXRvckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6YW5pbWF0aW9uVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpzdG9w
QW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvclNldHRpbmdzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpn
bG9iYWxTY3JvbGxBbmltYXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNjcm9s
bEFuaW1hdG9yU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsQW5pbWF0b3JTZXR0
aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRTY3JvbGxBbmltYXRvckVuYWJsZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuaDogQWRkZWQu
CisKIDIwMTEtMDYtMDIgIE5hb2tpIFRha2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDEwMDNiOWFlMTdkMjUzOGQ1ZTA2ZWZiN2YwMTQwY2YxN2ZhMWFmN2EuLmM5ZDc2ZWMyZDk1ODli
NjNmZThmNTFjZDQ1MzBiNzQwNjNiYTE5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4MzQsNiAr
MzgzNCwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9i
amVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9i
amVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JD
aHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxB
bmltYXRvckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9s
bEFuaW1hdG9yU2V0dGluZ3MuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvclNldHRpbmdzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0n
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0u
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggODc4YTliODJmNmE4ZGI2NGU0OWQ4
MzEyNDQ3OTUwNDgzNTNmZDcxZC4uMzI5NjM5YWY2NGM1MGY5ZjkzOTc1OGUyMmQ4YjY2ODM1ZDBl
YjlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTQyLDYgKzQyLDEwIEBACiAjaW5j
bHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KIAorI2lmIEVOQUJMRShTTU9P
VEhfU0NST0xMSU5HKQorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yU2V0dGluZ3MuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xODEs
NiArMTg1LDkgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3Nob3Vs
ZEluamVjdFVzZXJTY3JpcHRzSW5Jbml0aWFsRW1wdHlEb2N1bWVudChmYWxzZSkKICAgICAsIG1f
YWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQodHJ1ZSkKICAgICAsIG1fYWxsb3dSdW5uaW5n
T2ZJbnNlY3VyZUNvbnRlbnQodHJ1ZSkKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAg
ICAsIG1fZW5hYmxlU2Nyb2xsQW5pbWF0b3IoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fbG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5VGltZXIodGhpcywgJlNldHRpbmdzOjpsb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHlUaW1lckZpcmVkKQogewogICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4g
Y3JlYXRlZCB5ZXQsIHNvIHdlIGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZyAKQEAgLTc1NSw0
ICs3NjIsMTYgQEAgdm9pZCBTZXR0aW5nczo6c2V0VGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGJv
b2wgZW5hYmxlZCkKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCit2
b2lkIFNldHRpbmdzOjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sIGZsYWcpCit7CisgICAg
c2V0U2Nyb2xsQW5pbWF0b3JFbmFibGVkKGZsYWcpOworfQorCitib29sIFNldHRpbmdzOjpzY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxBbmltYXRvclNl
dHRpbmdzKCkuZW5hYmxlZDsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmgKaW5kZXggODk5Yzk3YzRlN2Q4NTlmYzU1YTNmYzQ1MTFiNzFiYWUz
ZGE5MWM0NC4uNTIwZTAwZDRmM2RmNjVhNjQxMmY1MTliZTY0NmVhOTkzNTk1ODE0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaApAQCAtNDA1LDYgKzQwNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoYm9vbCBmbGFn
KSB7IG1fYWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQgPSBmbGFnOyB9CiAgICAgICAgIGJv
b2wgYWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
UnVubmluZ09mSW5zZWN1cmVDb250ZW50OyB9CiAKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElO
RykKKyAgICAgICAgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sIGZsYWcpOworICAg
ICAgICBib29sIHNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpIGNvbnN0OworI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBQYWdlKiBtX3BhZ2U7CiAKQEAgLTUxMCw2ICs1MTUsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zaG91bGRJbmplY3RVc2VyU2NyaXB0c0lu
SW5pdGlhbEVtcHR5RG9jdW1lbnQgOiAxOwogICAgICAgICBib29sIG1fYWxsb3dEaXNwbGF5T2ZJ
bnNlY3VyZUNvbnRlbnQgOiAxOwogICAgICAgICBib29sIG1fYWxsb3dSdW5uaW5nT2ZJbnNlY3Vy
ZUNvbnRlbnQgOiAxOworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICAgICBib29s
IG1fZW5hYmxlU2Nyb2xsQW5pbWF0b3IgOiAxOworI2VuZGlmCiAKICAgICAgICAgVGltZXI8U2V0
dGluZ3M+IG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQgbG9h
ZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVmNDYxMzk2Y2IyODMxMjQxMjYyM2VhYmM5OTE0
MjAwZWFmZTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsNDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKKyNp
bmNsdWRlICJTY3JvbGxBbmltYXRvclNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgZG91YmxlIGtUaWNrVGltZSA9IC4wMTY2OworCitTY3JvbGxBbmltYXRvclNldHRpbmdzOjpT
Y3JvbGxBbmltYXRvclNldHRpbmdzKCkKK3sKKyAgICAvLyBEaXNhYmxlZCBieSBkZWZhdWx0IGZv
ciBub3cuCisgICAgZW5hYmxlZCA9IGZhbHNlOworCisgICAgU2V0dGluZ3MgaW5pdGlhbCA9IHsg
ZmFsc2UsIDAuMjUsIExpbmVhciwgMC4wMSwgTGluZWFyLCAwLjAxLCBmYWxzZSwgZmFsc2UsIExp
bmVhciwgMCwgMCB9OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKQorICAgICAgICBz
ZXR0aW5nc1tpXSA9IGluaXRpYWw7CisKKyAgICBTZXR0aW5ncyBrZXlib2FyZExpbmUgPSB7IHRy
dWUsIDcgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgMyAqIGtUaWNrVGltZSwgUXVhZHJhdGljLCAz
ICoga1RpY2tUaW1lLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
LCBRdWFkcmF0aWMsIDAsIDAgfTsKKyAgICBzZXR0aW5nc1tLZXlib2FyZExpbmVdID0ga2V5Ym9h
cmRMaW5lOworCisgICAgU2V0dGluZ3Mga2V5Ym9hcmRQYWdlID0geyB0cnVlLCAxNSAqIGtUaWNr
VGltZSwgUXVhZHJhdGljLCA1ICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDUgKiBrVGlja1RpbWUs
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIFF1YWRyYXRpYywg
MCwgMCB9OworICAgIHNldHRpbmdzW0tleWJvYXJkUGFnZV0gPSBrZXlib2FyZFBhZ2U7CisKKyAg
ICBTZXR0aW5ncyBtb3VzZVdoZWVsID0geyB0cnVlLCAxMSAqIGtUaWNrVGltZSwgUXVhZHJhdGlj
LCAzICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDMgKiBrVGlja1RpbWUsIGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIFF1YWRyYXRpYywgMCwgMCB9OworICAgIHNldHRp
bmdzW01vdXNlV2hlZWxdID0gbW91c2VXaGVlbDsKK30KKworUGFzc093blB0cjxTY3JvbGxBbmlt
YXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEpCit7CisgICAgaWYgKHNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5lbmFibGVkKQorICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0oc2Nyb2xsYWJsZUFy
ZWEpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVB
cmVhKSk7Cit9CisKKy8vIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIHRpbWVyIGRlbGF5IC0gaG93
IG11Y2ggc21hbGxlciB0aGFuIGEgdGljayBkb2VzIGl0IG5lZWQgdG8gYmU/Citjb25zdCBkb3Vi
bGUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6YW5pbWF0aW9uVGltZXJEZWxheSA9IGtUaWNrVGlt
ZTsKKworZG91YmxlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpjdXJ2ZUlu
dGVncmFsQXQoU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUgY3VydmUsIGRvdWJsZSB0KQor
eworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6
OkxpbmVhcjoKKyAgICAgICAgcmV0dXJuIHQgKiB0IC8gMjsKKyAgICBjYXNlIFNjcm9sbEFuaW1h
dG9yU2V0dGluZ3M6OlF1YWRyYXRpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAvIDM7Cisg
ICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdWJpYzoKKyAgICAgICAgcmV0dXJuIHQg
KiB0ICogdCAqIHQgLyA0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Qm91bmNl
OgorICAgICAgICBkb3VibGUgeCwgYXJlYTsKKyAgICAgICAgaWYgKHQgPCAxIC8gMi43NSkKKyAg
ICAgICAgICAgIHJldHVybiAyLjUyMDgzICogdCAqIHQgKiB0OworICAgICAgICB4ID0gMSAvIDIu
NzU7CisgICAgICAgIGFyZWEgPSAyLjUyMDgzICogeCAqIHggKiB4OworICAgICAgICBpZiAodCA8
IDIgLyAyLjc1KSB7CisgICAgICAgICAgICBkb3VibGUgdDEgPSB0IC0gMS41IC8gMi43NTsKKyAg
ICAgICAgICAgIHJldHVybiBhcmVhICsgMi41MjA4MyAqIHQxICogKHQxICogdDEgKyAwLjI5NzUx
KTsKKyAgICAgICAgfQorICAgICAgICB4ID0gMiAvIDIuNzU7CisgICAgICAgIC8vIFRoZSBsYXN0
IHR3byBib3VuY2VzIGFyZW4ndCBlbm91Z2ggdG8gYWZmZWN0IHRoaW5ncy4KKyAgICAgICAgcmV0
dXJuIGFyZWEgKyAyLjUyMDgzICogeCAqICh4ICogeCArIDB4Mjk3NTEpOworICAgIH0KK30KKwor
ZG91YmxlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpjdXJ2ZUFyZWEoU2Ny
b2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUgY3VydmUsIGRvdWJsZSBzdGFydFQsIGRvdWJsZSBl
bmRUKQoreworICAgIHN0YXRpYyBkb3VibGUgY3VydmVBcmVhW10gPSB7IDEuMCwgMC41LCAwLjMz
LCAwLjEgfTsKKyAgICBkb3VibGUgc3RhcnRWYWx1ZSA9IDA7CisgICAgZG91YmxlIGVuZFZhbHVl
ID0gY3VydmVBcmVhW2N1cnZlXTsKKworICAgIGlmIChzdGFydFQpCisgICAgICAgIHN0YXJ0VmFs
dWUgPSBjdXJ2ZUludGVncmFsQXQoY3VydmUsIHN0YXJ0VCk7CisgICAgaWYgKGVuZFQgIT0gMSkK
KyAgICAgICAgZW5kVmFsdWUgPSBjdXJ2ZUludGVncmFsQXQoY3VydmUsIGVuZFQpOworICAgIHJl
dHVybiBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWU7Cit9CisKK2RvdWJsZSBTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpQZXJBeGlzRGF0YTo6YXR0YWNrQ3VydmUoU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6
Q3VydmUgY3VydmUsIGRvdWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydFBvcywg
ZG91YmxlIGF0dGFja1BvcykKK3sKKyAgICBkb3VibGUgdCA9IGRlbHRhVCAvIGN1cnZlVDsKKyAg
ICBkb3VibGUgcG9zaXRpb25GYWN0b3I7CisgICAgc3dpdGNoIChjdXJ2ZSkgeworICAgIGNhc2Ug
U2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6TGluZWFyOgorICAgICAgICBwb3NpdGlvbkZhY3RvciA9
IHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6UXVh
ZHJhdGljOgorICAgICAgICBwb3NpdGlvbkZhY3RvciA9IHQgKiB0OworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1YmljOgorICAgICAgICBwb3NpdGlv
bkZhY3RvciA9IHQgKiB0ICogdDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBz
dGFydFBvcyArIHBvc2l0aW9uRmFjdG9yICogKGF0dGFja1BvcyAtIHN0YXJ0UG9zKTsKK30KKwor
ZG91YmxlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpyZWxlYXNlQ3VydmUo
U2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUgY3VydmUsIGRvdWJsZSBkZWx0YVQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
Y3VydmVULCBkb3VibGUgcmVsZWFzZVBvcywgZG91YmxlIGRlc2lyZWRQb3MpCit7CisgICAgZG91
YmxlIHQgPSBkZWx0YVQgLyBjdXJ2ZVQ7CisgICAgZG91YmxlIGludlQgPSAxIC0gdDsKKyAgICBk
b3VibGUgcG9zaXRpb25GYWN0b3I7CisgICAgc3dpdGNoIChjdXJ2ZSkgeworICAgIGNhc2UgU2Ny
b2xsQW5pbWF0b3JTZXR0aW5nczo6TGluZWFyOgorICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDEu
MCAtIGludlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
czo6UXVhZHJhdGljOgorICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDEuMCAtIGludlQgKiBpbnZU
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1Ymlj
OgorICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDEuMCAtIGludlQgKiBpbnZUICogaW52VDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpCb3VuY2U6Cisg
ICAgICAgIGlmICh0IDwgMSAvIDIuNzUpCisgICAgICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDcu
NTYyNSAqIHQgKiB0OworICAgICAgICBlbHNlIGlmICh0IDwgMiAvIDIuNzUpIHsKKyAgICAgICAg
ICAgIGRvdWJsZSB0MSA9IHQgLSAxLjUgLyAyLjc1OworICAgICAgICAgICAgcG9zaXRpb25GYWN0
b3IgPSA3LjU2MjUgKiB0MSAqIHQxICsgLjc1OworICAgICAgICB9IGVsc2UgaWYgKHQgPCAyLjUg
LyAyLjc1KSB7CisgICAgICAgICAgICBkb3VibGUgdDIgPSB0IC0gMi4yNSAvIDIuNzU7CisgICAg
ICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDcuNTYyNSAqIHQyICogdDIgKyAuOTM3NTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHQgLT0gMi42MjUgLyAyLjc1OworICAgICAgICAgICAg
cG9zaXRpb25GYWN0b3IgPSA3LjU2MjUgKiB0ICogdCArIC45ODQzNzU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZWxlYXNlUG9zICsgKHBvc2l0aW9uRmFj
dG9yICogKGRlc2lyZWRQb3MgLSByZWxlYXNlUG9zKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yQ2hy
b21pdW06OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvckNocm9taXVtKiBw
YXJlbnQsIGZsb2F0KiBjdXJyZW50UG9zKQorICAgIDogbV9jdXJyZW50UG9zKGN1cnJlbnRQb3Mp
CisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHBhcmVudCwgJlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06
OmFuaW1hdGlvblRpbWVyRmlyZWQpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6cmVzZXQoKQoreworICAgIG1fY3VycmVudFZl
bG9jaXR5ID0gMDsKKworICAgIG1fZGVzaXJlZFBvcyA9IDA7CisgICAgbV9kZXNpcmVkVmVsb2Np
dHkgPSAwOworCisgICAgbV9zdGFydFBvcyA9IDA7CisgICAgbV9zdGFydFRpbWUgPSAwOworICAg
IG1fc3RhcnRWZWxvY2l0eSA9IDA7CisKKyAgICBtX2FuaW1hdGlvblRpbWUgPSAwOworICAgIG1f
bGFzdEFuaW1hdGlvblRpbWUgPSAwOworCisgICAgbV9hdHRhY2tQb3MgPSAwOworICAgIG1fYXR0
YWNrVGltZSA9IDA7CisgICAgbV9hdHRhY2tPZmZzZXQgPSAwOworICAgIG1fYXR0YWNrQ3VydmUg
PSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpRdWFkcmF0aWM7CisKKyAgICBtX3JlbGVhc2VQb3Mg
PSAwOworICAgIG1fcmVsZWFzZVRpbWUgPSAwOworICAgIG1fcmVsZWFzZUN1cnZlID0gU2Nyb2xs
QW5pbWF0b3JTZXR0aW5nczo6UXVhZHJhdGljOworCisgICAgbV9mbGluZ1RpbWUgPSAwOworICAg
IG1fZmxpbmdDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlF1YWRyYXRpYzsKKworICAg
IG1fYm91bmNlID0gZmFsc2U7CisgICAgbV9mbGluZyA9IGZhbHNlOworICAgIG1fZmxpbmdBbW91
bnQgPSAwOworfQorCisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6
OnVwZGF0ZURhdGFGcm9tU2V0dGluZ3MoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IGZsb2F0IHN0ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IG11bHRpcGxpZXIsIGZsb2F0IHNjcm9sbGFibGVTaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgY3VycmVudFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjcm9sbEFuaW1hdG9yU2V0
dGluZ3M6OlNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0
byBiZSBwYXJhbWV0ZXJpemVkIHNvIHRoYXQgSSBjYW4gdHJ5IGRpZmZlcmVudCBjdXJ2ZXMgYmV0
d2VlbiB0aGUgYmFzZSBhbmltYXRpb24gdGltZSBhbmQgYQorICAgIC8vIG1heGltdW0gYW5pbWF0
aW9uIHRpbWUsIGJhc2VkIG9uIGN1cnJlbnQgdmVsb2NpdHksIHdoaWNoIHNob3VsZCBhbHNvIGVu
ZCB1cCBiZWluZyBjbG9zZSB0byB0aGUgZmxpbmcgdGltZSwgaWYKKyAgICAvLyBsaW1pdGVkIChz
ZWUgYmVsb3cpLgorICAgIGRvdWJsZSByZW1haW5pbmdBbmltYXRpb25UaW1lID0gbV9hbmltYXRp
b25UaW1lIC0gbV9sYXN0QW5pbWF0aW9uVGltZSArIG1fc3RhcnRUaW1lOworICAgIG1fYW5pbWF0
aW9uVGltZSA9IChyZW1haW5pbmdBbmltYXRpb25UaW1lIC8gMikgKyBzZXR0aW5ncy0+YW5pbWF0
aW9uVGltZTsKKworICAgIC8vIFRob3VnaHRzIG9uIGZsaW5nLiBGbGluZyBzaG91bGQgYWx3YXlz
IGJlIHByZXBhcmVkIGZvciwgYnV0IHNob3VsZG4ndCBiZSBhY3R1YWxseSBzdGFydGVkIHVudGls
IHdlJ3JlIHN1cmUgdGhlCisgICAgLy8gdXNlciBpcyBubyBsb25nZXIgZmlkZGxpbmcgd2l0aCB0
aGUgZGV2aWNlIHRoYXQncyBkb2luZyB0aGUgZmxpbmcuIFRodXMsIHRoZSBmbGluZyB0aW1lIHJl
YWxseSBzaG91bGQgYmUKKyAgICAvLyBzcGVjaWZpZWQgdGhlIG90aGVyIHdheSwgcGVyIGRldmlj
ZSAtIGhvdyBsb25nIHNpbmNlIHRoZSBsYXN0IHNjcm9sbCBtZXNzYWdlIGZyb20gdGhhdCBkZXZp
Y2UgYmVmb3JlIHdlIGNvbnNpZGVyCisgICAgLy8gdGhlIHVzZXIgdG8gaGF2ZSBsZXQgZ28sIGFu
ZCBmb3IgdGhlIGZsaW5nIG1vZGVsIGFuZCBpdCdzIG11Y2gtZmFydGhlci1vdXQgZGVzaXJlZCBz
Y3JvbGwgcG9zaXRpb24gdG8gdGFrZSBvdmVyCisgICAgLy8gZnJvbSB0aGUgYW5pbWF0aW9uIG1v
ZGVsLgorCisgICAgLy8gRklYTUU6IE5lZWQgdG8gdGhpbmsgb2YgcG9zc2libGUgZmxpbmcgbW9k
ZWxzLiBQcm9qZWN0aW9uIGFsb25nIGEgc2xvcGUsIHByb3Blcmx5IHBpbm5lZD8gSnVzdCBwaW4g
dGhlIHNsb3BlPworICAgIC8vIEhhdmUgYSBzcGVlZCBsaW1pdCBhbmQgbGV0IHRoZSB0aW1lIGZs
b2F0IG1vcmU/IEhhdmUgYSBtYXggdGltZSBhcyB3ZWxsLCBwcmlvcml0aXplIHRpbWUgb3Igc3Bl
ZWQ/CisgICAgaWYgKHNldHRpbmdzLT5pc0ZsaW5nRW5hYmxlZCkgeworICAgICAgICBpZiAobV9h
bmltYXRpb25UaW1lID4gMiAqIHNldHRpbmdzLT5hbmltYXRpb25UaW1lKSB7CisgICAgICAgICAg
ICBtX2ZsaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZSAqPSAzOworICAg
ICAgICAgICAgbXVsdGlwbGllciAqPSAyOworICAgICAgICB9IGVsc2UgaWYgKG1fYW5pbWF0aW9u
VGltZSA8IDEuMiAqIHNldHRpbmdzLT5hbmltYXRpb25UaW1lKQorICAgICAgICAgICAgbV9mbGlu
ZyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2hhdGV2ZXIgd2UgZG8g
Zm9yIGFkZGluZyB0b2dldGhlciBhbmltYXRpb24gdGltZXMgYWxzbyBiZSByZWZsZWN0ZWQgaW4g
dGhlIGF0dGFjayBhbmQgcmVsZWFzZQorICAgIC8vIHRpbWVzIC0gYXMgYSBwZXJjZW50YWdlIG9m
IHRoZSBuZXcgYW5pbWF0aW9uIHRpbWUgbWF5YmU/CisgICAgbV9hdHRhY2tUaW1lID0gc2V0dGlu
Z3MtPmF0dGFja1RpbWU7CisgICAgbV9yZWxlYXNlVGltZSA9IHNldHRpbmdzLT5yZWxlYXNlVGlt
ZTsKKyAgICBtX2F0dGFja0N1cnZlID0gc2V0dGluZ3MtPmF0dGFja0N1cnZlOworICAgIG1fcmVs
ZWFzZUN1cnZlID0gc2V0dGluZ3MtPnJlbGVhc2VDdXJ2ZTsKKyAgICBtX2ZsaW5nQ3VydmUgPSBz
ZXR0aW5ncy0+ZmxpbmdDdXJ2ZTsKKworICAgIC8vIEknbSB0aGlua2luZyB0aGF0IGZsaW5nIHRp
bWUgc2hvdWxkIGJlIDJ4IHRoZSBleHBlY3RlZCBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIGV2ZW50
cyBmcm9tIHRoZSBzcGVjaWZpYyBkZXZpY2UgLQorICAgIC8vIGUuZy4sIDEvNTB0aCBzZWNvbmQg
Zm9yIDEwMEh6IGRldmljZXMgbGlrZSB0aGUgbW91c2Ugd2hlZWwgKGFuZCB0b3VjaD8pLiAxLzEw
MHRoIHNlY29uZCBmb3Igc29tZXRoaW5nIGxpa2UgYSBoaWdoCisgICAgLy8gc2FtcGxlIGZyZXF1
ZW5jeSB0YWJsZXQuIFRoZXJlJ3MgYSB0ZW5zaW9uIHRoZXJlIGJldHdlZW4gdG91Y2ggZHJhZ3Mg
d2FudGluZyBsb3cgbGF0ZW5jeSBhbmQgaGF2aW5nIGVub3VnaCB0aW1lCisgICAgLy8gdG8gZmln
dXJlIG91dCB0aGUgZmxpbmcgd2l0aG91dCB0aGUgbW91c2UgdXAgZXZlbnRzLiBXaGljaCBpcyB3
aHkgZmxpbmcgYmVoYXZpb3IgKGFuZCBldmVudHVhbCBmbGluZyB0YXJnZXRpbmcpCisgICAgLy8g
YmVsb25ncyBpbiB0aGUgZ2VzdHVyZSByZWNvZ25pemVyLiBUaG91Z2ggcmVjb2duaXppbmcgZmxp
bmdzIG9uIGEgbW91c2Ugd2hlZWwgd2lsbCBiZSBpbnRlcmVzdGluZy4uLgorICAgIG1fZmxpbmdU
aW1lID0gc2V0dGluZ3MtPmZsaW5nVGltZTsKKworICAgIC8vIFByaW9yaXRpemUgb3VyIHdheSBv
dXQgb2Ygb3ZlciBjb25zdHJhaW50LgorICAgIGlmIChtX2F0dGFja1RpbWUgKyBtX3JlbGVhc2VU
aW1lID4gbV9hbmltYXRpb25UaW1lKSB7CisgICAgICAgIGlmIChtX3JlbGVhc2VUaW1lID4gbV9h
bmltYXRpb25UaW1lKQorICAgICAgICAgICAgbV9yZWxlYXNlVGltZSA9IG1fYW5pbWF0aW9uVGlt
ZTsKKyAgICAgICAgbV9hdHRhY2tUaW1lID0gbV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGlt
ZTsKKyAgICB9CisKKyAgICBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisKKyAgICBpZiAo
IW1fZGVzaXJlZFBvcykKKyAgICAgICAgbV9kZXNpcmVkUG9zID0gKm1fY3VycmVudFBvczsKKyAg
ICBmbG9hdCBuZXdQb3MgPSBtX2Rlc2lyZWRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpOworCisg
ICAgLy8gRklYTUU6IFJlYWxseSwgdGhlIGJvdW5jZSBjdXJ2ZSBzaG91bGQgYmUgYWN0aXZhdGVk
IG9ubHkgd2hlbiB1bmRlciB0aGUgZmxpbmcgcHJvZmlsZS4gVGhlIGJvdW5jZSBlbmFibGVkIHNo
b3VsZAorICAgIC8vIGdvIGF3YXkgYXMgYSBzZXBhcmF0ZSBmbGFnLgorICAgIGlmIChuZXdQb3Mg
PCAwIHx8IG5ld1BvcyA+IHNjcm9sbGFibGVTaXplKSB7CisgICAgICAgIGlmIChzZXR0aW5ncy0+
aXNCb3VuY2VFbmFibGVkKSB7CisgICAgICAgICAgICBtX2JvdW5jZSA9IHRydWU7CisgICAgICAg
ICAgICBtX3JlbGVhc2VDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkJvdW5jZTsKKyAg
ICAgICAgICAgIG1fZmxpbmdDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkJvdW5jZTsK
KyAgICAgICAgfQorICAgICAgICBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihuZXdQb3MsIHNj
cm9sbGFibGVTaXplKSwgMC4wZik7CisgICAgfSBlbHNlCisgICAgICAgIG1fYm91bmNlID0gZmFs
c2U7CisKKyAgICBpZiAobmV3UG9zID09IG1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9kZXNpcmVkUG9zID0gbmV3UG9zOworCisgICAgaWYgKCFtX3N0YXJ0VGlt
ZSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgdGhlIHRpbWUgZnJvbSB0aGUg
ZXZlbnQgdGhhdCBnb3QgdXMgaGVyZS4KKyAgICAgICAgbV9zdGFydFRpbWUgPSBjdXJyZW50VGlt
ZSAtIGtUaWNrVGltZSAvIDI7CisgICAgICAgIG1fc3RhcnRQb3MgPSAqbV9jdXJyZW50UG9zOwor
ICAgICAgICBtX2xhc3RBbmltYXRpb25UaW1lID0gbV9zdGFydFRpbWU7CisgICAgfQorICAgIG1f
c3RhcnRWZWxvY2l0eSA9IG1fY3VycmVudFZlbG9jaXR5OworCisgICAgZG91YmxlIHJlbWFpbmlu
Z0RlbHRhID0gbV9kZXNpcmVkUG9zIC0gKm1fY3VycmVudFBvczsKKworICAgIGRvdWJsZSBhdHRh
Y2tBcmVhID0gMDsKKyAgICBkb3VibGUgZGVsdGFUID0gbV9sYXN0QW5pbWF0aW9uVGltZSAtIG1f
c3RhcnRUaW1lOworICAgIGRvdWJsZSByZW1haW5pbmdBdHRhY2tUaW1lID0gc3RkOjptYXgobV9h
dHRhY2tUaW1lIC0gZGVsdGFULCAwLik7CisKKyAgICBpZiAocmVtYWluaW5nQXR0YWNrVGltZSA+
IDApIHsKKyAgICAgICAgZG91YmxlIGF0dGFja1Nwb3QgPSAobV9sYXN0QW5pbWF0aW9uVGltZSAt
IG1fc3RhcnRUaW1lKSAvIG1fYXR0YWNrVGltZTsKKyAgICAgICAgZG91YmxlIGF0dGFja0Jhc2Vs
aW5lID0gbV9kZXNpcmVkVmVsb2NpdHkgPyBtX2N1cnJlbnRWZWxvY2l0eSAvIG1fZGVzaXJlZFZl
bG9jaXR5IDogMDsKKyAgICAgICAgYXR0YWNrQXJlYSA9IGF0dGFja0Jhc2VsaW5lICogcmVtYWlu
aW5nQXR0YWNrVGltZQorICAgICAgICAgICAgICAgICsgKDEgLSBhdHRhY2tCYXNlbGluZSkgKiBy
ZW1haW5pbmdBdHRhY2tUaW1lICogY3VydmVBcmVhKG1fYXR0YWNrQ3VydmUsIGF0dGFja1Nwb3Qs
IDEpOworICAgIH0KKworCisgICAgZG91YmxlIHJlbGVhc2VBcmVhID0gbV9yZWxlYXNlVGltZSAq
IGN1cnZlQXJlYShtX3JlbGVhc2VDdXJ2ZSwgMCwgMSk7CisgICAgZG91YmxlIHN1c3RhaW5BcmVh
ID0gc3RkOjptYXgobV9hbmltYXRpb25UaW1lIC0gcmVtYWluaW5nQXR0YWNrVGltZSAtIG1fcmVs
ZWFzZVRpbWUsIDAuKTsKKworICAgIG1fZGVzaXJlZFZlbG9jaXR5ID0gcmVtYWluaW5nRGVsdGEg
LyAoYXR0YWNrQXJlYSArIHN1c3RhaW5BcmVhICsgcmVsZWFzZUFyZWEpOworICAgIG1fcmVsZWFz
ZVBvcyA9IG1fZGVzaXJlZFBvcyAtIG1fZGVzaXJlZFZlbG9jaXR5ICogcmVsZWFzZUFyZWE7CisK
KyAgICBpZiAoYXR0YWNrQXJlYSkgeworICAgICAgICBkb3VibGUgY3VycmVudEF0dGFja1BvcyA9
IG1fZGVzaXJlZFZlbG9jaXR5ID8gYXR0YWNrQ3VydmUobV9hdHRhY2tDdXJ2ZSwgZGVsdGFULCBt
X2F0dGFja1RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhcnRQb3MsIG1fYXR0YWNrUG9zKSA6IG1fc3RhcnRQb3M7
CisgICAgICAgIG1fYXR0YWNrUG9zID0gKm1fY3VycmVudFBvcyArIG1fZGVzaXJlZFZlbG9jaXR5
ICogY3VydmVBcmVhKG1fYXR0YWNrQ3VydmUsIDAsIDEpICogbV9hdHRhY2tUaW1lOworICAgICAg
ICBkb3VibGUgbmV3QXR0YWNrUG9zID0gbV9kZXNpcmVkVmVsb2NpdHkgPyBhdHRhY2tDdXJ2ZSht
X2F0dGFja0N1cnZlLCBkZWx0YVQsIG1fYXR0YWNrVGltZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0UG9zLCBtX2F0dGFj
a1BvcykgOiBtX3N0YXJ0UG9zOworICAgICAgICBpZiAobV9jdXJyZW50VmVsb2NpdHkgJiYgbmV3
QXR0YWNrUG9zICE9IGN1cnJlbnRBdHRhY2tQb3MpCisgICAgICAgICAgICBtX2F0dGFja09mZnNl
dCArPSBjdXJyZW50QXR0YWNrUG9zIC0gbmV3QXR0YWNrUG9zOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fYXR0YWNrT2Zmc2V0ID0gMDsKKyAgICAgICAgbV9hdHRhY2tQb3MgPSAqbV9jdXJyZW50
UG9zOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRklYTUU6IEFkZCBpbiBqYW5r
IGRldGVjdGlvbiB0cmFjZSBldmVudHMgaW50byB0aGlzIGZ1bmN0aW9uLgorYm9vbCBTY3JvbGxB
bmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9sbChkb3VibGUgY3VycmVu
dFRpbWUpCit7CisgICAgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWU7IGdyYWJiaW5nIHRoZSBjdXJy
ZW50IHRpbWUgb25jZSBoZWxwcyBrZWVwIGEgY29uc2lzdGVudCBoZWFydGJlYXQuCisgICAgZG91
YmxlIGxhc3RTY3JvbGxJbnRlcnZhbCA9IGN1cnJlbnRUaW1lIC0gbV9sYXN0QW5pbWF0aW9uVGlt
ZTsKKyAgICBtX2xhc3RBbmltYXRpb25UaW1lID0gY3VycmVudFRpbWU7CisKKyAgICBib29sIGNv
bnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsKKyAgICBkb3VibGUgZGVsdGFUID0gY3VycmVudFRpbWUg
LSBtX3N0YXJ0VGltZTsKKworICAgIGlmIChkZWx0YVQgPiBtX2FuaW1hdGlvblRpbWUpIHsKKyAg
ICAgICAgY29udGludWVBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgKm1fY3VycmVudFBvcyA9
IG1fZGVzaXJlZFBvczsKKyAgICAgICAgcmVzZXQoKTsKKyAgICB9IGVsc2UgaWYgKGRlbHRhVCA8
IG1fYXR0YWNrVGltZSkgeworICAgICAgICAvLyBhdHRhY2sgaXMgYmFzZWQgb24gYWRkaW5nIHZl
bG9jaXR5CisgICAgICAgIGRvdWJsZSBuZXdQb3MgPSBhdHRhY2tDdXJ2ZShtX2F0dGFja0N1cnZl
LCBkZWx0YVQsIG1fYXR0YWNrVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhcnRQb3MsIG1fYXR0YWNrUG9zKSArIG1fYXR0YWNrT2Zmc2V0OworICAgICAgICAv
LyBEZWx0YSBpcyBhbHJlYWR5IHBpeGVscyAvIHNlYywgc2luY2UgdGhvc2UgYXJlIHRoZSB0d28g
aXRlbXMgd2UgaGFuZGVkIGluLgorICAgICAgICBpZiAobGFzdFNjcm9sbEludGVydmFsID4gMCkK
KyAgICAgICAgICAgIG1fY3VycmVudFZlbG9jaXR5ID0gKG5ld1BvcyAtICptX2N1cnJlbnRQb3Mp
IC8gbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICAqbV9jdXJyZW50UG9zID0gbmV3UG9zOwor
ICAgICAgICBkb3VibGUgcmVtYWluaW5nRGVsdGEgPSBtX3JlbGVhc2VQb3MgLSAqbV9jdXJyZW50
UG9zOworICAgICAgICBkb3VibGUgcmVtYWluaW5nVGltZSA9IG1fYW5pbWF0aW9uVGltZSAtIG1f
cmVsZWFzZVRpbWUgLSBkZWx0YVQ7CisgICAgICAgIG1fZGVzaXJlZFZlbG9jaXR5ID0gcmVtYWlu
aW5nRGVsdGEgLyByZW1haW5pbmdUaW1lOworICAgIH0gZWxzZSBpZiAoZGVsdGFUIDwgKG1fYW5p
bWF0aW9uVGltZSAtIG1fcmVsZWFzZVRpbWUpKSB7CisgICAgICAgIC8vIERlc2lyZWQgc3RlYWR5
IHN0YXRlIHZlbG9jaXR5IHJlLWVzdGltYXRpb24uCisgICAgICAgIGRvdWJsZSBuZXdQb3MgPSBt
X2F0dGFja1BvcyArIG1fYXR0YWNrT2Zmc2V0ICsgKGRlbHRhVCAtIG1fYXR0YWNrVGltZSkgKiBt
X2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgaWYgKGxhc3RTY3JvbGxJbnRlcnZhbCA+IDApCisg
ICAgICAgICAgICBtX2N1cnJlbnRWZWxvY2l0eSA9IChuZXdQb3MgLSAqbV9jdXJyZW50UG9zKSAv
IGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgKm1fY3VycmVudFBvcyA9IG5ld1BvczsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyByZWxlYXNlIGlzIGJhc2VkIG9uIHRhcmdldGluZyB0aGUg
ZXhhY3QgZmluYWwgcG9zaXRpb24uCisgICAgICAgIGRvdWJsZSByZWxlYXNlRGVsdGFUID0gZGVs
dGFUIC0gKG1fYW5pbWF0aW9uVGltZSAtIG1fcmVsZWFzZVRpbWUpOworICAgICAgICBkb3VibGUg
bmV3UG9zID0gcmVsZWFzZUN1cnZlKG1fcmVsZWFzZUN1cnZlLCByZWxlYXNlRGVsdGFULCBtX3Jl
bGVhc2VUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVsZWFz
ZVBvcywgbV9kZXNpcmVkUG9zKTsKKyAgICAgICAgLy8gTm9ybWFsaXplIHZlbG9jaXR5IHRvIGEg
cGVyIHNlY29uZCBhbW91bnQuIENvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZm9yIGphbmsuCisgICAg
ICAgIGlmIChsYXN0U2Nyb2xsSW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV9jdXJyZW50VmVs
b2NpdHkgPSAobmV3UG9zIC0gKm1fY3VycmVudFBvcykgLyBsYXN0U2Nyb2xsSW50ZXJ2YWw7Cisg
ICAgICAgICptX2N1cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgfQorICAgIHJldHVybiBjb250aW51
ZUFuaW1hdGlvbjsKK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxBbmlt
YXRvcihzY3JvbGxhYmxlQXJlYSkKKyAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3Vy
cmVudFBvc1gpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSkKK3sK
K30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6flNjcm9sbEFuaW1hdG9yQ2hyb21pdW0oKQor
eworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsKKyAg
ICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEpOworfQorCitib29s
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIC8v
IFRPRE8oc2NvdHRieWVyKTogZ2V0IHRoZSB0eXBlIHBhc3NlZCBpbi4gTW91c2VXaGVlbCBjb3Vs
ZCBhbHNvIGJlIGJ5IGxpbmUsIGJ1dCBzaG91bGQgc3RpbGwgaGF2ZSBkaWZmZXJlbnQKKyAgICAv
LyBhbmltYXRpb24gc2V0dGluZ3MgdGhhbiB0aGUga2V5Ym9hcmQuCisgICAgY29uc3QgU2Nyb2xs
QW5pbWF0b3JTZXR0aW5nczo6U2V0dGluZ3MgKnNldHRpbmdzOworICAgIHN3aXRjaCAoZ3JhbnVs
YXJpdHkpIHsKKyAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6CisgICAgICAgIHNldHRpbmdzID0g
JnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5zZXR0aW5nc1tTY3JvbGxBbmltYXRvclNldHRpbmdz
OjpEZWZhdWx0XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6CisgICAg
ICAgIHNldHRpbmdzID0gJnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5zZXR0aW5nc1tTY3JvbGxB
bmltYXRvclNldHRpbmdzOjpLZXlib2FyZExpbmVdOworICAgICAgICBtdWx0aXBsaWVyICo9IDEu
NTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeVBhZ2U6CisgICAgICAgIHNldHRp
bmdzID0gJnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5zZXR0aW5nc1tTY3JvbGxBbmltYXRvclNl
dHRpbmdzOjpLZXlib2FyZFBhZ2VdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5
UGl4ZWw6CisgICAgICAgIGlmIChmYWJzKG11bHRpcGxpZXIpID4gMjApCisgICAgICAgICAgICBz
ZXR0aW5ncyA9ICZzY3JvbGxBbmltYXRvclNldHRpbmdzKCkuc2V0dGluZ3NbU2Nyb2xsQW5pbWF0
b3JTZXR0aW5nczo6TW91c2VXaGVlbF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldHRp
bmdzID0gJnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5zZXR0aW5nc1tTY3JvbGxBbmltYXRvclNl
dHRpbmdzOjpUcmFja3BhZF07CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHNldHRpbmdzID0gJnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKS5zZXR0aW5nc1tTY3JvbGxBbmlt
YXRvclNldHRpbmdzOjpEZWZhdWx0XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8g
RG9uJ3QgYW5pbWF0ZSBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBkb2N1
bWVudC4gPz8/CisgICAgaWYgKCFzZXR0aW5ncy0+aXNFbmFibGVkKQorICAgICAgICByZXR1cm4g
U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11
bHRpcGxpZXIpOworCisgICAgLy8gVGhpcyBpcyBhbiBhbmltYXRhYmxlIHNjcm9sbC4gQ2FsY3Vs
YXRlIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8gJm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRh
bERhdGE7CisKKyAgICBmbG9hdCBzY3JvbGxhYmxlU2l6ZSA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSk7CisgICAgYm9vbCByZXN1
bHQgPSBkYXRhLT51cGRhdGVEYXRhRnJvbVNldHRpbmdzKG9yaWVudGF0aW9uLCBzdGVwLCBtdWx0
aXBsaWVyLCBzY3JvbGxhYmxlU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1RGOjpjdXJyZW50VGltZSgpLCBzZXR0aW5ncyk7CisgICAgaWYgKCFk
YXRhLT5tX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgcmVzdWx0ICY9IGRh
dGEtPmFuaW1hdGVTY3JvbGwoV1RGOjpjdXJyZW50VGltZSgpKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1h
dGlvblRpbWVyRGVsYXkpOworICAgIH0KKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit7Cisg
ICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7CisKKyAgICBtX2hvcml6
b250YWxEYXRhLnJlc2V0KCk7CisgICAgKm1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50UG9zID0g
b2Zmc2V0LngoKTsKKyAgICBtX2hvcml6b250YWxEYXRhLm1fZGVzaXJlZFBvcyA9IG9mZnNldC54
KCk7CisKKyAgICBtX3ZlcnRpY2FsRGF0YS5yZXNldCgpOworICAgICptX3ZlcnRpY2FsRGF0YS5t
X2N1cnJlbnRQb3MgPSBvZmZzZXQueSgpOworICAgIG1fdmVydGljYWxEYXRhLm1fZGVzaXJlZFBv
cyA9IG9mZnNldC55KCk7CisKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW0+KiB0aW1lcikKK3sKKyAgICBpZiAoKHRpbWVyID09ICZtX2hvcml6
b250YWxEYXRhLm1fYW5pbWF0aW9uVGltZXIpID8KKyAgICAgICAgbV9ob3Jpem9udGFsRGF0YS5h
bmltYXRlU2Nyb2xsKFdURjo6Y3VycmVudFRpbWUoKSkgOgorICAgICAgICBtX3ZlcnRpY2FsRGF0
YS5hbmltYXRlU2Nyb2xsKFdURjo6Y3VycmVudFRpbWUoKSkpCisgICAgICAgIHRpbWVyLT5zdGFy
dE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSk7CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6c3RvcEFuaW1hdGlvblRpbWVy
SWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEtPm1fYW5pbWF0aW9u
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdG9wKCk7
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3MWMzY2JkYWEyZjMw
NjRjNTExMDQ0NDA2ZDJmMmU3MTc4ODc0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uaApAQCAtMCwwICsx
LDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1faAorI2RlZmluZSBTY3Jv
bGxBbmltYXRvckNocm9taXVtX2gKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisj
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvclNldHRp
bmdzLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bSA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CisgIHB1YmxpYzoKKyAgICBTY3JvbGxBbmlt
YXRvckNocm9taXVtKFNjcm9sbGFibGVBcmVhKik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bSgpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYpOworCisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIDo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVRlc3Q7CisKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgICAgICBQZXJB
eGlzRGF0YShTY3JvbGxBbmltYXRvckNocm9taXVtKiBwYXJlbnQsIGZsb2F0KiBjdXJyZW50UG9z
KTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICBib29sIHVwZGF0ZURhdGFGcm9tU2V0
dGluZ3MoU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIs
IGZsb2F0IHNjcm9sbGFibGVTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGN1cnJlbnRUaW1lLCBjb25zdCBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpTZXR0
aW5ncyopOworICAgICAgICBib29sIGFuaW1hdGVTY3JvbGwoZG91YmxlIGN1cnJlbnRUaW1lKTsK
KworICAgICAgICBzdGF0aWMgZG91YmxlIGN1cnZlSW50ZWdyYWxBdChTY3JvbGxBbmltYXRvclNl
dHRpbmdzOjpDdXJ2ZSwgZG91YmxlIHQpOworICAgICAgICBzdGF0aWMgZG91YmxlIGN1cnZlQXJl
YShTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSwgZG91YmxlIHN0YXJ0VCwgZG91YmxlIGVu
ZFQpOworICAgICAgICBzdGF0aWMgZG91YmxlIGF0dGFja0N1cnZlKFNjcm9sbEFuaW1hdG9yU2V0
dGluZ3M6OkN1cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUgY3VydmVULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydFBvcywgZG91YmxlIGF0dGFja1Bvcyk7
CisgICAgICAgIHN0YXRpYyBkb3VibGUgcmVsZWFzZUN1cnZlKFNjcm9sbEFuaW1hdG9yU2V0dGlu
Z3M6OkN1cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUgY3VydmVULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmVsZWFzZVBvcywgZG91YmxlIGRlc2lyZWRQb3Mp
OworCisgICAgICAgIGZsb2F0KiBtX2N1cnJlbnRQb3M7CisgICAgICAgIGRvdWJsZSBtX2N1cnJl
bnRWZWxvY2l0eTsKKworICAgICAgICBkb3VibGUgbV9kZXNpcmVkUG9zOworICAgICAgICBkb3Vi
bGUgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBtX2NvYXN0VmVsb2NpdHk7CisK
KyAgICAgICAgZG91YmxlIG1fc3RhcnRQb3M7CisgICAgICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsK
KyAgICAgICAgZG91YmxlIG1fc3RhcnRWZWxvY2l0eTsKKworICAgICAgICBkb3VibGUgbV9hbmlt
YXRpb25UaW1lOworICAgICAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uVGltZTsKKworICAgICAg
ICBkb3VibGUgbV9hdHRhY2tQb3M7CisgICAgICAgIGRvdWJsZSBtX2F0dGFja1RpbWU7CisgICAg
ICAgIGRvdWJsZSBtX2F0dGFja09mZnNldDsKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
czo6Q3VydmUgbV9hdHRhY2tDdXJ2ZTsKKworICAgICAgICBkb3VibGUgbV9yZWxlYXNlUG9zOwor
ICAgICAgICBkb3VibGUgbV9yZWxlYXNlVGltZTsKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3JTZXR0
aW5nczo6Q3VydmUgbV9yZWxlYXNlQ3VydmU7CisKKyAgICAgICAgZG91YmxlIG1fZmxpbmdUaW1l
OworICAgICAgICBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSBtX2ZsaW5nQ3VydmU7CisK
KyAgICAgICAgYm9vbCBtX2JvdW5jZTsKKyAgICAgICAgYm9vbCBtX2ZsaW5nOworICAgICAgICBk
b3VibGUgbV9mbGluZ0Ftb3VudDsKKyAgICAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbjsKKworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtPiBtX2FuaW1h
dGlvblRpbWVyOworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGFuaW1hdGlvblRp
bWVyRGVsYXk7CisKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bT4qKTsKKyAgICB2b2lkIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKFBl
ckF4aXNEYXRhKik7CisKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6b250YWxEYXRhOworICAgIFBl
ckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxB
bmltYXRvckNocm9taXVtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RjNGM3
ZDg1ODBlNTQ0ZmYwNjFlYmI5Mjk0ZTFhM2M2YzFjMWZiYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuY3Bw
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yU2V0dGluZ3MuaCIKKworI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxBbmltYXRvclNldHRpbmdzJiBnbG9iYWxTY3Jv
bGxBbmltYXRvclNldHRpbmdzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNjcm9sbEFu
aW1hdG9yU2V0dGluZ3MsIHNldHRpbmdzLCAoKSk7CisgICAgcmV0dXJuIHNldHRpbmdzOworfQor
Cit2b2lkIHNldFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0
aW5ncyYgc2V0dGluZ3MpCit7CisgICAgZ2xvYmFsU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpID0g
c2V0dGluZ3M7Cit9CisKK2NvbnN0IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MmIHNjcm9sbEFuaW1h
dG9yU2V0dGluZ3MoKQoreworICAgIHJldHVybiBnbG9iYWxTY3JvbGxBbmltYXRvclNldHRpbmdz
KCk7Cit9CisKK3ZvaWQgc2V0U2Nyb2xsQW5pbWF0b3JFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBnbG9iYWxTY3JvbGxBbmltYXRvclNldHRpbmdzKCkuZW5hYmxlZCA9IGVuYWJsZWQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MGExMDNiMzM1YWZkYzNhOThjNjNjMWJjYjFiNzlhNDIwODRhNDIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
cy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvclNldHRpbmdzX2gKKyNk
ZWZpbmUgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RydWN0IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MgeworICAgIGVudW0gVHlwZSB7CisgICAgICAg
IERlZmF1bHQgPSAwLAorICAgICAgICBLZXlib2FyZExpbmUsCisgICAgICAgIEtleWJvYXJkUGFn
ZSwKKyAgICAgICAgTW91c2VXaGVlbCwKKyAgICAgICAgVHJhY2twYWQKKyAgICB9OworCisgICAg
ZW51bSBDdXJ2ZSB7CisgICAgICAgIExpbmVhciwKKyAgICAgICAgUXVhZHJhdGljLAorICAgICAg
ICBDdWJpYywKKyAgICAgICAgQm91bmNlCisgICAgfTsKKworICAgIC8vIENhbiBiZSBvdmVyc3Bl
Y2lmaWVkLiBhbmltYXRpb25UaW1lIHRha2VzIHByaW9yaXR5IG92ZXIgcmVsZWFzZVRpbWUgdGFr
ZXMgcHJpb3JpdHkgb3ZlciBhdHRhY2tUaW1lLgorICAgIC8vIE1pc3Npbmc6IGhvdyB0byBzcGVj
aWZ5IGFuaW1hdGlvbiB0aW1lIGFjY3VtdWxhdGlvbiAoZS5nLiwgcHVyZSBhZGRpdGl2ZSwgYXN5
bXB0b3RpYyB0byBhIGxpbWl0IHdpdGggYSBjdXJ2ZT8pCisgICAgdHlwZWRlZiBzdHJ1Y3Qgewor
ICAgICAgICBib29sIGlzRW5hYmxlZDsKKworICAgICAgICBkb3VibGUgYW5pbWF0aW9uVGltZTsK
KworICAgICAgICBDdXJ2ZSBhdHRhY2tDdXJ2ZTsKKyAgICAgICAgZG91YmxlIGF0dGFja1RpbWU7
CisKKyAgICAgICAgQ3VydmUgcmVsZWFzZUN1cnZlOworICAgICAgICBkb3VibGUgcmVsZWFzZVRp
bWU7CisKKyAgICAgICAgYm9vbCBpc0JvdW5jZUVuYWJsZWQ7CisKKyAgICAgICAgYm9vbCBpc0Zs
aW5nRW5hYmxlZDsKKyAgICAgICAgQ3VydmUgZmxpbmdDdXJ2ZTsKKyAgICAgICAgZG91YmxlIGZs
aW5nVGltZTsKKyAgICAgICAgZG91YmxlIGZsaW5nTWluaW11bVNsb3BlOworICAgIH0gU2V0dGlu
Z3M7CisKKyAgICBTZXR0aW5ncyBzZXR0aW5nc1s1XTsKKyAgICBib29sIGVuYWJsZWQ7CisKKyAg
ICAvLyBBbGxvdyBmb3IgcGVyLXBsYXRmb3JtIGluaXRpYWxpemF0aW9uLgorICAgIFNjcm9sbEFu
aW1hdG9yU2V0dGluZ3MoKTsKK307CisKKy8vIEZ1bmN0aW9ucyB0byBzZXQgb3IgcmV0cmlldmUg
dGhlIGdsb2JhbCBzY3JvbGwgYW5pbWF0aW9uIHNldHRpbmdzLgordm9pZCBzZXRTY3JvbGxBbmlt
YXRvclNldHRpbmdzKGNvbnN0IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MmKTsKK2NvbnN0IFNjcm9s
bEFuaW1hdG9yU2V0dGluZ3MmIHNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKTsKK3ZvaWQgc2V0U2Ny
b2xsQW5pbWF0b3JFbmFibGVkKGJvb2wpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYjA5MTE1OTU2ZTA2NjFiYTkxN2Fi
YjA1MjA5Yjg1MDRkOGQ0NTQzLi4xM2Q1ZWRkNGNiN2RkZWM1MTFmMzIwMWY3Y2YwOWRiY2Q4NzQy
MTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2
LTAxICBTY290dCBCeWVyICA8c2NvdHRieWVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbW9vdGggc2Nyb2xsaW5nIGZvciBD
aHJvbWl1bSwgaW5pdGlhbCBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxODc4CisKKyAgICAgICAgQWRkIGluIGEgc2Nyb2xsaW5nIGFuaW1h
dG9yIGluIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybSBkaXJlY3RvcnksIGFkZCBpbiBhIHNldHRpbmdz
IG1lY2hhbmlzbSwgaW5jbHVkaW5nIHJ1bi10aW1lCisgICAgICAgIGVuYWJsZW1lbnQgb2YgdGhl
IHNjcm9sbGluZyBhbmltYXRvci4gVGhlIHNtb290aCBzY3JvbGxpbmcgY29kZSBpcyBjb21waWxl
ZCBvdXQgYnkgZGVmYXVsdC4gVGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgICogcHVibGljL1dl
YlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IpOgorICAg
ICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKwogMjAxMS0wNi0wMiAgTmFva2kgVGFrYW5v
ICA8dGFrYW5vLm5hb2tpQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
ZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApp
bmRleCAzNjE5MjczNGE2ZjczOGMzMDc5YjFiMjQ1MTBkYWEwZDcyNTljNDFmLi4yM2ZmY2NjMjBm
NmJhNzNlNTIyYzQxN2U0ZDNiMDk1NTcyMjU5ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldEZ1bGxTY3JlZW5FbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChib29sKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wpID0gMDsKIAogcHJv
dGVjdGVkOgogICAgIH5XZWJTZXR0aW5ncygpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggZjM3NDQ4ZjNmNjEwNTg0ZjhhMzUyOTg4
OGNmM2JkNDEzNDA0MWQwOS4uNTQzY2VhYzFiOWIyMzM2OWE5YTQ3NTc5MWZjMTgxOTgyODcyNWMw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3Bw
CkBAIC00MTcsNCArNDE3LDE0IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBbGxvd1J1bm5p
bmdPZkluc2VjdXJlQ29udGVudChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0QWxs
b3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGlu
Z3NJbXBsOjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sIGVuYWJsZWQpCit7CisjaWYgRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgbV9zZXR0aW5ncy0+c2V0RW5hYmxlU2Nyb2xsQW5p
bWF0b3IoZW5hYmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRp
ZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRleCBjMGU4YTNkYWRlMjNiMzVlMjIxNGE2OThlMGU4
NjM1NTExMzFlMjgyLi40ZTg1MGJiODUwNmUxZjBkYWMyNjdiZTg4NmIwZjcwNjEyZGJlZWM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtMTE2
LDYgKzExNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFNjcmVlbkVuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250
ZW50KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29u
dGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9v
bCk7CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2V0dGluZ3MqIG1fc2V0dGluZ3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95843</attachid>
            <date>2011-06-02 18:21:58 -0700</date>
            <delta_ts>2011-06-03 16:37:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61878-20110602182157.patch</filename>
            <type>text/plain</type>
            <size>48331</size>
            <attacher name="Scott Byer">scottbyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc5MjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNDAzM2ExNWJjZDdmZjI2
ZTM0NzcwMjUwYzRkODgxNmI2ZThhOGJiLi4xOTZiOGYyY2YwYTM5ZjQxODFlNThhN2ZiYmM0MmFk
YWQ5ZDk0MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDYtMDIgIFNjb3R0
IEJ5ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBp
bml0aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBzY3JvbGxpbmcgYW5pbWF0b3IgaW4gdGhl
IENocm9taXVtIHBsYXRmb3JtIGRpcmVjdG9yeSwgYWRkIGluIGEgc2V0dGluZ3MgbWVjaGFuaXNt
LCBpbmNsdWRpbmcgcnVuLXRpbWUKKyAgICAgICAgZW5hYmxlbWVudCBvZiB0aGUgc2Nyb2xsaW5n
IGFuaW1hdG9yLiBUaGUgc21vb3RoIHNjcm9sbGluZyBjb2RlIGlzIGNvbXBpbGVkIG91dCBieSBk
ZWZhdWx0LiBUZXN0cyB0byBmb2xsb3cuCisKKyAgICAgICAgQ3VycmVudGx5LCB0ZXN0aW5nIGlz
IG1hbnVhbCwgYW5kIHRoZSBjb2RlIGlzIG5vdCBjb21waWxlZCBpbiBieSBkZWZhdWx0LiBBdXRv
bWF0ZWQgdGVzdHMgd2lsbCBiZSBidWlsdCBhcyBpbnRlcmVzdGluZyB1c2VyIGlucHV0IGNhc2Vz
IGFyZSBmb3VuZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEFuaW1hdG9y
U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9T
ZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzY3JvbGxBbmltYXRvckVuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2V0dGluZ3M6OnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MpOgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvclNldHRpbmdz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNldHRpbmdzOjpj
cmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNldHRpbmdzOjpzZXRFbmFibGVT
Y3JvbGxBbmltYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNldHRpbmdz
OjpzY3JvbGxBbmltYXRvckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3JT
ZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0
YTo6Y3VydmVJbnRlZ3JhbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW06OlBlckF4aXNEYXRhOjpjdXJ2ZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmF0dGFja0N1cnZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpyZWxlYXNlQ3VydmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6
OlBlckF4aXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06
OlBlckF4aXNEYXRhOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpQZXJBeGlzRGF0YTo6dXBkYXRlRGF0YUZyb21TZXR0aW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6YW5pbWF0ZVNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06
On5TY3JvbGxBbmltYXRvckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW06OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6YW5pbWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5l
ZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvclNl
dHRpbmdzQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yU2V0dGluZ3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNl
dHRpbmdzQ2hyb21pdW06OlNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW06OnNldEVuYWJsZVNjcm9s
bEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJv
bWl1bTo6c2Nyb2xsQW5pbWF0b3JFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW0uaDogQWRkZWQuCisKIDIwMTEtMDYtMDIg
IE5hb2tpIFRha2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDEwMDNiOWFlMTdkMjUz
OGQ1ZTA2ZWZiN2YwMTQwY2YxN2ZhMWFmN2EuLjMyZDE5ZmY1ZjAwMTEyOGE3YjNmYmZjY2RiMWFm
YWJmMjBhMjRlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MTQsNiArMzYxNCw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3Mu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvclNldHRpbmdzLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsVmlldy5jcHAnLApAQCAtMzgzNCw2ICszODM2LDEwIEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5n
c0Nocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92
ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0nLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBlZjdkMjE1MDUyNzRlNmI2OTgyMDM5Y2FiNjBlMTMy
MmUwMWU5OWViLi5iZmQ4ODVmOTdiZjAwYjU4MWYzYWQ2MzViNWEzODcyMDI0YmVmMjE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvclNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0yMjQwLDYgKzIyNDEsMTUgQEAgdm9pZCBGcmFtZVZpZXc6
Om5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAogICAgICAgICAoKml0
KS0+c2Nyb2xsQW5pbWF0b3IoKS0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKIH0KIAorI2lmIEVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQorY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncyogRnJh
bWVWaWV3OjpzY3JvbGxBbmltYXRvclNldHRpbmdzKCkgY29uc3QKK3sKKyAgICBpZiAobV9wYWdl
ICYmIG1fcGFnZS0+c2V0dGluZ3MoKSkKKyAgICAgICAgcmV0dXJuIG1fcGFnZS0+c2V0dGluZ3Mo
KS0+c2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisK
ICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRGFz
aGJvYXJkUmVnaW9ucygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCA1YjczOTUwYjVk
NjE3NmFkN2UxMmY1ZmVlYTEyODE2MmNmZmY2YmEzLi4wMTZlMzQyYzI4ZjUwZWYyMmNmOWM3Yzk4
MzRlNGE3MmEwNzI2ODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTQ4LDYgKzQ4LDcg
QEAgY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3Q7CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CitjbGFzcyBTY3JvbGxB
bmltYXRvclNldHRpbmdzOwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBET01UaW1lU3Rh
bXA7CiAKQEAgLTMzNSw2ICszMzYsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNjb25uZWN0RnJvbVBhZ2UoKSB7IG1fcGFnZSA9IDA7IH0KIAorI2lmIEVOQUJMRShTTU9P
VEhfU0NST0xMSU5HKQorICAgIHZpcnR1YWwgY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncyog
c2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpIGNvbnN0OworI2VuZGlmCisKICAgICB2b2lkIGRlZmVy
cmVkUmVwYWludFRpbWVyRmlyZWQoVGltZXI8RnJhbWVWaWV3PiopOwogICAgIHZvaWQgZG9EZWZl
cnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCB1cGRhdGVEZWZlcnJlZFJlcGFpbnREZWxheSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCA4NzhhOWI4MmY2YThkYjY0ZTQ5ZDgzMTI0NDc5
NTA0ODM1M2ZkNzFkLi41YmViMDA2ZTE5YzUzZTNlNTJkZWE4OTc4ZTE2MzVlYjQzY2ZhNjk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRlICJT
dG9yYWdlTWFwLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JP
TExJTkcpCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE4Niw2ICsxOTAs
OSBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAvLyBBIEZyYW1lIG1heSBu
b3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9taWNTdHJp
bmcgCiAgICAgLy8gaGFzaCBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdC4KICAgICBBdG9taWNTdHJp
bmc6OmluaXQoKTsKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKyAgICBtX3Njcm9sbEFu
aW1hdG9yU2V0dGluZ3MgPSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpjcmVhdGUoKTsKKyNlbmRp
ZgogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkpCkBAIC03NTUsNCArNzYyLDI0IEBAIHZvaWQgU2V0
dGluZ3M6OnNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChib29sIGVuYWJsZWQpCiAjZW5kaWYK
IH0KIAorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQordm9pZCBTZXR0aW5nczo6c2V0RW5h
YmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKQoreworICAgIGlmIChtX3Njcm9sbEFuaW1hdG9y
U2V0dGluZ3MpCisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy0+c2V0RW5hYmxlU2Ny
b2xsQW5pbWF0b3IoZmxhZyk7Cit9CisKK2Jvb2wgU2V0dGluZ3M6OnNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncykKKyAgICAg
ICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy0+c2Nyb2xsQW5pbWF0b3JFbmFibGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBTY3JvbGxBbmltYXRvclNldHRpbmdz
KiBTZXR0aW5nczo6c2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5nZXQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKaW5kZXggODk5Yzk3YzRlN2Q4NTlmYzU1
YTNmYzQ1MTFiNzFiYWUzZGE5MWM0NC4uOWVjNjQyMmVlYmJkYjg2MzM3ZmU1ODQwZjQ4NTc2NjFh
MTYwYjEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIKICNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9k
ZS5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yU2V0dGluZ3MuaCIKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KQEAgLTQwNSw2ICs0MDYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGJvb2wgZmxhZykgeyBtX2FsbG93UnVu
bmluZ09mSW5zZWN1cmVDb250ZW50ID0gZmxhZzsgfQogICAgICAgICBib29sIGFsbG93UnVubmlu
Z09mSW5zZWN1cmVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1J1bm5pbmdPZkluc2Vj
dXJlQ29udGVudDsgfQogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgICAgIHZv
aWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKTsKKyAgICAgICAgYm9vbCBzY3Jv
bGxBbmltYXRvckVuYWJsZWQoKSBjb25zdDsKKyAgICAgICAgY29uc3QgU2Nyb2xsQW5pbWF0b3JT
ZXR0aW5ncyogc2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpIGNvbnN0OworI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBQYWdlKiBtX3BhZ2U7CiAKQEAgLTUxMCw2ICs1MTcsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zaG91bGRJbmplY3RVc2VyU2NyaXB0c0lu
SW5pdGlhbEVtcHR5RG9jdW1lbnQgOiAxOwogICAgICAgICBib29sIG1fYWxsb3dEaXNwbGF5T2ZJ
bnNlY3VyZUNvbnRlbnQgOiAxOwogICAgICAgICBib29sIG1fYWxsb3dSdW5uaW5nT2ZJbnNlY3Vy
ZUNvbnRlbnQgOiAxOworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICAgICBPd25Q
dHI8U2Nyb2xsQW5pbWF0b3JTZXR0aW5ncz4gbV9zY3JvbGxBbmltYXRvclNldHRpbmdzOworI2Vu
ZGlmCiAKICAgICAgICAgVGltZXI8U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
VGltZXI7CiAgICAgICAgIHZvaWQgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXJGaXJlZChU
aW1lcjxTZXR0aW5ncz4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JTZXR0aW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThmMDAyMTY4NDZmMzA2OTA1ZDNiNDdj
ODZkZWQ1YzMzMTU2MDI1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3MuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncy5oIgorCisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUVO
QUJMRShTTU9PVEhfU0NST0xMSU5HKQorUGFzc093blB0cjxTY3JvbGxBbmltYXRvclNldHRpbmdz
PiBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvclNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
clNldHRpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZjZDM3MWRkN2IxMjY4NTZkN2JkMTUwYjcwMDNkMmMz
OTliNTA3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yU2V0dGluZ3MuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0
b3JTZXR0aW5nc19oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NfaAorCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxB
bmltYXRvclNldHRpbmdzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxB
bmltYXRvclNldHRpbmdzPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVT
Y3JvbGxBbmltYXRvcihib29sIGZsYWcpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxBbmlt
YXRvckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCA3YjBmNWJhMDZlYWEyMzNiZWUz
ZDcwOGFiMjQ1MzQ1ZDZlMzEzYTAwLi43MDA4OTc2NGFiZTE2NzRkN2NjMDk0ZDhkY2ViMTNmYjYw
NjNkNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKQEAgLTM3
LDYgKzM3LDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1HZXN0dXJl
RXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsK
K2NsYXNzIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogY2xhc3MgR3JhcGhpY3NMYXllcjsKICNlbmRpZgpAQCAtMTM5LDYgKzE0MCw4IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbVBhZ2UoKSB7IH0KIAor
ICAgIHZpcnR1YWwgY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5ncyogc2Nyb2xsQW5pbWF0b3JT
ZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJpdmF0ZToKICAgICAvLyBOT1RFOiBP
bmx5IGNhbGxlZCBmcm9tIHRoZSBTY3JvbGxBbmltYXRvci4KICAgICBmcmllbmQgY2xhc3MgU2Ny
b2xsQW5pbWF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxBbmltYXRvckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkMTVjZThlMzRl
ZGJiZTEwNWQzZmMxNTJhMWE3NWE3YzNiNDFkODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtLmNwcApAQCAt
MCwwICsxLDQ1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yQ2hyb21pdW0uaCIKKworI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
Ik93bkFycmF5UHRyLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVt
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZG91YmxlIGtUaWNrVGltZSA9IC4wMTY2Owor
CitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEgJiYg
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKQorICAgICAgICAmJiBzY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3JTZXR0aW5ncygpLT5zY3JvbGxBbmltYXRvckVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVt
KHNjcm9sbGFibGVBcmVhKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRv
cihzY3JvbGxhYmxlQXJlYSkpOworfQorCisvLyBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSB0aW1l
ciBkZWxheSAtIGhvdyBtdWNoIHNtYWxsZXIgdGhhbiBhIHRpY2sgZG9lcyBpdCBuZWVkIHRvIGJl
PworY29uc3QgZG91YmxlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OmFuaW1hdGlvblRpbWVyRGVs
YXkgPSBrVGlja1RpbWU7CisKK2RvdWJsZSBTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlz
RGF0YTo6Y3VydmVJbnRlZ3JhbEF0KFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6Q3Vy
dmUgY3VydmUsIGRvdWJsZSB0KQoreworICAgIHN3aXRjaCAoY3VydmUpIHsKKyAgICBjYXNlIFNj
cm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6TGluZWFyOgorICAgICAgICByZXR1cm4gdCAq
IHQgLyAyOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpRdWFkcmF0
aWM6CisgICAgICAgIHJldHVybiB0ICogdCAqIHQgLyAzOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0
b3JTZXR0aW5nc0Nocm9taXVtOjpDdWJpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHQg
LyA0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpCb3VuY2U6Cisg
ICAgICAgIGRvdWJsZSB4LCBhcmVhOworICAgICAgICBpZiAodCA8IDEgLyAyLjc1KQorICAgICAg
ICAgICAgcmV0dXJuIDIuNTIwODMgKiB0ICogdCAqIHQ7CisgICAgICAgIHggPSAxIC8gMi43NTsK
KyAgICAgICAgYXJlYSA9IDIuNTIwODMgKiB4ICogeCAqIHg7CisgICAgICAgIGlmICh0IDwgMiAv
IDIuNzUpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0MSA9IHQgLSAxLjUgLyAyLjc1OworICAgICAg
ICAgICAgcmV0dXJuIGFyZWEgKyAyLjUyMDgzICogdDEgKiAodDEgKiB0MSArIDAuMjk3NTEpOwor
ICAgICAgICB9CisgICAgICAgIHggPSAyIC8gMi43NTsKKyAgICAgICAgLy8gVGhlIGxhc3QgdHdv
IGJvdW5jZXMgYXJlbid0IGVub3VnaCB0byBhZmZlY3QgdGhpbmdzLgorICAgICAgICByZXR1cm4g
YXJlYSArIDIuNTIwODMgKiB4ICogKHggKiB4ICsgMHgyOTc1MSk7CisgICAgfQorfQorCitkb3Vi
bGUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmN1cnZlQXJlYShTY3JvbGxB
bmltYXRvclNldHRpbmdzQ2hyb21pdW06OkN1cnZlIGN1cnZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0VCwgZG91Ymxl
IGVuZFQpCit7CisgICAgc3RhdGljIGRvdWJsZSBjdXJ2ZUFyZWFbXSA9IHsgMS4wLCAwLjUsIDAu
MzMsIDAuMSB9OworICAgIGRvdWJsZSBzdGFydFZhbHVlID0gMDsKKyAgICBkb3VibGUgZW5kVmFs
dWUgPSBjdXJ2ZUFyZWFbY3VydmVdOworCisgICAgaWYgKHN0YXJ0VCkKKyAgICAgICAgc3RhcnRW
YWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgc3RhcnRUKTsKKyAgICBpZiAoZW5kVCAhPSAx
KQorICAgICAgICBlbmRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgZW5kVCk7CisgICAg
cmV0dXJuIGVuZFZhbHVlIC0gc3RhcnRWYWx1ZTsKK30KKworZG91YmxlIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW06OlBlckF4aXNEYXRhOjphdHRhY2tDdXJ2ZShTY3JvbGxBbmltYXRvclNldHRpbmdz
Q2hyb21pdW06OkN1cnZlIGN1cnZlLCBkb3VibGUgZGVsdGFULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgY3VydmVULCBkb3Vi
bGUgc3RhcnRQb3MsIGRvdWJsZSBhdHRhY2tQb3MpCit7CisgICAgZG91YmxlIHQgPSBkZWx0YVQg
LyBjdXJ2ZVQ7CisgICAgZG91YmxlIHBvc2l0aW9uRmFjdG9yOworICAgIHN3aXRjaCAoY3VydmUp
IHsKKyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6TGluZWFyOgorICAg
ICAgICBwb3NpdGlvbkZhY3RvciA9IHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xs
QW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpRdWFkcmF0aWM6CisgICAgICAgIHBvc2l0aW9uRmFj
dG9yID0gdCAqIHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0
aW5nc0Nocm9taXVtOjpDdWJpYzoKKyAgICAgICAgcG9zaXRpb25GYWN0b3IgPSB0ICogdCAqIHQ7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gc3RhcnRQb3MgKyBwb3NpdGlvbkZh
Y3RvciAqIChhdHRhY2tQb3MgLSBzdGFydFBvcyk7Cit9CisKK2RvdWJsZSBTY3JvbGxBbmltYXRv
ckNocm9taXVtOjpQZXJBeGlzRGF0YTo6cmVsZWFzZUN1cnZlKFNjcm9sbEFuaW1hdG9yU2V0dGlu
Z3NDaHJvbWl1bTo6Q3VydmUgY3VydmUsIGRvdWJsZSBkZWx0YVQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgY3VydmVULCBk
b3VibGUgcmVsZWFzZVBvcywgZG91YmxlIGRlc2lyZWRQb3MpCit7CisgICAgZG91YmxlIHQgPSBk
ZWx0YVQgLyBjdXJ2ZVQ7CisgICAgZG91YmxlIGludlQgPSAxIC0gdDsKKyAgICBkb3VibGUgcG9z
aXRpb25GYWN0b3I7CisgICAgc3dpdGNoIChjdXJ2ZSkgeworICAgIGNhc2UgU2Nyb2xsQW5pbWF0
b3JTZXR0aW5nc0Nocm9taXVtOjpMaW5lYXI6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gMS4w
IC0gaW52VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdz
Q2hyb21pdW06OlF1YWRyYXRpYzoKKyAgICAgICAgcG9zaXRpb25GYWN0b3IgPSAxLjAgLSBpbnZU
ICogaW52VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdz
Q2hyb21pdW06OkN1YmljOgorICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDEuMCAtIGludlQgKiBp
bnZUICogaW52VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRp
bmdzQ2hyb21pdW06OkJvdW5jZToKKyAgICAgICAgaWYgKHQgPCAxIC8gMi43NSkKKyAgICAgICAg
ICAgIHBvc2l0aW9uRmFjdG9yID0gNy41NjI1ICogdCAqIHQ7CisgICAgICAgIGVsc2UgaWYgKHQg
PCAyIC8gMi43NSkgeworICAgICAgICAgICAgZG91YmxlIHQxID0gdCAtIDEuNSAvIDIuNzU7Cisg
ICAgICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDcuNTYyNSAqIHQxICogdDEgKyAuNzU7CisgICAg
ICAgIH0gZWxzZSBpZiAodCA8IDIuNSAvIDIuNzUpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0MiA9
IHQgLSAyLjI1IC8gMi43NTsKKyAgICAgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gNy41NjI1ICog
dDIgKiB0MiArIC45Mzc1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdCAtPSAyLjYy
NSAvIDIuNzU7CisgICAgICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDcuNTYyNSAqIHQgKiB0ICsg
Ljk4NDM3NTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJl
bGVhc2VQb3MgKyAocG9zaXRpb25GYWN0b3IgKiAoZGVzaXJlZFBvcyAtIHJlbGVhc2VQb3MpKTsK
K30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW0qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpCisgICAgOiBt
X2N1cnJlbnRQb3MoY3VycmVudFBvcykKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAm
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKKyAgICByZXNl
dCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpyZXNl
dCgpCit7CisgICAgbV9jdXJyZW50VmVsb2NpdHkgPSAwOworCisgICAgbV9kZXNpcmVkUG9zID0g
MDsKKyAgICBtX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisKKyAgICBtX3N0YXJ0UG9zID0gMDsKKyAg
ICBtX3N0YXJ0VGltZSA9IDA7CisgICAgbV9zdGFydFZlbG9jaXR5ID0gMDsKKworICAgIG1fYW5p
bWF0aW9uVGltZSA9IDA7CisgICAgbV9sYXN0QW5pbWF0aW9uVGltZSA9IDA7CisKKyAgICBtX2F0
dGFja1BvcyA9IDA7CisgICAgbV9hdHRhY2tUaW1lID0gMDsKKyAgICBtX2F0dGFja09mZnNldCA9
IDA7CisgICAgbV9hdHRhY2tDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6
UXVhZHJhdGljOworCisgICAgbV9yZWxlYXNlUG9zID0gMDsKKyAgICBtX3JlbGVhc2VUaW1lID0g
MDsKKyAgICBtX3JlbGVhc2VDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6
UXVhZHJhdGljOworCisgICAgbV9mbGluZ1RpbWUgPSAwOworICAgIG1fZmxpbmdDdXJ2ZSA9IFNj
cm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6UXVhZHJhdGljOworCisgICAgbV9ib3VuY2Ug
PSBmYWxzZTsKKyAgICBtX2ZsaW5nID0gZmFsc2U7CisgICAgbV9mbGluZ0Ftb3VudCA9IDA7Cit9
CisKKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6dXBkYXRlRGF0
YUZyb21TZXR0aW5ncyhTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3Rl
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciwgZmxvYXQgc2Nyb2xsYWJsZVNpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBjdXJyZW50VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0
aW5nc0Nocm9taXVtOjpTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gYmUgcGFyYW1ldGVyaXplZCBzbyB0aGF0IEkgY2FuIHRyeSBkaWZmZXJlbnQgY3Vy
dmVzIGJldHdlZW4gdGhlIGJhc2UgYW5pbWF0aW9uIHRpbWUgYW5kIGEKKyAgICAvLyBtYXhpbXVt
IGFuaW1hdGlvbiB0aW1lLCBiYXNlZCBvbiBjdXJyZW50IHZlbG9jaXR5LCB3aGljaCBzaG91bGQg
YWxzbyBlbmQgdXAgYmVpbmcgY2xvc2UgdG8gdGhlIGZsaW5nIHRpbWUsIGlmCisgICAgLy8gbGlt
aXRlZCAoc2VlIGJlbG93KS4KKyAgICBkb3VibGUgcmVtYWluaW5nQW5pbWF0aW9uVGltZSA9IG1f
YW5pbWF0aW9uVGltZSAtIG1fbGFzdEFuaW1hdGlvblRpbWUgKyBtX3N0YXJ0VGltZTsKKyAgICBt
X2FuaW1hdGlvblRpbWUgPSAocmVtYWluaW5nQW5pbWF0aW9uVGltZSAvIDIpICsgc2V0dGluZ3Mt
PmFuaW1hdGlvblRpbWU7CisKKyAgICAvLyBUaG91Z2h0cyBvbiBmbGluZy4gRmxpbmcgc2hvdWxk
IGFsd2F5cyBiZSBwcmVwYXJlZCBmb3IsIGJ1dCBzaG91bGRuJ3QgYmUgYWN0dWFsbHkgc3RhcnRl
ZCB1bnRpbCB3ZSdyZSBzdXJlIHRoZQorICAgIC8vIHVzZXIgaXMgbm8gbG9uZ2VyIGZpZGRsaW5n
IHdpdGggdGhlIGRldmljZSB0aGF0J3MgZG9pbmcgdGhlIGZsaW5nLiBUaHVzLCB0aGUgZmxpbmcg
dGltZSByZWFsbHkgc2hvdWxkIGJlCisgICAgLy8gc3BlY2lmaWVkIHRoZSBvdGhlciB3YXksIHBl
ciBkZXZpY2UgLSBob3cgbG9uZyBzaW5jZSB0aGUgbGFzdCBzY3JvbGwgbWVzc2FnZSBmcm9tIHRo
YXQgZGV2aWNlIGJlZm9yZSB3ZSBjb25zaWRlcgorICAgIC8vIHRoZSB1c2VyIHRvIGhhdmUgbGV0
IGdvLCBhbmQgZm9yIHRoZSBmbGluZyBtb2RlbCBhbmQgaXQncyBtdWNoLWZhcnRoZXItb3V0IGRl
c2lyZWQgc2Nyb2xsIHBvc2l0aW9uIHRvIHRha2Ugb3ZlcgorICAgIC8vIGZyb20gdGhlIGFuaW1h
dGlvbiBtb2RlbC4KKworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHRoaW5rIG9mIHBvc3NpYmxlIGZs
aW5nIG1vZGVscy4gUHJvamVjdGlvbiBhbG9uZyBhIHNsb3BlLCBwcm9wZXJseSBwaW5uZWQ/IEp1
c3QgcGluIHRoZSBzbG9wZT8KKyAgICAvLyBIYXZlIGEgc3BlZWQgbGltaXQgYW5kIGxldCB0aGUg
dGltZSBmbG9hdCBtb3JlPyBIYXZlIGEgbWF4IHRpbWUgYXMgd2VsbCwgcHJpb3JpdGl6ZSB0aW1l
IG9yIHNwZWVkPworICAgIGlmIChzZXR0aW5ncy0+aXNGbGluZ0VuYWJsZWQpIHsKKyAgICAgICAg
aWYgKG1fYW5pbWF0aW9uVGltZSA+IDIgKiBzZXR0aW5ncy0+YW5pbWF0aW9uVGltZSkgeworICAg
ICAgICAgICAgbV9mbGluZyA9IHRydWU7CisgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWUgKj0g
MzsKKyAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gMjsKKyAgICAgICAgfSBlbHNlIGlmIChtX2Fu
aW1hdGlvblRpbWUgPCAxLjIgKiBzZXR0aW5ncy0+YW5pbWF0aW9uVGltZSkKKyAgICAgICAgICAg
IG1fZmxpbmcgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdoYXRldmVy
IHdlIGRvIGZvciBhZGRpbmcgdG9nZXRoZXIgYW5pbWF0aW9uIHRpbWVzIGFsc28gYmUgcmVmbGVj
dGVkIGluIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UKKyAgICAvLyB0aW1lcyAtIGFzIGEgcGVyY2Vu
dGFnZSBvZiB0aGUgbmV3IGFuaW1hdGlvbiB0aW1lIG1heWJlPworICAgIG1fYXR0YWNrVGltZSA9
IHNldHRpbmdzLT5hdHRhY2tUaW1lOworICAgIG1fcmVsZWFzZVRpbWUgPSBzZXR0aW5ncy0+cmVs
ZWFzZVRpbWU7CisgICAgbV9hdHRhY2tDdXJ2ZSA9IHNldHRpbmdzLT5hdHRhY2tDdXJ2ZTsKKyAg
ICBtX3JlbGVhc2VDdXJ2ZSA9IHNldHRpbmdzLT5yZWxlYXNlQ3VydmU7CisgICAgbV9mbGluZ0N1
cnZlID0gc2V0dGluZ3MtPmZsaW5nQ3VydmU7CisKKyAgICAvLyBJJ20gdGhpbmtpbmcgdGhhdCBm
bGluZyB0aW1lIHNob3VsZCBiZSAyeCB0aGUgZXhwZWN0ZWQgYW1vdW50IG9mIHRpbWUgYmV0d2Vl
biBldmVudHMgZnJvbSB0aGUgc3BlY2lmaWMgZGV2aWNlIC0KKyAgICAvLyBlLmcuLCAxLzUwdGgg
c2Vjb25kIGZvciAxMDBIeiBkZXZpY2VzIGxpa2UgdGhlIG1vdXNlIHdoZWVsIChhbmQgdG91Y2g/
KS4gMS8xMDB0aCBzZWNvbmQgZm9yIHNvbWV0aGluZyBsaWtlIGEgaGlnaAorICAgIC8vIHNhbXBs
ZSBmcmVxdWVuY3kgdGFibGV0LiBUaGVyZSdzIGEgdGVuc2lvbiB0aGVyZSBiZXR3ZWVuIHRvdWNo
IGRyYWdzIHdhbnRpbmcgbG93IGxhdGVuY3kgYW5kIGhhdmluZyBlbm91Z2ggdGltZQorICAgIC8v
IHRvIGZpZ3VyZSBvdXQgdGhlIGZsaW5nIHdpdGhvdXQgdGhlIG1vdXNlIHVwIGV2ZW50cy4gV2hp
Y2ggaXMgd2h5IGZsaW5nIGJlaGF2aW9yIChhbmQgZXZlbnR1YWwgZmxpbmcgdGFyZ2V0aW5nKQor
ICAgIC8vIGJlbG9uZ3MgaW4gdGhlIGdlc3R1cmUgcmVjb2duaXplci4gVGhvdWdoIHJlY29nbml6
aW5nIGZsaW5ncyBvbiBhIG1vdXNlIHdoZWVsIHdpbGwgYmUgaW50ZXJlc3RpbmcuLi4KKyAgICBt
X2ZsaW5nVGltZSA9IHNldHRpbmdzLT5mbGluZ1RpbWU7CisKKyAgICAvLyBQcmlvcml0aXplIG91
ciB3YXkgb3V0IG9mIG92ZXIgY29uc3RyYWludC4KKyAgICBpZiAobV9hdHRhY2tUaW1lICsgbV9y
ZWxlYXNlVGltZSA+IG1fYW5pbWF0aW9uVGltZSkgeworICAgICAgICBpZiAobV9yZWxlYXNlVGlt
ZSA+IG1fYW5pbWF0aW9uVGltZSkKKyAgICAgICAgICAgIG1fcmVsZWFzZVRpbWUgPSBtX2FuaW1h
dGlvblRpbWU7CisgICAgICAgIG1fYXR0YWNrVGltZSA9IG1fYW5pbWF0aW9uVGltZSAtIG1fcmVs
ZWFzZVRpbWU7CisgICAgfQorCisgICAgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworCisg
ICAgaWYgKCFtX2Rlc2lyZWRQb3MpCisgICAgICAgIG1fZGVzaXJlZFBvcyA9ICptX2N1cnJlbnRQ
b3M7CisgICAgZmxvYXQgbmV3UG9zID0gbV9kZXNpcmVkUG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KTsKKworICAgIC8vIEZJWE1FOiBSZWFsbHksIHRoZSBib3VuY2UgY3VydmUgc2hvdWxkIGJlIGFj
dGl2YXRlZCBvbmx5IHdoZW4gdW5kZXIgdGhlIGZsaW5nIHByb2ZpbGUuIFRoZSBib3VuY2UgZW5h
YmxlZCBzaG91bGQKKyAgICAvLyBnbyBhd2F5IGFzIGEgc2VwYXJhdGUgZmxhZy4KKyAgICBpZiAo
bmV3UG9zIDwgMCB8fCBuZXdQb3MgPiBzY3JvbGxhYmxlU2l6ZSkgeworICAgICAgICBpZiAoc2V0
dGluZ3MtPmlzQm91bmNlRW5hYmxlZCkgeworICAgICAgICAgICAgbV9ib3VuY2UgPSB0cnVlOwor
ICAgICAgICAgICAgbV9yZWxlYXNlQ3VydmUgPSBTY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21p
dW06OkJvdW5jZTsKKyAgICAgICAgICAgIG1fZmxpbmdDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0
dGluZ3NDaHJvbWl1bTo6Qm91bmNlOworICAgICAgICB9CisgICAgICAgIG5ld1BvcyA9IHN0ZDo6
bWF4KHN0ZDo6bWluKG5ld1Bvcywgc2Nyb2xsYWJsZVNpemUpLCAwLjBmKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9ib3VuY2UgPSBmYWxzZTsKKworICAgIGlmIChuZXdQb3MgPT0gbV9kZXNpcmVk
UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Rlc2lyZWRQb3MgPSBuZXdQb3M7
CisKKyAgICBpZiAoIW1fc3RhcnRUaW1lKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSB0aGUgdGltZSBmcm9tIHRoZSBldmVudCB0aGF0IGdvdCB1cyBoZXJlLgorICAgICAgICBt
X3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lIC0ga1RpY2tUaW1lIC8gMjsKKyAgICAgICAgbV9zdGFy
dFBvcyA9ICptX2N1cnJlbnRQb3M7CisgICAgICAgIG1fbGFzdEFuaW1hdGlvblRpbWUgPSBtX3N0
YXJ0VGltZTsKKyAgICB9CisgICAgbV9zdGFydFZlbG9jaXR5ID0gbV9jdXJyZW50VmVsb2NpdHk7
CisKKyAgICBkb3VibGUgcmVtYWluaW5nRGVsdGEgPSBtX2Rlc2lyZWRQb3MgLSAqbV9jdXJyZW50
UG9zOworCisgICAgZG91YmxlIGF0dGFja0FyZWEgPSAwOworICAgIGRvdWJsZSBkZWx0YVQgPSBt
X2xhc3RBbmltYXRpb25UaW1lIC0gbV9zdGFydFRpbWU7CisgICAgZG91YmxlIHJlbWFpbmluZ0F0
dGFja1RpbWUgPSBzdGQ6Om1heChtX2F0dGFja1RpbWUgLSBkZWx0YVQsIDAuKTsKKworICAgIGlm
IChyZW1haW5pbmdBdHRhY2tUaW1lID4gMCkgeworICAgICAgICBkb3VibGUgYXR0YWNrU3BvdCA9
IChtX2xhc3RBbmltYXRpb25UaW1lIC0gbV9zdGFydFRpbWUpIC8gbV9hdHRhY2tUaW1lOworICAg
ICAgICBkb3VibGUgYXR0YWNrQmFzZWxpbmUgPSBtX2Rlc2lyZWRWZWxvY2l0eSA/IG1fY3VycmVu
dFZlbG9jaXR5IC8gbV9kZXNpcmVkVmVsb2NpdHkgOiAwOworICAgICAgICBhdHRhY2tBcmVhID0g
YXR0YWNrQmFzZWxpbmUgKiByZW1haW5pbmdBdHRhY2tUaW1lCisgICAgICAgICAgICAgICAgKyAo
MSAtIGF0dGFja0Jhc2VsaW5lKSAqIHJlbWFpbmluZ0F0dGFja1RpbWUgKiBjdXJ2ZUFyZWEobV9h
dHRhY2tDdXJ2ZSwgYXR0YWNrU3BvdCwgMSk7CisgICAgfQorCisKKyAgICBkb3VibGUgcmVsZWFz
ZUFyZWEgPSBtX3JlbGVhc2VUaW1lICogY3VydmVBcmVhKG1fcmVsZWFzZUN1cnZlLCAwLCAxKTsK
KyAgICBkb3VibGUgc3VzdGFpbkFyZWEgPSBzdGQ6Om1heChtX2FuaW1hdGlvblRpbWUgLSByZW1h
aW5pbmdBdHRhY2tUaW1lIC0gbV9yZWxlYXNlVGltZSwgMC4pOworCisgICAgbV9kZXNpcmVkVmVs
b2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIChhdHRhY2tBcmVhICsgc3VzdGFpbkFyZWEgKyByZWxl
YXNlQXJlYSk7CisgICAgbV9yZWxlYXNlUG9zID0gbV9kZXNpcmVkUG9zIC0gbV9kZXNpcmVkVmVs
b2NpdHkgKiByZWxlYXNlQXJlYTsKKworICAgIGlmIChhdHRhY2tBcmVhKSB7CisgICAgICAgIGRv
dWJsZSBjdXJyZW50QXR0YWNrUG9zID0gbV9kZXNpcmVkVmVsb2NpdHkgPyBhdHRhY2tDdXJ2ZSht
X2F0dGFja0N1cnZlLCBkZWx0YVQsIG1fYXR0YWNrVGltZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydFBvcywgbV9h
dHRhY2tQb3MpIDogbV9zdGFydFBvczsKKyAgICAgICAgbV9hdHRhY2tQb3MgPSAqbV9jdXJyZW50
UG9zICsgbV9kZXNpcmVkVmVsb2NpdHkgKiBjdXJ2ZUFyZWEobV9hdHRhY2tDdXJ2ZSwgMCwgMSkg
KiBtX2F0dGFja1RpbWU7CisgICAgICAgIGRvdWJsZSBuZXdBdHRhY2tQb3MgPSBtX2Rlc2lyZWRW
ZWxvY2l0eSA/IGF0dGFja0N1cnZlKG1fYXR0YWNrQ3VydmUsIGRlbHRhVCwgbV9hdHRhY2tUaW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhcnRQb3MsIG1fYXR0YWNrUG9zKSA6IG1fc3RhcnRQb3M7CisgICAgICAgIGlmICht
X2N1cnJlbnRWZWxvY2l0eSAmJiBuZXdBdHRhY2tQb3MgIT0gY3VycmVudEF0dGFja1BvcykKKyAg
ICAgICAgICAgIG1fYXR0YWNrT2Zmc2V0ICs9IGN1cnJlbnRBdHRhY2tQb3MgLSBuZXdBdHRhY2tQ
b3M7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9hdHRhY2tPZmZzZXQgPSAwOworICAgICAgICBt
X2F0dGFja1BvcyA9ICptX2N1cnJlbnRQb3M7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CisvLyBGSVhNRTogQWRkIGluIGphbmsgZGV0ZWN0aW9uIHRyYWNlIGV2ZW50cyBpbnRvIHRoaXMg
ZnVuY3Rpb24uCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjphbmlt
YXRlU2Nyb2xsKGRvdWJsZSBjdXJyZW50VGltZSkKK3sKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQg
dGltZTsgZ3JhYmJpbmcgdGhlIGN1cnJlbnQgdGltZSBvbmNlIGhlbHBzIGtlZXAgYSBjb25zaXN0
ZW50IGhlYXJ0YmVhdC4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gY3VycmVudFRp
bWUgLSBtX2xhc3RBbmltYXRpb25UaW1lOworICAgIG1fbGFzdEFuaW1hdGlvblRpbWUgPSBjdXJy
ZW50VGltZTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSB0cnVlOworICAgIGRvdWJs
ZSBkZWx0YVQgPSBjdXJyZW50VGltZSAtIG1fc3RhcnRUaW1lOworCisgICAgaWYgKGRlbHRhVCA+
IG1fYW5pbWF0aW9uVGltZSkgeworICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IGZhbHNlOwor
ICAgICAgICAqbV9jdXJyZW50UG9zID0gbV9kZXNpcmVkUG9zOworICAgICAgICByZXNldCgpOwor
ICAgIH0gZWxzZSBpZiAoZGVsdGFUIDwgbV9hdHRhY2tUaW1lKSB7CisgICAgICAgIC8vIGF0dGFj
ayBpcyBiYXNlZCBvbiBhZGRpbmcgdmVsb2NpdHkKKyAgICAgICAgZG91YmxlIG5ld1BvcyA9IGF0
dGFja0N1cnZlKG1fYXR0YWNrQ3VydmUsIGRlbHRhVCwgbV9hdHRhY2tUaW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydFBvcywgbV9hdHRhY2tQb3MpICsgbV9h
dHRhY2tPZmZzZXQ7CisgICAgICAgIC8vIERlbHRhIGlzIGFscmVhZHkgcGl4ZWxzIC8gc2VjLCBz
aW5jZSB0aG9zZSBhcmUgdGhlIHR3byBpdGVtcyB3ZSBoYW5kZWQgaW4uCisgICAgICAgIGlmIChs
YXN0U2Nyb2xsSW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV9jdXJyZW50VmVsb2NpdHkgPSAo
bmV3UG9zIC0gKm1fY3VycmVudFBvcykgLyBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICpt
X2N1cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgICAgIGRvdWJsZSByZW1haW5pbmdEZWx0YSA9IG1f
cmVsZWFzZVBvcyAtICptX2N1cnJlbnRQb3M7CisgICAgICAgIGRvdWJsZSByZW1haW5pbmdUaW1l
ID0gbV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSAtIGRlbHRhVDsKKyAgICAgICAgbV9k
ZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIHJlbWFpbmluZ1RpbWU7CisgICAgfSBl
bHNlIGlmIChkZWx0YVQgPCAobV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSkpIHsKKyAg
ICAgICAgLy8gRGVzaXJlZCBzdGVhZHkgc3RhdGUgdmVsb2NpdHkgcmUtZXN0aW1hdGlvbi4KKyAg
ICAgICAgZG91YmxlIG5ld1BvcyA9IG1fYXR0YWNrUG9zICsgbV9hdHRhY2tPZmZzZXQgKyAoZGVs
dGFUIC0gbV9hdHRhY2tUaW1lKSAqIG1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICBpZiAobGFz
dFNjcm9sbEludGVydmFsID4gMCkKKyAgICAgICAgICAgIG1fY3VycmVudFZlbG9jaXR5ID0gKG5l
d1BvcyAtICptX2N1cnJlbnRQb3MpIC8gbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICAqbV9j
dXJyZW50UG9zID0gbmV3UG9zOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHJlbGVhc2UgaXMg
YmFzZWQgb24gdGFyZ2V0aW5nIHRoZSBleGFjdCBmaW5hbCBwb3NpdGlvbi4KKyAgICAgICAgZG91
YmxlIHJlbGVhc2VEZWx0YVQgPSBkZWx0YVQgLSAobV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNl
VGltZSk7CisgICAgICAgIGRvdWJsZSBuZXdQb3MgPSByZWxlYXNlQ3VydmUobV9yZWxlYXNlQ3Vy
dmUsIHJlbGVhc2VEZWx0YVQsIG1fcmVsZWFzZVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9yZWxlYXNlUG9zLCBtX2Rlc2lyZWRQb3MpOworICAgICAgICAvLyBO
b3JtYWxpemUgdmVsb2NpdHkgdG8gYSBwZXIgc2Vjb25kIGFtb3VudC4gQ291bGQgYmUgdXNlZCB0
byBjaGVjayBmb3IgamFuay4KKyAgICAgICAgaWYgKGxhc3RTY3JvbGxJbnRlcnZhbCA+IDApCisg
ICAgICAgICAgICBtX2N1cnJlbnRWZWxvY2l0eSA9IChuZXdQb3MgLSAqbV9jdXJyZW50UG9zKSAv
IGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgKm1fY3VycmVudFBvcyA9IG5ld1BvczsKKyAg
ICB9CisgICAgcmV0dXJuIGNvbnRpbnVlQW5pbWF0aW9uOworfQorCitTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpTY3JvbGxBbmltYXRvckNocm9taXVtKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9ob3Jp
em9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAgICAsIG1fdmVydGljYWxEYXRhKHRo
aXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtOjp+U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bSgpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQo
Jm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3Zl
cnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6c2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gVE9ETyhzY290dGJ5ZXIpOiBnZXQgdGhlIHR5cGUg
cGFzc2VkIGluLiBNb3VzZVdoZWVsIGNvdWxkIGFsc28gYmUgYnkgbGluZSwgYnV0IHNob3VsZCBz
dGlsbCBoYXZlIGRpZmZlcmVudAorICAgIC8vIGFuaW1hdGlvbiBzZXR0aW5ncyB0aGFuIHRoZSBr
ZXlib2FyZC4KKyAgICBjb25zdCBTY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW0gKnNldHRp
bmdzID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFNjcm9sbEFuaW1hdG9yU2V0dGlu
Z3NDaHJvbWl1bSo+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKSk7
CisKKyAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHNldHRpbmdzLCBvciB0aGUgb3ZlcmFsbCBzd2l0
Y2ggaXMgb2ZmLCBiYWlsLgorICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5pc0VuYWJs
ZWQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBn
cmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICBjb25zdCBTY3JvbGxBbmltYXRv
clNldHRpbmdzQ2hyb21pdW06OlNldHRpbmdzICppbnB1dF9zZXR0aW5nczsKKyAgICBzd2l0Y2gg
KGdyYW51bGFyaXR5KSB7CisgICAgY2FzZSBTY3JvbGxCeURvY3VtZW50OgorICAgICAgICBpbnB1
dF9zZXR0aW5ncyA9ICZzZXR0aW5ncy0+c2V0dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0No
cm9taXVtOjpEZWZhdWx0XTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6
CisgICAgICAgIGlucHV0X3NldHRpbmdzID0gJnNldHRpbmdzLT5zZXR0aW5nc1tTY3JvbGxBbmlt
YXRvclNldHRpbmdzQ2hyb21pdW06OktleWJvYXJkTGluZV07CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2Nyb2xsQnlQYWdlOgorICAgICAgICBpbnB1dF9zZXR0aW5ncyA9ICZzZXR0aW5ncy0+
c2V0dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpLZXlib2FyZFBhZ2VdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6CisgICAgICAgIGlmIChmYWJz
KG11bHRpcGxpZXIpID4gMjApCisgICAgICAgICAgICBpbnB1dF9zZXR0aW5ncyA9ICZzZXR0aW5n
cy0+c2V0dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpNb3VzZVdoZWVsXTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5wdXRfc2V0dGluZ3MgPSAmc2V0dGluZ3MtPnNl
dHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6VHJhY2twYWRdOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpbnB1dF9zZXR0aW5ncyA9ICZzZXR0aW5n
cy0+c2V0dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpEZWZhdWx0XTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGluZGl2aWR1YWwgaW5wdXQgc2V0
dGluZyBpcyBkaXNhYmxlZCwgYmFpbC4KKyAgICBpZiAoIWlucHV0X3NldHRpbmdzLT5pc0VuYWJs
ZWQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBn
cmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICAvLyBUaGlzIGlzIGFuIGFuaW1h
dGFibGUgc2Nyb2xsLiBDYWxjdWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0
YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNh
bERhdGEgOiAmbV9ob3Jpem9udGFsRGF0YTsKKworICAgIGZsb2F0IHNjcm9sbGFibGVTaXplID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50YXRp
b24pKTsKKyAgICBib29sIHJlc3VsdCA9IGRhdGEtPnVwZGF0ZURhdGFGcm9tU2V0dGluZ3Mob3Jp
ZW50YXRpb24sIHN0ZXAsIG11bHRpcGxpZXIsIHNjcm9sbGFibGVTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVEY6OmN1cnJlbnRUaW1lKCksIGlu
cHV0X3NldHRpbmdzKTsKKyAgICBpZiAoIWRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUo
KSkgeworICAgICAgICByZXN1bHQgJj0gZGF0YS0+YW5pbWF0ZVNjcm9sbChXVEY6OmN1cnJlbnRU
aW1lKCkpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZGF0YS0+bV9hbmltYXRp
b25UaW1lci5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSk7CisgICAgfQorICAgIG5v
dGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgm
bV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVy
dGljYWxEYXRhKTsKKworICAgIG1faG9yaXpvbnRhbERhdGEucmVzZXQoKTsKKyAgICAqbV9ob3Jp
em9udGFsRGF0YS5tX2N1cnJlbnRQb3MgPSBvZmZzZXQueCgpOworICAgIG1faG9yaXpvbnRhbERh
dGEubV9kZXNpcmVkUG9zID0gb2Zmc2V0LngoKTsKKworICAgIG1fdmVydGljYWxEYXRhLnJlc2V0
KCk7CisgICAgKm1fdmVydGljYWxEYXRhLm1fY3VycmVudFBvcyA9IG9mZnNldC55KCk7CisgICAg
bV92ZXJ0aWNhbERhdGEubV9kZXNpcmVkUG9zID0gb2Zmc2V0LnkoKTsKKworICAgIG5vdGl0eVBv
c2l0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OmFuaW1h
dGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bT4qIHRpbWVyKQorewor
ICAgIGlmICgodGltZXIgPT0gJm1faG9yaXpvbnRhbERhdGEubV9hbmltYXRpb25UaW1lcikgPwor
ICAgICAgICBtX2hvcml6b250YWxEYXRhLmFuaW1hdGVTY3JvbGwoV1RGOjpjdXJyZW50VGltZSgp
KSA6CisgICAgICAgIG1fdmVydGljYWxEYXRhLmFuaW1hdGVTY3JvbGwoV1RGOjpjdXJyZW50VGlt
ZSgpKSkKKyAgICAgICAgdGltZXItPnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsK
KyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSogZGF0YSkKK3sK
KyAgICBpZiAoZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBkYXRh
LT5tX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41ZGRjOTNhNWRhNDAxZTdjYjdiZDFjOTg0ZTNhNjEwNzc0YmE3MGJkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bV9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1faAorCisjaWYgRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2lu
Y2x1ZGUgIlNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1UZXN0OworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0gOiBwdWJsaWMgU2Nyb2xsQW5p
bWF0b3IgeworICBwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bShTY3JvbGxhYmxl
QXJlYSopOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW0oKTsKKworICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICBwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyA6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1UZXN0OworCisgICAg
c3RydWN0IFBlckF4aXNEYXRhIHsKKyAgICAgICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcyk7CisgICAgICAgIHZvaWQgcmVzZXQo
KTsKKyAgICAgICAgYm9vbCB1cGRhdGVEYXRhRnJvbVNldHRpbmdzKFNjcm9sbGJhck9yaWVudGF0
aW9uLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBmbG9hdCBzY3JvbGxhYmxlU2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZSwg
Y29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtOjpTZXR0aW5ncyopOworICAgICAg
ICBib29sIGFuaW1hdGVTY3JvbGwoZG91YmxlIGN1cnJlbnRUaW1lKTsKKworICAgICAgICBzdGF0
aWMgZG91YmxlIGN1cnZlSW50ZWdyYWxBdChTY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW06
OkN1cnZlLCBkb3VibGUgdCk7CisgICAgICAgIHN0YXRpYyBkb3VibGUgY3VydmVBcmVhKFNjcm9s
bEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6Q3VydmUsIGRvdWJsZSBzdGFydFQsIGRvdWJsZSBl
bmRUKTsKKyAgICAgICAgc3RhdGljIGRvdWJsZSBhdHRhY2tDdXJ2ZShTY3JvbGxBbmltYXRvclNl
dHRpbmdzQ2hyb21pdW06OkN1cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUgY3VydmVULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydFBvcywgZG91YmxlIGF0
dGFja1Bvcyk7CisgICAgICAgIHN0YXRpYyBkb3VibGUgcmVsZWFzZUN1cnZlKFNjcm9sbEFuaW1h
dG9yU2V0dGluZ3NDaHJvbWl1bTo6Q3VydmUsIGRvdWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByZWxlYXNlUG9zLCBk
b3VibGUgZGVzaXJlZFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsKKyAgICAg
ICAgZG91YmxlIG1fY3VycmVudFZlbG9jaXR5OworCisgICAgICAgIGRvdWJsZSBtX2Rlc2lyZWRQ
b3M7CisgICAgICAgIGRvdWJsZSBtX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1f
Y29hc3RWZWxvY2l0eTsKKworICAgICAgICBkb3VibGUgbV9zdGFydFBvczsKKyAgICAgICAgZG91
YmxlIG1fc3RhcnRUaW1lOworICAgICAgICBkb3VibGUgbV9zdGFydFZlbG9jaXR5OworCisgICAg
ICAgIGRvdWJsZSBtX2FuaW1hdGlvblRpbWU7CisgICAgICAgIGRvdWJsZSBtX2xhc3RBbmltYXRp
b25UaW1lOworCisgICAgICAgIGRvdWJsZSBtX2F0dGFja1BvczsKKyAgICAgICAgZG91YmxlIG1f
YXR0YWNrVGltZTsKKyAgICAgICAgZG91YmxlIG1fYXR0YWNrT2Zmc2V0OworICAgICAgICBTY3Jv
bGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW06OkN1cnZlIG1fYXR0YWNrQ3VydmU7CisKKyAgICAg
ICAgZG91YmxlIG1fcmVsZWFzZVBvczsKKyAgICAgICAgZG91YmxlIG1fcmVsZWFzZVRpbWU7Cisg
ICAgICAgIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bTo6Q3VydmUgbV9yZWxlYXNlQ3Vy
dmU7CisKKyAgICAgICAgZG91YmxlIG1fZmxpbmdUaW1lOworICAgICAgICBTY3JvbGxBbmltYXRv
clNldHRpbmdzQ2hyb21pdW06OkN1cnZlIG1fZmxpbmdDdXJ2ZTsKKworICAgICAgICBib29sIG1f
Ym91bmNlOworICAgICAgICBib29sIG1fZmxpbmc7CisgICAgICAgIGRvdWJsZSBtX2ZsaW5nQW1v
dW50OworICAgICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworCisgICAg
ICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0+IG1fYW5pbWF0aW9uVGltZXI7CisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgYW5pbWF0aW9uVGltZXJEZWxheTsKKworICAg
IHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtPiop
OworICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKwor
ICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0
aWNhbERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JTZXR0aW5nc0Nocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ1NTE1
MGZhZTIxMjdlYjQzZTllOTk2ZDFiYmY4NmRlZDZmODk0MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJv
bWl1bS5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yU2V0dGluZ3ND
aHJvbWl1bS5oIgorCisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZG91YmxlIGtUaWNr
VGltZSA9IC4wMTY2OworCitQYXNzT3duUHRyPFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M+IFNjcm9s
bEFuaW1hdG9yU2V0dGluZ3M6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBT
Y3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW0oKSk7Cit9CisKK1Njcm9sbEFuaW1hdG9yU2V0
dGluZ3NDaHJvbWl1bTo6U2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtKCkKK3sKKyAgICAv
LyBEaXNhYmxlZCBieSBkZWZhdWx0IGZvciBub3cuCisgICAgaXNFbmFibGVkID0gZmFsc2U7CisK
KyAgICBTY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW06OlNldHRpbmdzIGluaXRpYWwgPQor
ICAgICAgICAgICAgeyBmYWxzZSwgMC4yNSwgTGluZWFyLCAwLjAxLCBMaW5lYXIsIDAuMDEsIGZh
bHNlLCBmYWxzZSwgTGluZWFyLCAwLCAwIH07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyAr
K2kpCisgICAgICAgIHNldHRpbmdzW2ldID0gaW5pdGlhbDsKKworICAgIFNjcm9sbEFuaW1hdG9y
U2V0dGluZ3NDaHJvbWl1bTo6U2V0dGluZ3Mga2V5Ym9hcmRMaW5lID0KKyAgICAgICAgICAgIHsg
dHJ1ZSwgNyAqIGtUaWNrVGltZSwgUXVhZHJhdGljLCAzICoga1RpY2tUaW1lLCBRdWFkcmF0aWMs
IDMgKiBrVGlja1RpbWUsIGZhbHNlLCBmYWxzZSwgUXVhZHJhdGljLCAwLCAwIH07CisgICAgc2V0
dGluZ3NbS2V5Ym9hcmRMaW5lXSA9IGtleWJvYXJkTGluZTsKKworICAgIFNjcm9sbEFuaW1hdG9y
U2V0dGluZ3NDaHJvbWl1bTo6U2V0dGluZ3Mga2V5Ym9hcmRQYWdlID0KKyAgICAgICAgICAgIHsg
dHJ1ZSwgMTUgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgNSAqIGtUaWNrVGltZSwgUXVhZHJhdGlj
LCA1ICoga1RpY2tUaW1lLCBmYWxzZSwgZmFsc2UsIFF1YWRyYXRpYywgMCwgMCB9OworICAgIHNl
dHRpbmdzW0tleWJvYXJkUGFnZV0gPSBrZXlib2FyZFBhZ2U7CisKKyAgICBTY3JvbGxBbmltYXRv
clNldHRpbmdzQ2hyb21pdW06OlNldHRpbmdzIG1vdXNlV2hlZWwgPQorICAgICAgICAgICAgeyB0
cnVlLCAxMSAqIGtUaWNrVGltZSwgUXVhZHJhdGljLCAzICoga1RpY2tUaW1lLCBRdWFkcmF0aWMs
IDMgKiBrVGlja1RpbWUsIGZhbHNlLCB0cnVlLCBRdWFkcmF0aWMsIDAsIDAgfTsKKyAgICBzZXR0
aW5nc1tNb3VzZVdoZWVsXSA9IG1vdXNlV2hlZWw7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JT
ZXR0aW5nc0Nocm9taXVtOjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sIGZsYWcpCit7Cisg
ICAgaXNFbmFibGVkID0gZmxhZzsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvclNldHRpbmdzQ2hy
b21pdW06OnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzRW5h
YmxlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvclNldHRpbmdzQ2hyb21pdW0uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YWM0ODNhOWZhMjQyMzFkYzA1NjNhMjMzY2U2YmUwMGQzMjA0MTU5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JT
ZXR0aW5nc0Nocm9taXVtLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9y
U2V0dGluZ3NDaHJvbWl1bV9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3NDaHJvbWl1
bV9oCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvclNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtIDogcHVibGlj
IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAg
ICAgIERlZmF1bHQgPSAwLAorICAgICAgICBLZXlib2FyZExpbmUsCisgICAgICAgIEtleWJvYXJk
UGFnZSwKKyAgICAgICAgTW91c2VXaGVlbCwKKyAgICAgICAgVHJhY2twYWQKKyAgICB9OworCisg
ICAgZW51bSBDdXJ2ZSB7CisgICAgICAgIExpbmVhciwKKyAgICAgICAgUXVhZHJhdGljLAorICAg
ICAgICBDdWJpYywKKyAgICAgICAgQm91bmNlCisgICAgfTsKKworICAgIC8vIENhbiBiZSBvdmVy
c3BlY2lmaWVkLiBhbmltYXRpb25UaW1lIHRha2VzIHByaW9yaXR5IG92ZXIgcmVsZWFzZVRpbWUg
dGFrZXMgcHJpb3JpdHkgb3ZlciBhdHRhY2tUaW1lLgorICAgIC8vIE1pc3Npbmc6IGhvdyB0byBz
cGVjaWZ5IGFuaW1hdGlvbiB0aW1lIGFjY3VtdWxhdGlvbiAoZS5nLiwgcHVyZSBhZGRpdGl2ZSwg
YXN5bXB0b3RpYyB0byBhIGxpbWl0IHdpdGggYSBjdXJ2ZT8pCisgICAgdHlwZWRlZiBzdHJ1Y3Qg
eworICAgICAgICBib29sIGlzRW5hYmxlZDsKKworICAgICAgICBkb3VibGUgYW5pbWF0aW9uVGlt
ZTsKKworICAgICAgICBDdXJ2ZSBhdHRhY2tDdXJ2ZTsKKyAgICAgICAgZG91YmxlIGF0dGFja1Rp
bWU7CisKKyAgICAgICAgQ3VydmUgcmVsZWFzZUN1cnZlOworICAgICAgICBkb3VibGUgcmVsZWFz
ZVRpbWU7CisKKyAgICAgICAgYm9vbCBpc0JvdW5jZUVuYWJsZWQ7CisKKyAgICAgICAgYm9vbCBp
c0ZsaW5nRW5hYmxlZDsKKyAgICAgICAgQ3VydmUgZmxpbmdDdXJ2ZTsKKyAgICAgICAgZG91Ymxl
IGZsaW5nVGltZTsKKyAgICAgICAgZG91YmxlIGZsaW5nTWluaW11bVNsb3BlOworICAgIH0gU2V0
dGluZ3M7CisKKyAgICBTZXR0aW5ncyBzZXR0aW5nc1s1XTsKKyAgICBib29sIGlzRW5hYmxlZDsK
KworICAgIC8vIEFsbG93IGZvciBwZXItcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uCisgICAgU2Ny
b2xsQW5pbWF0b3JTZXR0aW5nc0Nocm9taXVtKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5h
YmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsQW5p
bWF0b3JFbmFibGVkKCkgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYjA5MTE1OTU2ZTA2NjFiYTkxN2Fi
YjA1MjA5Yjg1MDRkOGQ0NTQzLi4xM2Q1ZWRkNGNiN2RkZWM1MTFmMzIwMWY3Y2YwOWRiY2Q4NzQy
MTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2
LTAxICBTY290dCBCeWVyICA8c2NvdHRieWVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbW9vdGggc2Nyb2xsaW5nIGZvciBD
aHJvbWl1bSwgaW5pdGlhbCBwYXRjaC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxODc4CisKKyAgICAgICAgQWRkIGluIGEgc2Nyb2xsaW5nIGFuaW1h
dG9yIGluIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybSBkaXJlY3RvcnksIGFkZCBpbiBhIHNldHRpbmdz
IG1lY2hhbmlzbSwgaW5jbHVkaW5nIHJ1bi10aW1lCisgICAgICAgIGVuYWJsZW1lbnQgb2YgdGhl
IHNjcm9sbGluZyBhbmltYXRvci4gVGhlIHNtb290aCBzY3JvbGxpbmcgY29kZSBpcyBjb21waWxl
ZCBvdXQgYnkgZGVmYXVsdC4gVGVzdHMgdG8gZm9sbG93LgorCisgICAgICAgICogcHVibGljL1dl
YlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IpOgorICAg
ICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKwogMjAxMS0wNi0wMiAgTmFva2kgVGFrYW5v
ICA8dGFrYW5vLm5hb2tpQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
ZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApp
bmRleCAzNjE5MjczNGE2ZjczOGMzMDc5YjFiMjQ1MTBkYWEwZDcyNTljNDFmLi4yM2ZmY2NjMjBm
NmJhNzNlNTIyYzQxN2U0ZDNiMDk1NTcyMjU5ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTEyMyw2ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldEZ1bGxTY3JlZW5FbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChib29sKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wpID0gMDsKIAogcHJv
dGVjdGVkOgogICAgIH5XZWJTZXR0aW5ncygpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggZjM3NDQ4ZjNmNjEwNTg0ZjhhMzUyOTg4
OGNmM2JkNDEzNDA0MWQwOS4uNTQzY2VhYzFiOWIyMzM2OWE5YTQ3NTc5MWZjMTgxOTgyODcyNWMw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3Bw
CkBAIC00MTcsNCArNDE3LDE0IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBbGxvd1J1bm5p
bmdPZkluc2VjdXJlQ29udGVudChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0QWxs
b3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGlu
Z3NJbXBsOjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sIGVuYWJsZWQpCit7CisjaWYgRU5B
QkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAgbV9zZXR0aW5ncy0+c2V0RW5hYmxlU2Nyb2xsQW5p
bWF0b3IoZW5hYmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRp
ZgorfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRleCBjMGU4YTNkYWRlMjNiMzVlMjIxNGE2OThlMGU4
NjM1NTExMzFlMjgyLi40ZTg1MGJiODUwNmUxZjBkYWMyNjdiZTg4NmIwZjcwNjEyZGJlZWM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtMTE2
LDYgKzExNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFNjcmVlbkVuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250
ZW50KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29u
dGVudChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9v
bCk7CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2V0dGluZ3MqIG1fc2V0dGluZ3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95985</attachid>
            <date>2011-06-03 16:37:18 -0700</date>
            <delta_ts>2011-06-20 13:32:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61878-20110603163717.patch</filename>
            <type>text/plain</type>
            <size>35322</size>
            <attacher name="Scott Byer">scottbyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgwNzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZThmYTY4N2RiZTQyN2Uz
YjIzZWE4ODliNGJhM2Q3ZjI3ODBlYTUxLi4zNzNlNWIxMjYxYTI5OWVmNDA2ZWQxNWU0NTFiZjEz
MGY2MGU5YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDYtMDMgIFNjb3R0
IEJ5ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBp
bml0aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBzY3JvbGxpbmcgYW5pbWF0b3IgaW4gdGhl
IENocm9taXVtIHBsYXRmb3JtIGRpcmVjdG9yeSwgYWRkIGluIGEgc2V0dGluZ3MgbWVjaGFuaXNt
LCBpbmNsdWRpbmcgcnVuLXRpbWUKKyAgICAgICAgZW5hYmxlbWVudCBvZiB0aGUgc2Nyb2xsaW5n
IGFuaW1hdG9yLiBUaGUgc21vb3RoIHNjcm9sbGluZyBjb2RlIGlzIGNvbXBpbGVkIG91dCBieSBk
ZWZhdWx0LiBUZXN0cyB0byBmb2xsb3cuCisKKyAgICAgICAgQ3VycmVudGx5LCB0ZXN0aW5nIGlz
IG1hbnVhbCwgYW5kIHRoZSBjb2RlIGlzIG5vdCBjb21waWxlZCBpbiBieSBkZWZhdWx0LiBBdXRv
bWF0ZWQgdGVzdHMgd2lsbCBiZSBidWlsdCBhcyBpbnRlcmVzdGluZyB1c2VyIGlucHV0IGNhc2Vz
IGFyZSBmb3VuZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEFuaW1hdG9y
RW5hYmxlZCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL1Nl
dHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAg
ICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEVu
YWJsZVNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzY3JvbGxB
bmltYXRvckVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQW5pbWF0b3JFbmFibGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNldHRpbmdzOjpTY3JvbGxB
bmltYXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0Rh
dGE6OmN1cnZlSW50ZWdyYWxBdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtOjpQZXJBeGlzRGF0YTo6Y3VydmVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjphdHRhY2tDdXJ2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6cmVsZWFzZUN1cnZl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRh
OjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
OjpQZXJBeGlzRGF0YTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bTo6UGVyQXhpc0RhdGE6OnVwZGF0ZURhdGFGcm9tU2V0dGluZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
Ojp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6c3RvcEFuaW1hdGlvblRpbWVySWZO
ZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21p
dW0uaDogQWRkZWQuCisKIDIwMTEtMDYtMDMgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggMDVjYTEzZjYyZjFhNDRmN2U0OTUwMzVmNmVmNWE2ZjI1YjE1NWM2OS4uZWJjZGZh
NTU2NWViOGI2ZjIwNjgwODUxOTdlN2VlNGIyODM2NjdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MzgzNiw2ICszODM2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJs
ZURhdGFPYmplY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJs
ZURhdGFPYmplY3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2Vu
ZXJhdG9yQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxBbmltYXRvckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1t
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZGFlZmQ0MTM2ZGM5N2VhM2Rj
ODgyMzhmMTNkZDQ0ZjNjNWIyYWMxYS4uODdlMjNlYzg5ZDhmYTA3MDc5NmU2OGYxNGVlMDRlMTZl
M2VmNzhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMjI0MCw2ICsyMjQwLDE1
IEBAIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBhaW50KCkg
Y29uc3QKICAgICAgICAgKCppdCktPnNjcm9sbEFuaW1hdG9yKCktPmNvbnRlbnRBcmVhV2lsbFBh
aW50KCk7CiB9CiAKK2Jvb2wgRnJhbWVWaWV3OjpzY3JvbGxBbmltYXRvckVuYWJsZWQoKSBjb25z
dAoreworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgIGlmIChtX3BhZ2UgJiYgbV9w
YWdlLT5zZXR0aW5ncygpKQorICAgICAgICByZXR1cm4gbV9wYWdlLT5zZXR0aW5ncygpLT5zY3Jv
bGxBbmltYXRvckVuYWJsZWQoKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKwogI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVEYXNoYm9h
cmRSZWdpb25zKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IDViNzM5NTBiNWQ2MTc2
YWQ3ZTEyZjVmZWVhMTI4MTYyY2ZmZjZiYTMuLmZlZjY4ZGNjMDkzMjE5MTM4MjM1YTZlN2M2MjFj
NThlNzA3YjcyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMzM1LDYgKzMzNSw4IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxs
UGFpbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBt
X3BhZ2UgPSAwOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkg
Y29uc3Q7CisKICAgICB2b2lkIGRlZmVycmVkUmVwYWludFRpbWVyRmlyZWQoVGltZXI8RnJhbWVW
aWV3PiopOwogICAgIHZvaWQgZG9EZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCB1cGRhdGVE
ZWZlcnJlZFJlcGFpbnREZWxheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCA4Nzhh
OWI4MmY2YThkYjY0ZTQ5ZDgzMTI0NDc5NTA0ODM1M2ZkNzFkLi43NmE2ZDZiMTFkMzcxYWU0ZjE1
MjQyN2EwMGUzZjEyMWU2YjhjODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMTgx
LDYgKzE4MSw5IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9zaG91
bGRJbmplY3RVc2VyU2NyaXB0c0luSW5pdGlhbEVtcHR5RG9jdW1lbnQoZmFsc2UpCiAgICAgLCBt
X2FsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KHRydWUpCiAgICAgLCBtX2FsbG93UnVubmlu
Z09mSW5zZWN1cmVDb250ZW50KHRydWUpCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisg
ICAgLCBtX3Njcm9sbEFuaW1hdG9yRW5hYmxlZChmYWxzZSkKKyNlbmRpZgogICAgICwgbV9sb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHlUaW1lcih0aGlzLCAmU2V0dGluZ3M6OmxvYWRzSW1hZ2VzQXV0
b21hdGljYWxseVRpbWVyRmlyZWQpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVl
biBjcmVhdGVkIHlldCwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5oCmluZGV4IDg5OWM5N2M0ZTdkODU5ZmM1NWEzZmM0NTExYjcxYmFlM2RhOTFj
NDQuLmViOTA2NjVhY2UwMzI4OWFmYWI4NmIxNTc4ODhhNDU2MmE2OTc5MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmgKQEAgLTQwNSw2ICs0MDUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGJvb2wgZmxhZykgeyBt
X2FsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50ID0gZmxhZzsgfQogICAgICAgICBib29sIGFs
bG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1J1bm5p
bmdPZkluc2VjdXJlQ29udGVudDsgfQogCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisg
ICAgICAgIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKSB7IG1fc2Nyb2xs
QW5pbWF0b3JFbmFibGVkID0gZmxhZzsgfQorICAgICAgICBib29sIHNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3JFbmFibGVkOyB9CisjZW5kaWYK
KwogICAgIHByaXZhdGU6CiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKIApAQCAtNTEwLDYgKzUxNSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3Nob3VsZEluamVjdFVzZXJT
Y3JpcHRzSW5Jbml0aWFsRW1wdHlEb2N1bWVudCA6IDE7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Rp
c3BsYXlPZkluc2VjdXJlQ29udGVudCA6IDE7CiAgICAgICAgIGJvb2wgbV9hbGxvd1J1bm5pbmdP
Zkluc2VjdXJlQ29udGVudCA6IDE7CisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisgICAg
ICAgIGJvb2wgbV9zY3JvbGxBbmltYXRvckVuYWJsZWQgOiAxOworI2VuZGlmCiAKICAgICAgICAg
VGltZXI8U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAg
IHZvaWQgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4q
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IDdiMGY1YmEw
NmVhYTIzM2JlZTNkNzA4YWIyNDUzNDVkNmUzMTNhMDAuLjgyMWMzYjUxZWQxMmI0ODY3NWRjYTQw
MjQ3OWM4ODU3MTI1NDc5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaApAQCAtMTM5LDYgKzEzOSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNj
b25uZWN0RnJvbVBhZ2UoKSB7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxBbmltYXRvckVu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiBwcml2YXRlOgogICAgIC8vIE5PVEU6
IE9ubHkgY2FsbGVkIGZyb20gdGhlIFNjcm9sbEFuaW1hdG9yLgogICAgIGZyaWVuZCBjbGFzcyBT
Y3JvbGxBbmltYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzMwYTcwODUy
MGZjOWI4ZTg2YTFjNjZkOWEwOTYzZmQxMzU4YTA5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uY3BwCkBA
IC0wLDAgKzEsNDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTTU9PVEhf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5oIgorCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiT3duQXJyYXlQdHIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkb3VibGUga1RpY2tU
aW1lID0gLjAxNjY7CisKK1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlNjcm9sbEFuaW1hdG9yU2V0
dGluZ3MoKQoreworICAgIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlNldHRpbmdzIGluaXRpYWwg
PQorICAgICAgICAgICAgeyBmYWxzZSwgMC4yNSwgTGluZWFyLCAwLjAxLCBMaW5lYXIsIDAuMDEs
IGZhbHNlLCBmYWxzZSwgTGluZWFyLCAwLCAwIH07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBM
YXN0RW50cnk7ICsraSkKKyAgICAgICAgc2V0dGluZ3NbaV0gPSBpbml0aWFsOworCisgICAgU2Ny
b2xsQW5pbWF0b3JTZXR0aW5nczo6U2V0dGluZ3Mga2V5Ym9hcmRMaW5lID0KKyAgICAgICAgICAg
IHsgdHJ1ZSwgNyAqIGtUaWNrVGltZSwgUXVhZHJhdGljLCAzICoga1RpY2tUaW1lLCBRdWFkcmF0
aWMsIDMgKiBrVGlja1RpbWUsIGZhbHNlLCBmYWxzZSwgUXVhZHJhdGljLCAwLCAwIH07CisgICAg
c2V0dGluZ3NbS2V5Ym9hcmRMaW5lXSA9IGtleWJvYXJkTGluZTsKKworICAgIFNjcm9sbEFuaW1h
dG9yU2V0dGluZ3M6OlNldHRpbmdzIGtleWJvYXJkUGFnZSA9CisgICAgICAgICAgICB7IHRydWUs
IDE1ICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDUgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgNSAq
IGtUaWNrVGltZSwgZmFsc2UsIGZhbHNlLCBRdWFkcmF0aWMsIDAsIDAgfTsKKyAgICBzZXR0aW5n
c1tLZXlib2FyZFBhZ2VdID0ga2V5Ym9hcmRQYWdlOworCisgICAgU2Nyb2xsQW5pbWF0b3JTZXR0
aW5nczo6U2V0dGluZ3MgbW91c2VXaGVlbCA9CisgICAgICAgICAgICB7IHRydWUsIDExICoga1Rp
Y2tUaW1lLCBRdWFkcmF0aWMsIDMgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgMyAqIGtUaWNrVGlt
ZSwgZmFsc2UsIHRydWUsIFF1YWRyYXRpYywgMCwgMCB9OworICAgIHNldHRpbmdzW01vdXNlV2hl
ZWxdID0gbW91c2VXaGVlbDsKK30KKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xs
QW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAg
aWYgKHNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVt
KHNjcm9sbGFibGVBcmVhKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxBbmltYXRv
cihzY3JvbGxhYmxlQXJlYSkpOworfQorCisvLyBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSB0aW1l
ciBkZWxheSAtIGhvdyBtdWNoIHNtYWxsZXIgdGhhbiBhIHRpY2sgZG9lcyBpdCBuZWVkIHRvIGJl
PworY29uc3QgZG91YmxlIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OmFuaW1hdGlvblRpbWVyRGVs
YXkgPSBrVGlja1RpbWU7CisKK2RvdWJsZSBTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlz
RGF0YTo6Y3VydmVJbnRlZ3JhbEF0KFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1cnZlIGN1cnZl
LCBkb3VibGUgdCkKK3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmlt
YXRvclNldHRpbmdzOjpMaW5lYXI6CisgICAgICAgIHJldHVybiB0ICogdCAvIDI7CisgICAgY2Fz
ZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpRdWFkcmF0aWM6CisgICAgICAgIHJldHVybiB0ICog
dCAqIHQgLyAzOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3ViaWM6CisgICAg
ICAgIHJldHVybiB0ICogdCAqIHQgKiB0IC8gNDsKKyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0
dGluZ3M6OkJvdW5jZToKKyAgICAgICAgZG91YmxlIHgsIGFyZWE7CisgICAgICAgIGlmICh0IDwg
MSAvIDIuNzUpCisgICAgICAgICAgICByZXR1cm4gMi41MjA4MyAqIHQgKiB0ICogdDsKKyAgICAg
ICAgeCA9IDEgLyAyLjc1OworICAgICAgICBhcmVhID0gMi41MjA4MyAqIHggKiB4ICogeDsKKyAg
ICAgICAgaWYgKHQgPCAyIC8gMi43NSkgeworICAgICAgICAgICAgZG91YmxlIHQxID0gdCAtIDEu
NSAvIDIuNzU7CisgICAgICAgICAgICByZXR1cm4gYXJlYSArIDIuNTIwODMgKiB0MSAqICh0MSAq
IHQxICsgMC4yOTc1MSk7CisgICAgICAgIH0KKyAgICAgICAgeCA9IDIgLyAyLjc1OworICAgICAg
ICAvLyBUaGUgbGFzdCB0d28gYm91bmNlcyBhcmVuJ3QgZW5vdWdoIHRvIGFmZmVjdCB0aGluZ3Mu
CisgICAgICAgIHJldHVybiBhcmVhICsgMi41MjA4MyAqIHggKiAoeCAqIHggKyAweDI5NzUxKTsK
KyAgICB9Cit9CisKK2RvdWJsZSBTY3JvbGxBbmltYXRvckNocm9taXVtOjpQZXJBeGlzRGF0YTo6
Y3VydmVBcmVhKFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1cnZlIGN1cnZlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0
VCwgZG91YmxlIGVuZFQpCit7CisgICAgc3RhdGljIGRvdWJsZSBjdXJ2ZUFyZWFbXSA9IHsgMS4w
LCAwLjUsIDAuMzMsIDAuMSB9OworICAgIGRvdWJsZSBzdGFydFZhbHVlID0gMDsKKyAgICBkb3Vi
bGUgZW5kVmFsdWUgPSBjdXJ2ZUFyZWFbY3VydmVdOworCisgICAgaWYgKHN0YXJ0VCkKKyAgICAg
ICAgc3RhcnRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgc3RhcnRUKTsKKyAgICBpZiAo
ZW5kVCAhPSAxKQorICAgICAgICBlbmRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgZW5k
VCk7CisgICAgcmV0dXJuIGVuZFZhbHVlIC0gc3RhcnRWYWx1ZTsKK30KKworZG91YmxlIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjphdHRhY2tDdXJ2ZShTY3JvbGxBbmltYXRv
clNldHRpbmdzOjpDdXJ2ZSBjdXJ2ZSwgZG91YmxlIGRlbHRhVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGN1cnZlVCwgZG91
YmxlIHN0YXJ0UG9zLCBkb3VibGUgYXR0YWNrUG9zKQoreworICAgIGRvdWJsZSB0ID0gZGVsdGFU
IC8gY3VydmVUOworICAgIGRvdWJsZSBwb3NpdGlvbkZhY3RvcjsKKyAgICBzd2l0Y2ggKGN1cnZl
KSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpMaW5lYXI6CisgICAgICAgIHBv
c2l0aW9uRmFjdG9yID0gdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxBbmltYXRv
clNldHRpbmdzOjpRdWFkcmF0aWM6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gdCAqIHQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3ViaWM6Cisg
ICAgICAgIHBvc2l0aW9uRmFjdG9yID0gdCAqIHQgKiB0OworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHN0YXJ0UG9zICsgcG9zaXRpb25GYWN0b3IgKiAoYXR0YWNrUG9zIC0gc3Rh
cnRQb3MpOworfQorCitkb3VibGUgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6
OnJlbGVhc2VDdXJ2ZShTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSBjdXJ2ZSwgZG91Ymxl
IGRlbHRhVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBjdXJ2ZVQsIGRvdWJsZSByZWxlYXNlUG9zLCBkb3VibGUgZGVzaXJl
ZFBvcykKK3sKKyAgICBkb3VibGUgdCA9IGRlbHRhVCAvIGN1cnZlVDsKKyAgICBkb3VibGUgaW52
VCA9IDEgLSB0OworICAgIGRvdWJsZSBwb3NpdGlvbkZhY3RvcjsKKyAgICBzd2l0Y2ggKGN1cnZl
KSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpMaW5lYXI6CisgICAgICAgIHBv
c2l0aW9uRmFjdG9yID0gMS4wIC0gaW52VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3Jv
bGxBbmltYXRvclNldHRpbmdzOjpRdWFkcmF0aWM6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0g
MS4wIC0gaW52VCAqIGludlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0
b3JTZXR0aW5nczo6Q3ViaWM6CisgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gMS4wIC0gaW52VCAq
IGludlQgKiBpbnZUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEFuaW1hdG9yU2V0
dGluZ3M6OkJvdW5jZToKKyAgICAgICAgaWYgKHQgPCAxIC8gMi43NSkKKyAgICAgICAgICAgIHBv
c2l0aW9uRmFjdG9yID0gNy41NjI1ICogdCAqIHQ7CisgICAgICAgIGVsc2UgaWYgKHQgPCAyIC8g
Mi43NSkgeworICAgICAgICAgICAgZG91YmxlIHQxID0gdCAtIDEuNSAvIDIuNzU7CisgICAgICAg
ICAgICBwb3NpdGlvbkZhY3RvciA9IDcuNTYyNSAqIHQxICogdDEgKyAuNzU7CisgICAgICAgIH0g
ZWxzZSBpZiAodCA8IDIuNSAvIDIuNzUpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0MiA9IHQgLSAy
LjI1IC8gMi43NTsKKyAgICAgICAgICAgIHBvc2l0aW9uRmFjdG9yID0gNy41NjI1ICogdDIgKiB0
MiArIC45Mzc1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdCAtPSAyLjYyNSAvIDIu
NzU7CisgICAgICAgICAgICBwb3NpdGlvbkZhY3RvciA9IDcuNTYyNSAqIHQgKiB0ICsgLjk4NDM3
NTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlbGVhc2VQ
b3MgKyAocG9zaXRpb25GYWN0b3IgKiAoZGVzaXJlZFBvcyAtIHJlbGVhc2VQb3MpKTsKK30KKwor
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW0qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJl
bnRQb3MoY3VycmVudFBvcykKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bTo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKKyAgICByZXNldCgpOwor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjpyZXNldCgpCit7
CisgICAgbV9jdXJyZW50VmVsb2NpdHkgPSAwOworCisgICAgbV9kZXNpcmVkUG9zID0gMDsKKyAg
ICBtX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisKKyAgICBtX3N0YXJ0UG9zID0gMDsKKyAgICBtX3N0
YXJ0VGltZSA9IDA7CisgICAgbV9zdGFydFZlbG9jaXR5ID0gMDsKKworICAgIG1fYW5pbWF0aW9u
VGltZSA9IDA7CisgICAgbV9sYXN0QW5pbWF0aW9uVGltZSA9IDA7CisKKyAgICBtX2F0dGFja1Bv
cyA9IDA7CisgICAgbV9hdHRhY2tUaW1lID0gMDsKKyAgICBtX2F0dGFja09mZnNldCA9IDA7Cisg
ICAgbV9hdHRhY2tDdXJ2ZSA9IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OlF1YWRyYXRpYzsKKwor
ICAgIG1fcmVsZWFzZVBvcyA9IDA7CisgICAgbV9yZWxlYXNlVGltZSA9IDA7CisgICAgbV9yZWxl
YXNlQ3VydmUgPSBTY3JvbGxBbmltYXRvclNldHRpbmdzOjpRdWFkcmF0aWM7CisKKyAgICBtX2Zs
aW5nVGltZSA9IDA7CisgICAgbV9mbGluZ0N1cnZlID0gU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6
UXVhZHJhdGljOworCisgICAgbV9ib3VuY2UgPSBmYWxzZTsKKyAgICBtX2ZsaW5nID0gZmFsc2U7
CisgICAgbV9mbGluZ0Ftb3VudCA9IDA7Cit9CisKKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9t
aXVtOjpQZXJBeGlzRGF0YTo6dXBkYXRlRGF0YUZyb21TZXR0aW5ncyhTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciwg
ZmxvYXQgc2Nyb2xsYWJsZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6U2V0dGluZ3MqIHNldHRpbmdzKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIHBhcmFtZXRlcml6ZWQgc28gdGhhdCBJIGNh
biB0cnkgZGlmZmVyZW50IGN1cnZlcyBiZXR3ZWVuIHRoZSBiYXNlIGFuaW1hdGlvbiB0aW1lIGFu
ZCBhCisgICAgLy8gbWF4aW11bSBhbmltYXRpb24gdGltZSwgYmFzZWQgb24gY3VycmVudCB2ZWxv
Y2l0eSwgd2hpY2ggc2hvdWxkIGFsc28gZW5kIHVwIGJlaW5nIGNsb3NlIHRvIHRoZSBmbGluZyB0
aW1lLCBpZgorICAgIC8vIGxpbWl0ZWQgKHNlZSBiZWxvdykuCisgICAgZG91YmxlIHJlbWFpbmlu
Z0FuaW1hdGlvblRpbWUgPSBtX2FuaW1hdGlvblRpbWUgLSBtX2xhc3RBbmltYXRpb25UaW1lICsg
bV9zdGFydFRpbWU7CisgICAgbV9hbmltYXRpb25UaW1lID0gKHJlbWFpbmluZ0FuaW1hdGlvblRp
bWUgLyAyKSArIHNldHRpbmdzLT5hbmltYXRpb25UaW1lOworCisgICAgLy8gVGhvdWdodHMgb24g
ZmxpbmcuIEZsaW5nIHNob3VsZCBhbHdheXMgYmUgcHJlcGFyZWQgZm9yLCBidXQgc2hvdWxkbid0
IGJlIGFjdHVhbGx5IHN0YXJ0ZWQgdW50aWwgd2UncmUgc3VyZSB0aGUKKyAgICAvLyB1c2VyIGlz
IG5vIGxvbmdlciBmaWRkbGluZyB3aXRoIHRoZSBkZXZpY2UgdGhhdCdzIGRvaW5nIHRoZSBmbGlu
Zy4gVGh1cywgdGhlIGZsaW5nIHRpbWUgcmVhbGx5IHNob3VsZCBiZQorICAgIC8vIHNwZWNpZmll
ZCB0aGUgb3RoZXIgd2F5LCBwZXIgZGV2aWNlIC0gaG93IGxvbmcgc2luY2UgdGhlIGxhc3Qgc2Ny
b2xsIG1lc3NhZ2UgZnJvbSB0aGF0IGRldmljZSBiZWZvcmUgd2UgY29uc2lkZXIKKyAgICAvLyB0
aGUgdXNlciB0byBoYXZlIGxldCBnbywgYW5kIGZvciB0aGUgZmxpbmcgbW9kZWwgYW5kIGl0J3Mg
bXVjaC1mYXJ0aGVyLW91dCBkZXNpcmVkIHNjcm9sbCBwb3NpdGlvbiB0byB0YWtlIG92ZXIKKyAg
ICAvLyBmcm9tIHRoZSBhbmltYXRpb24gbW9kZWwuCisKKyAgICAvLyBGSVhNRTogTmVlZCB0byB0
aGluayBvZiBwb3NzaWJsZSBmbGluZyBtb2RlbHMuIFByb2plY3Rpb24gYWxvbmcgYSBzbG9wZSwg
cHJvcGVybHkgcGlubmVkPyBKdXN0IHBpbiB0aGUgc2xvcGU/CisgICAgLy8gSGF2ZSBhIHNwZWVk
IGxpbWl0IGFuZCBsZXQgdGhlIHRpbWUgZmxvYXQgbW9yZT8gSGF2ZSBhIG1heCB0aW1lIGFzIHdl
bGwsIHByaW9yaXRpemUgdGltZSBvciBzcGVlZD8KKyAgICBpZiAoc2V0dGluZ3MtPmlzRmxpbmdF
bmFibGVkKSB7CisgICAgICAgIGlmIChtX2FuaW1hdGlvblRpbWUgPiAyICogc2V0dGluZ3MtPmFu
aW1hdGlvblRpbWUpIHsKKyAgICAgICAgICAgIG1fZmxpbmcgPSB0cnVlOworICAgICAgICAgICAg
bV9hbmltYXRpb25UaW1lICo9IDM7CisgICAgICAgICAgICBtdWx0aXBsaWVyICo9IDI7CisgICAg
ICAgIH0gZWxzZSBpZiAobV9hbmltYXRpb25UaW1lIDwgMS4yICogc2V0dGluZ3MtPmFuaW1hdGlv
blRpbWUpCisgICAgICAgICAgICBtX2ZsaW5nID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklY
TUU6IFNob3VsZCB3aGF0ZXZlciB3ZSBkbyBmb3IgYWRkaW5nIHRvZ2V0aGVyIGFuaW1hdGlvbiB0
aW1lcyBhbHNvIGJlIHJlZmxlY3RlZCBpbiB0aGUgYXR0YWNrIGFuZCByZWxlYXNlCisgICAgLy8g
dGltZXMgLSBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG5ldyBhbmltYXRpb24gdGltZSBtYXliZT8K
KyAgICBtX2F0dGFja1RpbWUgPSBzZXR0aW5ncy0+YXR0YWNrVGltZTsKKyAgICBtX3JlbGVhc2VU
aW1lID0gc2V0dGluZ3MtPnJlbGVhc2VUaW1lOworICAgIG1fYXR0YWNrQ3VydmUgPSBzZXR0aW5n
cy0+YXR0YWNrQ3VydmU7CisgICAgbV9yZWxlYXNlQ3VydmUgPSBzZXR0aW5ncy0+cmVsZWFzZUN1
cnZlOworICAgIG1fZmxpbmdDdXJ2ZSA9IHNldHRpbmdzLT5mbGluZ0N1cnZlOworCisgICAgLy8g
SSdtIHRoaW5raW5nIHRoYXQgZmxpbmcgdGltZSBzaG91bGQgYmUgMnggdGhlIGV4cGVjdGVkIGFt
b3VudCBvZiB0aW1lIGJldHdlZW4gZXZlbnRzIGZyb20gdGhlIHNwZWNpZmljIGRldmljZSAtCisg
ICAgLy8gZS5nLiwgMS81MHRoIHNlY29uZCBmb3IgMTAwSHogZGV2aWNlcyBsaWtlIHRoZSBtb3Vz
ZSB3aGVlbCAoYW5kIHRvdWNoPykuIDEvMTAwdGggc2Vjb25kIGZvciBzb21ldGhpbmcgbGlrZSBh
IGhpZ2gKKyAgICAvLyBzYW1wbGUgZnJlcXVlbmN5IHRhYmxldC4gVGhlcmUncyBhIHRlbnNpb24g
dGhlcmUgYmV0d2VlbiB0b3VjaCBkcmFncyB3YW50aW5nIGxvdyBsYXRlbmN5IGFuZCBoYXZpbmcg
ZW5vdWdoIHRpbWUKKyAgICAvLyB0byBmaWd1cmUgb3V0IHRoZSBmbGluZyB3aXRob3V0IHRoZSBt
b3VzZSB1cCBldmVudHMuIFdoaWNoIGlzIHdoeSBmbGluZyBiZWhhdmlvciAoYW5kIGV2ZW50dWFs
IGZsaW5nIHRhcmdldGluZykKKyAgICAvLyBiZWxvbmdzIGluIHRoZSBnZXN0dXJlIHJlY29nbml6
ZXIuIFRob3VnaCByZWNvZ25pemluZyBmbGluZ3Mgb24gYSBtb3VzZSB3aGVlbCB3aWxsIGJlIGlu
dGVyZXN0aW5nLi4uCisgICAgbV9mbGluZ1RpbWUgPSBzZXR0aW5ncy0+ZmxpbmdUaW1lOworCisg
ICAgLy8gUHJpb3JpdGl6ZSBvdXIgd2F5IG91dCBvZiBvdmVyIGNvbnN0cmFpbnQuCisgICAgaWYg
KG1fYXR0YWNrVGltZSArIG1fcmVsZWFzZVRpbWUgPiBtX2FuaW1hdGlvblRpbWUpIHsKKyAgICAg
ICAgaWYgKG1fcmVsZWFzZVRpbWUgPiBtX2FuaW1hdGlvblRpbWUpCisgICAgICAgICAgICBtX3Jl
bGVhc2VUaW1lID0gbV9hbmltYXRpb25UaW1lOworICAgICAgICBtX2F0dGFja1RpbWUgPSBtX2Fu
aW1hdGlvblRpbWUgLSBtX3JlbGVhc2VUaW1lOworICAgIH0KKworICAgIG1fb3JpZW50YXRpb24g
PSBvcmllbnRhdGlvbjsKKworICAgIGlmICghbV9kZXNpcmVkUG9zKQorICAgICAgICBtX2Rlc2ly
ZWRQb3MgPSAqbV9jdXJyZW50UG9zOworICAgIGZsb2F0IG5ld1BvcyA9IG1fZGVzaXJlZFBvcyAr
IChzdGVwICogbXVsdGlwbGllcik7CisKKyAgICAvLyBGSVhNRTogUmVhbGx5LCB0aGUgYm91bmNl
IGN1cnZlIHNob3VsZCBiZSBhY3RpdmF0ZWQgb25seSB3aGVuIHVuZGVyIHRoZSBmbGluZyBwcm9m
aWxlLiBUaGUgYm91bmNlIGVuYWJsZWQgc2hvdWxkCisgICAgLy8gZ28gYXdheSBhcyBhIHNlcGFy
YXRlIGZsYWcuCisgICAgaWYgKG5ld1BvcyA8IDAgfHwgbmV3UG9zID4gc2Nyb2xsYWJsZVNpemUp
IHsKKyAgICAgICAgaWYgKHNldHRpbmdzLT5pc0JvdW5jZUVuYWJsZWQpIHsKKyAgICAgICAgICAg
IG1fYm91bmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcmVsZWFzZUN1cnZlID0gU2Nyb2xsQW5p
bWF0b3JTZXR0aW5nczo6Qm91bmNlOworICAgICAgICAgICAgbV9mbGluZ0N1cnZlID0gU2Nyb2xs
QW5pbWF0b3JTZXR0aW5nczo6Qm91bmNlOworICAgICAgICB9CisgICAgICAgIG5ld1BvcyA9IHN0
ZDo6bWF4KHN0ZDo6bWluKG5ld1Bvcywgc2Nyb2xsYWJsZVNpemUpLCAwLjBmKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9ib3VuY2UgPSBmYWxzZTsKKworICAgIGlmIChuZXdQb3MgPT0gbV9kZXNp
cmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2Rlc2lyZWRQb3MgPSBuZXdQ
b3M7CisKKyAgICBpZiAoIW1fc3RhcnRUaW1lKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSB0aGUgdGltZSBmcm9tIHRoZSBldmVudCB0aGF0IGdvdCB1cyBoZXJlLgorICAgICAg
ICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lIC0ga1RpY2tUaW1lIC8gMjsKKyAgICAgICAgbV9z
dGFydFBvcyA9ICptX2N1cnJlbnRQb3M7CisgICAgICAgIG1fbGFzdEFuaW1hdGlvblRpbWUgPSBt
X3N0YXJ0VGltZTsKKyAgICB9CisgICAgbV9zdGFydFZlbG9jaXR5ID0gbV9jdXJyZW50VmVsb2Np
dHk7CisKKyAgICBkb3VibGUgcmVtYWluaW5nRGVsdGEgPSBtX2Rlc2lyZWRQb3MgLSAqbV9jdXJy
ZW50UG9zOworCisgICAgZG91YmxlIGF0dGFja0FyZWEgPSAwOworICAgIGRvdWJsZSBkZWx0YVQg
PSBtX2xhc3RBbmltYXRpb25UaW1lIC0gbV9zdGFydFRpbWU7CisgICAgZG91YmxlIHJlbWFpbmlu
Z0F0dGFja1RpbWUgPSBzdGQ6Om1heChtX2F0dGFja1RpbWUgLSBkZWx0YVQsIDAuKTsKKworICAg
IGlmIChyZW1haW5pbmdBdHRhY2tUaW1lID4gMCkgeworICAgICAgICBkb3VibGUgYXR0YWNrU3Bv
dCA9IChtX2xhc3RBbmltYXRpb25UaW1lIC0gbV9zdGFydFRpbWUpIC8gbV9hdHRhY2tUaW1lOwor
ICAgICAgICBkb3VibGUgYXR0YWNrQmFzZWxpbmUgPSBtX2Rlc2lyZWRWZWxvY2l0eSA/IG1fY3Vy
cmVudFZlbG9jaXR5IC8gbV9kZXNpcmVkVmVsb2NpdHkgOiAwOworICAgICAgICBhdHRhY2tBcmVh
ID0gYXR0YWNrQmFzZWxpbmUgKiByZW1haW5pbmdBdHRhY2tUaW1lCisgICAgICAgICAgICAgICAg
KyAoMSAtIGF0dGFja0Jhc2VsaW5lKSAqIHJlbWFpbmluZ0F0dGFja1RpbWUgKiBjdXJ2ZUFyZWEo
bV9hdHRhY2tDdXJ2ZSwgYXR0YWNrU3BvdCwgMSk7CisgICAgfQorCisKKyAgICBkb3VibGUgcmVs
ZWFzZUFyZWEgPSBtX3JlbGVhc2VUaW1lICogY3VydmVBcmVhKG1fcmVsZWFzZUN1cnZlLCAwLCAx
KTsKKyAgICBkb3VibGUgc3VzdGFpbkFyZWEgPSBzdGQ6Om1heChtX2FuaW1hdGlvblRpbWUgLSBy
ZW1haW5pbmdBdHRhY2tUaW1lIC0gbV9yZWxlYXNlVGltZSwgMC4pOworCisgICAgbV9kZXNpcmVk
VmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIChhdHRhY2tBcmVhICsgc3VzdGFpbkFyZWEgKyBy
ZWxlYXNlQXJlYSk7CisgICAgbV9yZWxlYXNlUG9zID0gbV9kZXNpcmVkUG9zIC0gbV9kZXNpcmVk
VmVsb2NpdHkgKiByZWxlYXNlQXJlYTsKKworICAgIGlmIChhdHRhY2tBcmVhKSB7CisgICAgICAg
IGRvdWJsZSBjdXJyZW50QXR0YWNrUG9zID0gbV9kZXNpcmVkVmVsb2NpdHkgPyBhdHRhY2tDdXJ2
ZShtX2F0dGFja0N1cnZlLCBkZWx0YVQsIG1fYXR0YWNrVGltZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydFBvcywg
bV9hdHRhY2tQb3MpIDogbV9zdGFydFBvczsKKyAgICAgICAgbV9hdHRhY2tQb3MgPSAqbV9jdXJy
ZW50UG9zICsgbV9kZXNpcmVkVmVsb2NpdHkgKiBjdXJ2ZUFyZWEobV9hdHRhY2tDdXJ2ZSwgMCwg
MSkgKiBtX2F0dGFja1RpbWU7CisgICAgICAgIGRvdWJsZSBuZXdBdHRhY2tQb3MgPSBtX2Rlc2ly
ZWRWZWxvY2l0eSA/IGF0dGFja0N1cnZlKG1fYXR0YWNrQ3VydmUsIGRlbHRhVCwgbV9hdHRhY2tU
aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc3RhcnRQb3MsIG1fYXR0YWNrUG9zKSA6IG1fc3RhcnRQb3M7CisgICAgICAgIGlm
IChtX2N1cnJlbnRWZWxvY2l0eSAmJiBuZXdBdHRhY2tQb3MgIT0gY3VycmVudEF0dGFja1BvcykK
KyAgICAgICAgICAgIG1fYXR0YWNrT2Zmc2V0ICs9IGN1cnJlbnRBdHRhY2tQb3MgLSBuZXdBdHRh
Y2tQb3M7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9hdHRhY2tPZmZzZXQgPSAwOworICAgICAg
ICBtX2F0dGFja1BvcyA9ICptX2N1cnJlbnRQb3M7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBGSVhNRTogQWRkIGluIGphbmsgZGV0ZWN0aW9uIHRyYWNlIGV2ZW50cyBpbnRvIHRo
aXMgZnVuY3Rpb24uCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OlBlckF4aXNEYXRhOjph
bmltYXRlU2Nyb2xsKGRvdWJsZSBjdXJyZW50VGltZSkKK3sKKyAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgdGltZTsgZ3JhYmJpbmcgdGhlIGN1cnJlbnQgdGltZSBvbmNlIGhlbHBzIGtlZXAgYSBjb25z
aXN0ZW50IGhlYXJ0YmVhdC4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gY3VycmVu
dFRpbWUgLSBtX2xhc3RBbmltYXRpb25UaW1lOworICAgIG1fbGFzdEFuaW1hdGlvblRpbWUgPSBj
dXJyZW50VGltZTsKKworICAgIGJvb2wgY29udGludWVBbmltYXRpb24gPSB0cnVlOworICAgIGRv
dWJsZSBkZWx0YVQgPSBjdXJyZW50VGltZSAtIG1fc3RhcnRUaW1lOworCisgICAgaWYgKGRlbHRh
VCA+IG1fYW5pbWF0aW9uVGltZSkgeworICAgICAgICBjb250aW51ZUFuaW1hdGlvbiA9IGZhbHNl
OworICAgICAgICAqbV9jdXJyZW50UG9zID0gbV9kZXNpcmVkUG9zOworICAgICAgICByZXNldCgp
OworICAgIH0gZWxzZSBpZiAoZGVsdGFUIDwgbV9hdHRhY2tUaW1lKSB7CisgICAgICAgIC8vIGF0
dGFjayBpcyBiYXNlZCBvbiBhZGRpbmcgdmVsb2NpdHkKKyAgICAgICAgZG91YmxlIG5ld1BvcyA9
IGF0dGFja0N1cnZlKG1fYXR0YWNrQ3VydmUsIGRlbHRhVCwgbV9hdHRhY2tUaW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGFydFBvcywgbV9hdHRhY2tQb3MpICsg
bV9hdHRhY2tPZmZzZXQ7CisgICAgICAgIC8vIERlbHRhIGlzIGFscmVhZHkgcGl4ZWxzIC8gc2Vj
LCBzaW5jZSB0aG9zZSBhcmUgdGhlIHR3byBpdGVtcyB3ZSBoYW5kZWQgaW4uCisgICAgICAgIGlm
IChsYXN0U2Nyb2xsSW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV9jdXJyZW50VmVsb2NpdHkg
PSAobmV3UG9zIC0gKm1fY3VycmVudFBvcykgLyBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAg
ICptX2N1cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgICAgIGRvdWJsZSByZW1haW5pbmdEZWx0YSA9
IG1fcmVsZWFzZVBvcyAtICptX2N1cnJlbnRQb3M7CisgICAgICAgIGRvdWJsZSByZW1haW5pbmdU
aW1lID0gbV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSAtIGRlbHRhVDsKKyAgICAgICAg
bV9kZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIHJlbWFpbmluZ1RpbWU7CisgICAg
fSBlbHNlIGlmIChkZWx0YVQgPCAobV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSkpIHsK
KyAgICAgICAgLy8gRGVzaXJlZCBzdGVhZHkgc3RhdGUgdmVsb2NpdHkgcmUtZXN0aW1hdGlvbi4K
KyAgICAgICAgZG91YmxlIG5ld1BvcyA9IG1fYXR0YWNrUG9zICsgbV9hdHRhY2tPZmZzZXQgKyAo
ZGVsdGFUIC0gbV9hdHRhY2tUaW1lKSAqIG1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICBpZiAo
bGFzdFNjcm9sbEludGVydmFsID4gMCkKKyAgICAgICAgICAgIG1fY3VycmVudFZlbG9jaXR5ID0g
KG5ld1BvcyAtICptX2N1cnJlbnRQb3MpIC8gbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICAq
bV9jdXJyZW50UG9zID0gbmV3UG9zOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHJlbGVhc2Ug
aXMgYmFzZWQgb24gdGFyZ2V0aW5nIHRoZSBleGFjdCBmaW5hbCBwb3NpdGlvbi4KKyAgICAgICAg
ZG91YmxlIHJlbGVhc2VEZWx0YVQgPSBkZWx0YVQgLSAobV9hbmltYXRpb25UaW1lIC0gbV9yZWxl
YXNlVGltZSk7CisgICAgICAgIGRvdWJsZSBuZXdQb3MgPSByZWxlYXNlQ3VydmUobV9yZWxlYXNl
Q3VydmUsIHJlbGVhc2VEZWx0YVQsIG1fcmVsZWFzZVRpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9yZWxlYXNlUG9zLCBtX2Rlc2lyZWRQb3MpOworICAgICAgICAv
LyBOb3JtYWxpemUgdmVsb2NpdHkgdG8gYSBwZXIgc2Vjb25kIGFtb3VudC4gQ291bGQgYmUgdXNl
ZCB0byBjaGVjayBmb3IgamFuay4KKyAgICAgICAgaWYgKGxhc3RTY3JvbGxJbnRlcnZhbCA+IDAp
CisgICAgICAgICAgICBtX2N1cnJlbnRWZWxvY2l0eSA9IChuZXdQb3MgLSAqbV9jdXJyZW50UG9z
KSAvIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgKm1fY3VycmVudFBvcyA9IG5ld1BvczsK
KyAgICB9CisgICAgcmV0dXJuIGNvbnRpbnVlQW5pbWF0aW9uOworfQorCitTY3JvbGxBbmltYXRv
ckNocm9taXVtOjpTY3JvbGxBbmltYXRvckNocm9taXVtKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQorICAgICwgbV9o
b3Jpem9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAgICAsIG1fdmVydGljYWxEYXRh
KHRoaXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtOjp+
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSgpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVk
ZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZt
X3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHN0ZXAs
IGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChv
cmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgLy8gVE9E
TyhzY290dGJ5ZXIpOiBnZXQgdGhlIHR5cGUgcGFzc2VkIGluLiBNb3VzZVdoZWVsIGNvdWxkIGFs
c28gYmUgYnkgbGluZSwgYnV0IHNob3VsZCBzdGlsbCBoYXZlIGRpZmZlcmVudAorICAgIC8vIGFu
aW1hdGlvbiBzZXR0aW5ncyB0aGFuIHRoZSBrZXlib2FyZC4KKyAgICBzdGF0aWMgU2Nyb2xsQW5p
bWF0b3JTZXR0aW5ncyBzZXR0aW5nczsKKworICAgIGNvbnN0IFNjcm9sbEFuaW1hdG9yU2V0dGlu
Z3M6OlNldHRpbmdzICppbnB1dFNldHRpbmdzOworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsK
KyAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6CisgICAgICAgIGlucHV0U2V0dGluZ3MgPSAmc2V0
dGluZ3Muc2V0dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6RGVmYXVsdF07CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlMaW5lOgorICAgICAgICBpbnB1dFNldHRpbmdzID0g
JnNldHRpbmdzLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OktleWJvYXJkTGluZV07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQYWdlOgorICAgICAgICBpbnB1dFNl
dHRpbmdzID0gJnNldHRpbmdzLnNldHRpbmdzW1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OktleWJv
YXJkUGFnZV07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDoKKyAgICAg
ICAgaWYgKGZhYnMobXVsdGlwbGllcikgPiAyMCkKKyAgICAgICAgICAgIGlucHV0U2V0dGluZ3Mg
PSAmc2V0dGluZ3Muc2V0dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6TW91c2VXaGVlbF07
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlucHV0U2V0dGluZ3MgPSAmc2V0dGluZ3Muc2V0
dGluZ3NbU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6VHJhY2twYWRdOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBpbnB1dFNldHRpbmdzID0gJnNldHRpbmdzLnNldHRpbmdz
W1Njcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkRlZmF1bHRdOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICAvLyBJZiB0aGUgaW5kaXZpZHVhbCBpbnB1dCBzZXR0aW5nIGlzIGRpc2FibGVkLCBi
YWlsLgorICAgIGlmICghaW5wdXRTZXR0aW5ncy0+aXNFbmFibGVkKQorICAgICAgICByZXR1cm4g
U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11
bHRpcGxpZXIpOworCisgICAgLy8gVGhpcyBpcyBhbiBhbmltYXRhYmxlIHNjcm9sbC4gQ2FsY3Vs
YXRlIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8gJm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRh
bERhdGE7CisKKyAgICBmbG9hdCBzY3JvbGxhYmxlU2l6ZSA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSk7CisgICAgYm9vbCByZXN1
bHQgPSBkYXRhLT51cGRhdGVEYXRhRnJvbVNldHRpbmdzKG9yaWVudGF0aW9uLCBzdGVwLCBtdWx0
aXBsaWVyLCBzY3JvbGxhYmxlU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1RGOjpjdXJyZW50VGltZSgpLCBpbnB1dFNldHRpbmdzKTsKKyAgICBp
ZiAoIWRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICByZXN1bHQg
Jj0gZGF0YS0+YW5pbWF0ZVNjcm9sbChXVEY6OmN1cnJlbnRUaW1lKCkpOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qo
YW5pbWF0aW9uVGltZXJEZWxheSk7CisgICAgfQorICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bTo6
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkK
K3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7Cisg
ICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKKworICAgIG1f
aG9yaXpvbnRhbERhdGEucmVzZXQoKTsKKyAgICAqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQ
b3MgPSBvZmZzZXQueCgpOworICAgIG1faG9yaXpvbnRhbERhdGEubV9kZXNpcmVkUG9zID0gb2Zm
c2V0LngoKTsKKworICAgIG1fdmVydGljYWxEYXRhLnJlc2V0KCk7CisgICAgKm1fdmVydGljYWxE
YXRhLm1fY3VycmVudFBvcyA9IG9mZnNldC55KCk7CisgICAgbV92ZXJ0aWNhbERhdGEubV9kZXNp
cmVkUG9zID0gb2Zmc2V0LnkoKTsKKworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW06OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bT4qIHRpbWVyKQoreworICAgIGlmICgodGltZXIgPT0gJm1f
aG9yaXpvbnRhbERhdGEubV9hbmltYXRpb25UaW1lcikgPworICAgICAgICBtX2hvcml6b250YWxE
YXRhLmFuaW1hdGVTY3JvbGwoV1RGOjpjdXJyZW50VGltZSgpKSA6CisgICAgICAgIG1fdmVydGlj
YWxEYXRhLmFuaW1hdGVTY3JvbGwoV1RGOjpjdXJyZW50VGltZSgpKSkKKyAgICAgICAgdGltZXIt
PnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICBub3RpdHlQb3NpdGlvbkNo
YW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtOjpzdG9wQW5pbWF0aW9u
VGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSogZGF0YSkKK3sKKyAgICBpZiAoZGF0YS0+bV9hbmlt
YXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0
b3AoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNGJiYzMzYjU0
MDYxMmZmOTE4YWJmNzZkMTkzMGIyYjhmZTkxMjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5oCkBAIC0w
LDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bV9oCisjZGVmaW5l
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1faAorCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK2Ns
YXNzIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1UZXN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7
CisgICAgICAgIERlZmF1bHQgPSAwLAorICAgICAgICBLZXlib2FyZExpbmUsCisgICAgICAgIEtl
eWJvYXJkUGFnZSwKKyAgICAgICAgTW91c2VXaGVlbCwKKyAgICAgICAgVHJhY2twYWQsCisKKyAg
ICAgICAgLy8gV2hlbiBhZGRpbmcgdmFsdWVzLCBtYWtlIHN1cmUgdG8ga2VlcCBMYXN0RW50cnkg
YXQgdGhlIGVuZC4KKyAgICAgICAgTGFzdEVudHJ5CisgICAgfTsKKworICAgIGVudW0gQ3VydmUg
eworICAgICAgICBMaW5lYXIsCisgICAgICAgIFF1YWRyYXRpYywKKyAgICAgICAgQ3ViaWMsCisg
ICAgICAgIEJvdW5jZQorICAgIH07CisKKyAgICAvLyBDYW4gYmUgb3ZlcnNwZWNpZmllZC4gYW5p
bWF0aW9uVGltZSB0YWtlcyBwcmlvcml0eSBvdmVyIHJlbGVhc2VUaW1lIHRha2VzIHByaW9yaXR5
IG92ZXIgYXR0YWNrVGltZS4KKyAgICAvLyBNaXNzaW5nOiBob3cgdG8gc3BlY2lmeSBhbmltYXRp
b24gdGltZSBhY2N1bXVsYXRpb24gKGUuZy4sIHB1cmUgYWRkaXRpdmUsIGFzeW1wdG90aWMgdG8g
YSBsaW1pdCB3aXRoIGEgY3VydmU/KQorICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgYm9v
bCBpc0VuYWJsZWQ7CisKKyAgICAgICAgZG91YmxlIGFuaW1hdGlvblRpbWU7CisKKyAgICAgICAg
Q3VydmUgYXR0YWNrQ3VydmU7CisgICAgICAgIGRvdWJsZSBhdHRhY2tUaW1lOworCisgICAgICAg
IEN1cnZlIHJlbGVhc2VDdXJ2ZTsKKyAgICAgICAgZG91YmxlIHJlbGVhc2VUaW1lOworCisgICAg
ICAgIGJvb2wgaXNCb3VuY2VFbmFibGVkOworCisgICAgICAgIGJvb2wgaXNGbGluZ0VuYWJsZWQ7
CisgICAgICAgIEN1cnZlIGZsaW5nQ3VydmU7CisgICAgICAgIGRvdWJsZSBmbGluZ1RpbWU7Cisg
ICAgICAgIGRvdWJsZSBmbGluZ01pbmltdW1TbG9wZTsKKyAgICB9IFNldHRpbmdzOworCisgICAg
U2V0dGluZ3Mgc2V0dGluZ3NbNV07CisKKyAgICAvLyBBbGxvdyBmb3IgcGVyLXBsYXRmb3JtIGlu
aXRpYWxpemF0aW9uLgorICAgIFNjcm9sbEFuaW1hdG9yU2V0dGluZ3MoKTsKK307CisKK2NsYXNz
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0gOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworICBwdWJs
aWM6CisgICAgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bShTY3JvbGxhYmxlQXJlYSopOworICAgIHZp
cnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW0oKTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBm
bG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICBwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyA6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1UZXN0OworCisgICAgc3RydWN0IFBlckF4aXNE
YXRhIHsKKyAgICAgICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSogcGFyZW50
LCBmbG9hdCogY3VycmVudFBvcyk7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgYm9v
bCB1cGRhdGVEYXRhRnJvbVNldHRpbmdzKFNjcm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyLCBmbG9hdCBzY3JvbGxhYmxlU2l6ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZSwgY29uc3QgU2Nyb2xsQW5p
bWF0b3JTZXR0aW5nczo6U2V0dGluZ3MqKTsKKyAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRv
dWJsZSBjdXJyZW50VGltZSk7CisKKyAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJ2ZUludGVncmFs
QXQoU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUsIGRvdWJsZSB0KTsKKyAgICAgICAgc3Rh
dGljIGRvdWJsZSBjdXJ2ZUFyZWEoU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3VydmUsIGRvdWJs
ZSBzdGFydFQsIGRvdWJsZSBlbmRUKTsKKyAgICAgICAgc3RhdGljIGRvdWJsZSBhdHRhY2tDdXJ2
ZShTY3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSwgZG91YmxlIGRlbHRhVCwgZG91YmxlIGN1
cnZlVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3RhcnRQb3Ms
IGRvdWJsZSBhdHRhY2tQb3MpOworICAgICAgICBzdGF0aWMgZG91YmxlIHJlbGVhc2VDdXJ2ZShT
Y3JvbGxBbmltYXRvclNldHRpbmdzOjpDdXJ2ZSwgZG91YmxlIGRlbHRhVCwgZG91YmxlIGN1cnZl
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJlbGVhc2VQb3Ms
IGRvdWJsZSBkZXNpcmVkUG9zKTsKKworICAgICAgICBmbG9hdCogbV9jdXJyZW50UG9zOworICAg
ICAgICBkb3VibGUgbV9jdXJyZW50VmVsb2NpdHk7CisKKyAgICAgICAgZG91YmxlIG1fZGVzaXJl
ZFBvczsKKyAgICAgICAgZG91YmxlIG1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICBkb3VibGUg
bV9jb2FzdFZlbG9jaXR5OworCisgICAgICAgIGRvdWJsZSBtX3N0YXJ0UG9zOworICAgICAgICBk
b3VibGUgbV9zdGFydFRpbWU7CisgICAgICAgIGRvdWJsZSBtX3N0YXJ0VmVsb2NpdHk7CisKKyAg
ICAgICAgZG91YmxlIG1fYW5pbWF0aW9uVGltZTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1h
dGlvblRpbWU7CisKKyAgICAgICAgZG91YmxlIG1fYXR0YWNrUG9zOworICAgICAgICBkb3VibGUg
bV9hdHRhY2tUaW1lOworICAgICAgICBkb3VibGUgbV9hdHRhY2tPZmZzZXQ7CisgICAgICAgIFNj
cm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1cnZlIG1fYXR0YWNrQ3VydmU7CisKKyAgICAgICAgZG91
YmxlIG1fcmVsZWFzZVBvczsKKyAgICAgICAgZG91YmxlIG1fcmVsZWFzZVRpbWU7CisgICAgICAg
IFNjcm9sbEFuaW1hdG9yU2V0dGluZ3M6OkN1cnZlIG1fcmVsZWFzZUN1cnZlOworCisgICAgICAg
IGRvdWJsZSBtX2ZsaW5nVGltZTsKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3JTZXR0aW5nczo6Q3Vy
dmUgbV9mbGluZ0N1cnZlOworCisgICAgICAgIGJvb2wgbV9ib3VuY2U7CisgICAgICAgIGJvb2wg
bV9mbGluZzsKKyAgICAgICAgZG91YmxlIG1fZmxpbmdBbW91bnQ7CisgICAgICAgIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisKKyAgICAgICAgVGltZXI8U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bT4gbV9hbmltYXRpb25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAgdm9pZCBhbmltYXRpb25UaW1lckZp
cmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW0+Kik7CisgICAgdm9pZCBzdG9wQW5pbWF0
aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSopOworCisgICAgUGVyQXhpc0RhdGEgbV9ob3Jp
em9udGFsRGF0YTsKKyAgICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2FsRGF0YTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQor
CisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGRjYTlkYWVjNDY1ZDNhZjUwYWY1YjY4OGYwNjU3ZTc2YjdkMTBhZjUuLjMxNWE1
MTc4NmRhMjFkYjdjNGViYWY0ZTM5OTNmNGZmYTQ1YzIxOWIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDYtMDMgIFNjb3R0IEJ5ZXIgIDxzY290dGJ5
ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBpbml0aWFsIHBhdGNoLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4NzgKKwor
ICAgICAgICBBZGQgaW4gYSBzY3JvbGxpbmcgYW5pbWF0b3IgaW4gdGhlIENocm9taXVtIHBsYXRm
b3JtIGRpcmVjdG9yeSwgYWRkIGluIGEgc2V0dGluZ3MgbWVjaGFuaXNtLCBpbmNsdWRpbmcgcnVu
LXRpbWUKKyAgICAgICAgZW5hYmxlbWVudCBvZiB0aGUgc2Nyb2xsaW5nIGFuaW1hdG9yLiBUaGUg
c21vb3RoIHNjcm9sbGluZyBjb2RlIGlzIGNvbXBpbGVkIG91dCBieSBkZWZhdWx0LiBUZXN0cyB0
byBmb2xsb3cuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBz
cmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBs
OjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcik6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5oOgorCiAyMDExLTA2LTAzICBQaGlsaXBwZSBCZWF1Y2hhbXAgIDxwaGlsaXBwZS5iZWF1Y2hh
bXBAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCmluZGV4IDM2MTkyNzM0
YTZmNzM4YzMwNzliMWIyNDUxMGRhYTBkNzI1OWM0MWYuLjIzZmZjY2MyMGY2YmE3M2U1MjJjNDE3
ZTRkM2IwOTU1NzIyNTllMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U2V0dGluZ3MuaApAQCAtMTIzLDYgKzEyMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBbGxv
d0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAg
fldlYlNldHRpbmdzKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcAppbmRleCBmMzc0NDhmM2Y2MTA1ODRmOGEzNTI5ODg4Y2YzYmQ0MTM0MDQx
ZDA5Li41NDNjZWFjMWI5YjIzMzY5YTlhNDc1NzkxZmMxODE5ODI4NzI1YzBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTQxNyw0ICs0
MTcsMTQgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFsbG93UnVubmluZ09mSW5zZWN1cmVD
b250ZW50KGJvb2wgZW5hYmxlZCkKICAgICBtX3NldHRpbmdzLT5zZXRBbGxvd1J1bm5pbmdPZklu
c2VjdXJlQ29udGVudChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEVu
YWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wgZW5hYmxlZCkKK3sKKyNpZiBFTkFCTEUoU01PT1RIX1ND
Uk9MTElORykKKyAgICBtX3NldHRpbmdzLT5zZXRFbmFibGVTY3JvbGxBbmltYXRvcihlbmFibGVk
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCit9CisKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5oCmluZGV4IGMwZThhM2RhZGUyM2IzNWUyMjE0YTY5OGUwZTg2MzU1MTEzMWUyODIu
LjRlODUwYmI4NTA2ZTFmMGRhYzI2N2JlODg2YjBmNzA2MTJkYmVlYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC0xMTYsNiArMTE2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRGdWxsU2NyZWVuRW5hYmxlZChib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGJvb2wpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sKTsKIAogcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97852</attachid>
            <date>2011-06-20 13:32:16 -0700</date>
            <delta_ts>2011-06-20 16:16:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61878-20110620133214.patch</filename>
            <type>text/plain</type>
            <size>50503</size>
            <attacher name="Scott Byer">scottbyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkyNDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZTZkMGUxODlhNjdhYWYz
YTMxMTg2Mzg5ZjEwZDlmMWZmY2FmN2NiLi4xNjE0NTBkN2QwMzlmYTQzOWI2NTYyZjcyNmMwOTMz
NjVkZDk5YjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDYtMjAgIFNjb3R0
IEJ5ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxpbmcgZm9yIENocm9taXVtLCBp
bml0aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBkZWZhdWx0IHNjcm9sbGluZyBhbmltYXRv
ciBpbiB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LCB3aXRoIGEgcnVuIHRpbWUgZW5hYmxlIHN3aXRj
aCwgdG8gcHJvdmlkZQorICAgICAgICBhbmltYXRlZCAvIHNtb290aCBzY3JvbGxpbmcgb24gcGxh
dGZvcm1zIGFuZCBmb3IgaW5wdXQgZGV2aWNlcyB3aGVyZSBpdCdzIG5vdCBwcm92aWRlZCBieSB0
aGUgcGxhdGZvcm0sIGFuZCB0bworICAgICAgICBiZSBlYXNpbHkgY29uZmlndXJhYmxlIHRvIHdo
YXQgc2l0dWF0dWF0aW9ucyB0aGUgYW5pbWF0aW9ucyBhcmUgcHJvdmlkZWQgZm9yLiBUaGUgc21v
b3RoIHNjcm9sbGluZyBjb2RlIGlzCisgICAgICAgIGNvbXBpbGVkIG91dCBieSBkZWZhdWx0Lgor
CisgICAgICAgIFVuaXQgdGVzdHMgaW4gY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5j
cHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbEFuaW1hdG9yRW5hYmxlZCk6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgICogcGFn
ZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldEVuYWJsZVNjcm9s
bEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzY3JvbGxBbmltYXRvckVu
YWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6Y3VydmVBdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRhOjphdHRh
Y2tDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNE
YXRhOjpyZWxlYXNlQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25l
OjpQZXJBeGlzRGF0YTo6Y3VydmVEZXJpdmF0aXZlQXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6cmVzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6dXBkYXRlRGF0YUZyb21Q
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhp
c0RhdGE6OmFuaW1hdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JO
b25lOjpTY3JvbGxBbmltYXRvck5vbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JOb25lOjp+U2Nyb2xsQW5pbWF0b3JOb25lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTm9uZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTm9u
ZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTm9uZTo6YW5pbWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck5vbmU6OnN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpzY3JvbGxBbmltYXRvckVuYWJsZWQpOgorCiAyMDExLTA2LTE5ICBNYXJ0aW4gUm9iaW5zb24g
IDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXou
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggYTExNzQ0ZmYzNTU5Mzg0YzhmNjk0YmM0MTg1MmZmZGZlYjhk
N2IzNC4uMTAwMWU1ZGIzZTBhMzQyMmUzMWMxZjMyMWJiODRmMTY5OTM3ZDE4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMzY1OCw2ICszNjU4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY2hl
bWVSZWdpc3RyeS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IDE4NjUwMTgwMzc0MzEwMGVjZjI3M2I0MmQzZjEzMDdjY2U3YTI1
YjcuLjNlZjU4Yjg0NDVmMjBiZmM2N2M3NDljNzNlMTEyMWZiOWU1NjRlZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTIyNzEsNiArMjI3MSwxNSBAQCB2b2lkIEZyYW1lVmlldzo6
bm90aWZ5UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludCgpIGNvbnN0CiAgICAgICAgICgqaXQp
LT5zY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYVdpbGxQYWludCgpOwogfQogCitib29sIEZy
YW1lVmlldzo6c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKKyAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+c2V0dGluZ3MoKSkKKyAg
ICAgICAgcmV0dXJuIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCk7
CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NV
UFBPUlQpCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRGFzaGJvYXJkUmVnaW9ucygpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAppbmRleCAwNGY1MWI3NWU2NGZhMzI4M2MwZmFjYzg1NDAzNWQ4N2E3
M2YwODcxLi40ZGJjOTU2ZGZkZTg4ODBiNTJhYTY2MGM3MDhkYzNkMjFiZGU0ZmI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTMzOCw2ICszMzgsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlQYWdlVGhhdENvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgbV9wYWdlID0gMDsgfQogCisgICAg
dmlydHVhbCBib29sIHNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpIGNvbnN0OworCiAgICAgdm9pZCBk
ZWZlcnJlZFJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lVmlldz4qKTsKICAgICB2b2lkIGRv
RGVmZXJyZWRSZXBhaW50cygpOwogICAgIHZvaWQgdXBkYXRlRGVmZXJyZWRSZXBhaW50RGVsYXko
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggODc4YTliODJmNmE4ZGI2NGU0OWQ4MzEy
NDQ3OTUwNDgzNTNmZDcxZC4uNzZhNmQ2YjExZDM3MWFlNGYxNTI0MjdhMDBlM2YxMjFlNmI4Yzgz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTE4MSw2ICsxODEsOSBAQCBTZXR0aW5n
czo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fc2hvdWxkSW5qZWN0VXNlclNjcmlwdHNJ
bkluaXRpYWxFbXB0eURvY3VtZW50KGZhbHNlKQogICAgICwgbV9hbGxvd0Rpc3BsYXlPZkluc2Vj
dXJlQ29udGVudCh0cnVlKQogICAgICwgbV9hbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCh0
cnVlKQorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICwgbV9zY3JvbGxBbmltYXRv
ckVuYWJsZWQoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
VGltZXIodGhpcywgJlNldHRpbmdzOjpsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHlUaW1lckZpcmVk
KQogewogICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQsIHNvIHdl
IGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAppbmRleCA4
OTljOTdjNGU3ZDg1OWZjNTVhM2ZjNDUxMWI3MWJhZTNkYTkxYzQ0Li5lYjkwNjY1YWNlMDMyODlh
ZmFiODZiMTU3ODg4YTQ1NjJhNjk3OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCkBAIC00MDUs
NiArNDA1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBbGxvd1J1
bm5pbmdPZkluc2VjdXJlQ29udGVudChib29sIGZsYWcpIHsgbV9hbGxvd1J1bm5pbmdPZkluc2Vj
dXJlQ29udGVudCA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBhbGxvd1J1bm5pbmdPZkluc2VjdXJl
Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQ7
IH0KIAorI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICAgICB2b2lkIHNldEVuYWJs
ZVNjcm9sbEFuaW1hdG9yKGJvb2wgZmxhZykgeyBtX3Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZs
YWc7IH0KKyAgICAgICAgYm9vbCBzY3JvbGxBbmltYXRvckVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbEFuaW1hdG9yRW5hYmxlZDsgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAg
ICAgICBQYWdlKiBtX3BhZ2U7CiAKQEAgLTUxMCw2ICs1MTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgbV9zaG91bGRJbmplY3RVc2VyU2NyaXB0c0luSW5pdGlhbEVtcHR5
RG9jdW1lbnQgOiAxOwogICAgICAgICBib29sIG1fYWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRl
bnQgOiAxOwogICAgICAgICBib29sIG1fYWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQgOiAx
OworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorICAgICAgICBib29sIG1fc2Nyb2xsQW5p
bWF0b3JFbmFibGVkIDogMTsKKyNlbmRpZgogCiAgICAgICAgIFRpbWVyPFNldHRpbmdzPiBtX2xv
YWRzSW1hZ2VzQXV0b21hdGljYWxseVRpbWVyOwogICAgICAgICB2b2lkIGxvYWRzSW1hZ2VzQXV0
b21hdGljYWxseVRpbWVyRmlyZWQoVGltZXI8U2V0dGluZ3M+Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzE1YzBhNjlk
OGFmM2RhOTg0ODg1NzIxYjFjMWU4N2I4N2Q0MDlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApAQCAtMCwwICsxLDM2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKwor
I2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTm9uZS5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIK
KyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgi
CisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBkb3VibGUga1RpY2tUaW1lID0gLjAxNjY7CisKKy8v
IFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIHRpbWVyIGRlbGF5IC0gaXQgbmVlZHMgdG8gYmUgc2xp
Z2h0bHkgc21hbGxlciB0aGFuIHRoZSB0aWNrIGNvdW50IHRvIGxlYXZlIHNvbWUgb3ZlcmhlYWQu
CitzdGF0aWMgZG91YmxlIGtBbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTU7CisKK1Bhc3NPd25Q
dHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQoreworICAgIGlmIChzY3JvbGxhYmxlQXJlYSAmJiBzY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgU2Nyb2xsQW5pbWF0b3JOb25lKHNjcm9sbGFibGVBcmVhKSk7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkpOworfQorCitTY3JvbGxBbmlt
YXRvck5vbmU6OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMoKQorICAgIDogbV9pc0VuYWJsZWQoZmFs
c2UpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yTm9uZTo6UGFyYW1ldGVyczo6UGFyYW1ldGVycyhi
b29sIGlzRW5hYmxlZCwgZG91YmxlIGFuaW1hdGlvblRpbWUsIEN1cnZlIGF0dGFja0N1cnZlLCBk
b3VibGUgYXR0YWNrVGltZSwgQ3VydmUgcmVsZWFzZUN1cnZlLCBkb3VibGUgcmVsZWFzZVRpbWUp
CisgICAgOiBtX2lzRW5hYmxlZChpc0VuYWJsZWQpCisgICAgLCBtX2FuaW1hdGlvblRpbWUoYW5p
bWF0aW9uVGltZSkKKyAgICAsIG1fYXR0YWNrQ3VydmUoYXR0YWNrQ3VydmUpCisgICAgLCBtX2F0
dGFja1RpbWUoYXR0YWNrVGltZSkKKyAgICAsIG1fcmVsZWFzZUN1cnZlKHJlbGVhc2VDdXJ2ZSkK
KyAgICAsIG1fcmVsZWFzZVRpbWUocmVsZWFzZVRpbWUpCit7Cit9CisKK2RvdWJsZSBTY3JvbGxB
bmltYXRvck5vbmU6OlBlckF4aXNEYXRhOjpjdXJ2ZUF0KEN1cnZlIGN1cnZlLCBkb3VibGUgdCkK
K3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBMaW5lYXI6CisgICAgICAgIHJldHVy
biB0ICogdDsKKyAgICBjYXNlIFF1YWRyYXRpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogdDsK
KyAgICBjYXNlIEN1YmljOgorICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDsKKyAgICBjYXNl
IEJvdW5jZToKKyAgICAgICAgaWYgKHQgPCAxIC8gMi43NSkKKyAgICAgICAgICAgIHJldHVybiA3
LjU2MjUgKiB0ICogdDsKKyAgICAgICAgaWYgKHQgPCAyIC8gMi43NSkgeworICAgICAgICAgICAg
ZG91YmxlIHQxID0gdCAtIDEuNSAvIDIuNzU7CisgICAgICAgICAgICByZXR1cm4gNy41NjI1ICog
dDEgKiB0MSArIC43NTsKKyAgICAgICAgfQorICAgICAgICBpZiAodCA8IDIuNSAvIDIuNzUpIHsK
KyAgICAgICAgICAgIGRvdWJsZSB0MiA9IHQgLSAyLjI1IC8gMi43NTsKKyAgICAgICAgICAgIHJl
dHVybiA3LjU2MjUgKiB0MiAqIHQyICsgLjkzNzU7CisgICAgICAgIH0KKyAgICAgICAgdCAtPSAy
LjYyNSAvIDIuNzU7CisgICAgICAgIHJldHVybiA3LjU2MjUgKiB0ICogdCArIC45ODQzNzU7Cisg
ICAgfQorfQorCitkb3VibGUgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6YXR0YWNr
Q3VydmUoQ3VydmUgY3VydmUsIGRvdWJsZSBkZWx0YVRpbWUsIGRvdWJsZSBjdXJ2ZVQsIGRvdWJs
ZSBzdGFydFBvc2l0aW9uLCBkb3VibGUgYXR0YWNrUG9zaXRpb24pCit7CisgICAgZG91YmxlIHQg
PSBkZWx0YVRpbWUgLyBjdXJ2ZVQ7CisgICAgZG91YmxlIHBvc2l0aW9uRmFjdG9yID0gY3VydmVB
dChjdXJ2ZSwgdCk7CisgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb24gKyBwb3NpdGlvbkZhY3RvciAq
IChhdHRhY2tQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOworfQorCitkb3VibGUgU2Nyb2xsQW5p
bWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6cmVsZWFzZUN1cnZlKEN1cnZlIGN1cnZlLCBkb3VibGUg
ZGVsdGFUaW1lLCBkb3VibGUgY3VydmVULCBkb3VibGUgcmVsZWFzZVBvc2l0aW9uLCBkb3VibGUg
ZGVzaXJlZFBvc2l0aW9uKQoreworICAgIGRvdWJsZSB0ID0gZGVsdGFUaW1lIC8gY3VydmVUOwor
ICAgIGRvdWJsZSBwb3NpdGlvbkZhY3RvciA9IDEgLSBjdXJ2ZUF0KGN1cnZlLCAxIC0gdCk7Cisg
ICAgcmV0dXJuIHJlbGVhc2VQb3NpdGlvbiArIChwb3NpdGlvbkZhY3RvciAqIChkZXNpcmVkUG9z
aXRpb24gLSByZWxlYXNlUG9zaXRpb24pKTsKK30KKworZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9u
ZTo6UGVyQXhpc0RhdGE6OmN1cnZlRGVyaXZhdGl2ZUF0KEN1cnZlIGN1cnZlLCBkb3VibGUgdCkK
K3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBMaW5lYXI6CisgICAgICAgIHJldHVy
biB0ICogMjsKKyAgICBjYXNlIFF1YWRyYXRpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogMzsK
KyAgICBjYXNlIEN1YmljOgorICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogNDsKKyAgICBjYXNl
IEJvdW5jZToKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorfQorCitTY3JvbGxBbmltYXRvck5v
bmU6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvck5vbmUqIHBhcmVudCwg
ZmxvYXQqIGN1cnJlbnRQb3NpdGlvbikKKyAgICA6IG1fY3VycmVudFBvc2l0aW9uKGN1cnJlbnRQ
b3NpdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JO
b25lOjphbmltYXRpb25UaW1lckZpcmVkKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6cmVzZXQoKQoreworICAgIG1fY3VycmVudFZl
bG9jaXR5ID0gMDsKKworICAgIG1fZGVzaXJlZFBvc2l0aW9uID0gMDsKKyAgICBtX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7CisKKyAgICBtX3N0YXJ0UG9zaXRpb24gPSAwOworICAgIG1fc3RhcnRUaW1l
ID0gMDsKKyAgICBtX3N0YXJ0VmVsb2NpdHkgPSAwOworCisgICAgbV9hbmltYXRpb25UaW1lID0g
MDsKKyAgICBtX2xhc3RBbmltYXRpb25UaW1lID0gMDsKKworICAgIG1fYXR0YWNrUG9zaXRpb24g
PSAwOworICAgIG1fYXR0YWNrVGltZSA9IDA7CisgICAgbV9hdHRhY2tDdXJ2ZSA9IFF1YWRyYXRp
YzsKKworICAgIG1fcmVsZWFzZVBvc2l0aW9uID0gMDsKKyAgICBtX3JlbGVhc2VUaW1lID0gMDsK
KyAgICBtX3JlbGVhc2VDdXJ2ZSA9IFF1YWRyYXRpYzsKK30KKworCitib29sIFNjcm9sbEFuaW1h
dG9yTm9uZTo6UGVyQXhpc0RhdGE6OnVwZGF0ZURhdGFGcm9tUGFyYW1ldGVycyhTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgZmxv
YXQgc2Nyb2xsYWJsZVNpemUsIGRvdWJsZSBjdXJyZW50VGltZSwgUGFyYW1ldGVycyogcGFyYW1l
dGVycykKK3sKKyAgICBtX2FuaW1hdGlvblRpbWUgPSBwYXJhbWV0ZXJzLT5tX2FuaW1hdGlvblRp
bWU7CisgICAgbV9hdHRhY2tUaW1lID0gcGFyYW1ldGVycy0+bV9hdHRhY2tUaW1lOworICAgIG1f
cmVsZWFzZVRpbWUgPSBwYXJhbWV0ZXJzLT5tX3JlbGVhc2VUaW1lOworICAgIG1fYXR0YWNrQ3Vy
dmUgPSBwYXJhbWV0ZXJzLT5tX2F0dGFja0N1cnZlOworICAgIG1fcmVsZWFzZUN1cnZlID0gcGFy
YW1ldGVycy0+bV9yZWxlYXNlQ3VydmU7CisKKyAgICAvLyBQcmlvcml0aXplIG91ciB3YXkgb3V0
IG9mIG92ZXIgY29uc3RyYWludC4KKyAgICBpZiAobV9hdHRhY2tUaW1lICsgbV9yZWxlYXNlVGlt
ZSA+IG1fYW5pbWF0aW9uVGltZSkgeworICAgICAgICBpZiAobV9yZWxlYXNlVGltZSA+IG1fYW5p
bWF0aW9uVGltZSkKKyAgICAgICAgICAgIG1fcmVsZWFzZVRpbWUgPSBtX2FuaW1hdGlvblRpbWU7
CisgICAgICAgIG1fYXR0YWNrVGltZSA9IG1fYW5pbWF0aW9uVGltZSAtIG1fcmVsZWFzZVRpbWU7
CisgICAgfQorCisgICAgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworCisgICAgaWYgKCFt
X2Rlc2lyZWRQb3NpdGlvbikKKyAgICAgICAgbV9kZXNpcmVkUG9zaXRpb24gPSAqbV9jdXJyZW50
UG9zaXRpb247CisgICAgZmxvYXQgbmV3UG9zaXRpb24gPSBtX2Rlc2lyZWRQb3NpdGlvbiArIChz
dGVwICogbXVsdGlwbGllcik7CisKKyAgICBpZiAobmV3UG9zaXRpb24gPCAwIHx8IG5ld1Bvc2l0
aW9uID4gc2Nyb2xsYWJsZVNpemUpCisgICAgICAgIG5ld1Bvc2l0aW9uID0gc3RkOjptYXgoc3Rk
OjptaW4obmV3UG9zaXRpb24sIHNjcm9sbGFibGVTaXplKSwgMC4wZik7CisKKyAgICBpZiAobmV3
UG9zaXRpb24gPT0gbV9kZXNpcmVkUG9zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1fZGVzaXJlZFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBpZiAoIW1fc3RhcnRU
aW1lKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB0aGUgdGltZSBmcm9tIHRo
ZSBldmVudCB0aGF0IGdvdCB1cyBoZXJlLgorICAgICAgICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRU
aW1lIC0ga1RpY2tUaW1lIC8gMjsKKyAgICAgICAgbV9zdGFydFBvc2l0aW9uID0gKm1fY3VycmVu
dFBvc2l0aW9uOworICAgICAgICBtX2xhc3RBbmltYXRpb25UaW1lID0gY3VycmVudFRpbWU7Cisg
ICAgfQorICAgIG1fc3RhcnRWZWxvY2l0eSA9IG1fY3VycmVudFZlbG9jaXR5OworCisgICAgZG91
YmxlIHJlbWFpbmluZ0RlbHRhID0gbV9kZXNpcmVkUG9zaXRpb24gLSAqbV9jdXJyZW50UG9zaXRp
b247CisKKyAgICBkb3VibGUgYXR0YWNrQXJlYUxlZnQgPSAwOworCisgICAgZG91YmxlIGRlbHRh
VGltZSA9IG1fbGFzdEFuaW1hdGlvblRpbWUgLSBtX3N0YXJ0VGltZTsKKyAgICBkb3VibGUgdGlt
ZUxlZnQgPSBtX2FuaW1hdGlvblRpbWUgLSBkZWx0YVRpbWU7CisgICAgaWYgKHRpbWVMZWZ0IDwg
bV9yZWxlYXNlVGltZSkgeworICAgICAgICBtX2FuaW1hdGlvblRpbWUgPSBkZWx0YVRpbWUgKyBt
X3JlbGVhc2VUaW1lOworICAgICAgICB0aW1lTGVmdCA9IG1fcmVsZWFzZVRpbWU7CisgICAgfQor
ICAgIGRvdWJsZSByZWxlYXNlVGltZUxlZnQgPSBzdGQ6Om1pbih0aW1lTGVmdCwgbV9yZWxlYXNl
VGltZSk7CisgICAgZG91YmxlIGF0dGFja1RpbWVMZWZ0ID0gc3RkOjptYXgoMC4sIG1fYXR0YWNr
VGltZSAtIGRlbHRhVGltZSk7CisgICAgZG91YmxlIHN1c3RhaW5UaW1lTGVmdCA9IHN0ZDo6bWF4
KDAuLCB0aW1lTGVmdCAtIHJlbGVhc2VUaW1lTGVmdCAtIGF0dGFja1RpbWVMZWZ0KTsKKworICAg
IGlmIChhdHRhY2tUaW1lTGVmdCkgeworICAgICAgICBkb3VibGUgYXR0YWNrU3BvdCA9IGRlbHRh
VGltZSAvIG1fYXR0YWNrVGltZTsKKyAgICAgICAgYXR0YWNrQXJlYUxlZnQgPSBhdHRhY2tUaW1l
TGVmdCAvIChjdXJ2ZURlcml2YXRpdmVBdChtX2F0dGFja0N1cnZlLCAxKSAtIGN1cnZlRGVyaXZh
dGl2ZUF0KG1fYXR0YWNrQ3VydmUsIGF0dGFja1Nwb3QpKTsKKyAgICB9CisKKyAgICBkb3VibGUg
cmVsZWFzZVNwb3QgPSAobV9yZWxlYXNlVGltZSAtIHJlbGVhc2VUaW1lTGVmdCkgLyBtX3JlbGVh
c2VUaW1lOworICAgIGRvdWJsZSByZWxlYXNlQXJlYUxlZnQgID0gcmVsZWFzZVRpbWVMZWZ0IC8g
KGN1cnZlRGVyaXZhdGl2ZUF0KG1fcmVsZWFzZUN1cnZlLCAxKSAtIGN1cnZlRGVyaXZhdGl2ZUF0
KG1fcmVsZWFzZUN1cnZlLCByZWxlYXNlU3BvdCkpOworCisgICAgbV9kZXNpcmVkVmVsb2NpdHkg
PSByZW1haW5pbmdEZWx0YSAvIChhdHRhY2tBcmVhTGVmdCArIHN1c3RhaW5UaW1lTGVmdCArIHJl
bGVhc2VBcmVhTGVmdCk7CisgICAgbV9yZWxlYXNlUG9zaXRpb24gPSBtX2Rlc2lyZWRQb3NpdGlv
biAtIG1fZGVzaXJlZFZlbG9jaXR5ICogcmVsZWFzZUFyZWFMZWZ0OworICAgIGlmIChhdHRhY2tB
cmVhTGVmdCkKKyAgICAgICAgbV9hdHRhY2tQb3NpdGlvbiA9IG1fc3RhcnRQb3NpdGlvbiArIG1f
ZGVzaXJlZFZlbG9jaXR5ICogYXR0YWNrQXJlYUxlZnQ7CisgICAgZWxzZQorICAgICAgICBtX2F0
dGFja1Bvc2l0aW9uID0gKm1fY3VycmVudFBvc2l0aW9uOworCisgICAgaWYgKHN1c3RhaW5UaW1l
TGVmdCkgeworICAgICAgICBkb3VibGUgcm91bmRPZmYgPSBtX3JlbGVhc2VQb3NpdGlvbiAtICht
X2F0dGFja1Bvc2l0aW9uICsgbV9kZXNpcmVkVmVsb2NpdHkgKiBzdXN0YWluVGltZUxlZnQpOwor
ICAgICAgICBtX2Rlc2lyZWRWZWxvY2l0eSArPSByb3VuZE9mZiAvIHN1c3RhaW5UaW1lTGVmdDsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRklYTUU6IEFkZCBpbiBqYW5rIGRl
dGVjdGlvbiB0cmFjZSBldmVudHMgaW50byB0aGlzIGZ1bmN0aW9uLgorYm9vbCBTY3JvbGxBbmlt
YXRvck5vbmU6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJsZSBjdXJyZW50VGltZSkK
K3sKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZTsgZ3JhYmJpbmcgdGhlIGN1cnJlbnQgdGlt
ZSBvbmNlIGhlbHBzIGtlZXAgYSBjb25zaXN0ZW50IGhlYXJ0YmVhdC4KKyAgICBkb3VibGUgbGFz
dFNjcm9sbEludGVydmFsID0gY3VycmVudFRpbWUgLSBtX2xhc3RBbmltYXRpb25UaW1lOworICAg
IG1fbGFzdEFuaW1hdGlvblRpbWUgPSBjdXJyZW50VGltZTsKKworICAgIGRvdWJsZSBkZWx0YVRp
bWUgPSBjdXJyZW50VGltZSAtIG1fc3RhcnRUaW1lOworICAgIGRvdWJsZSBuZXdQb3NpdGlvbiA9
ICptX2N1cnJlbnRQb3NpdGlvbjsKKworICAgIGlmIChkZWx0YVRpbWUgPiBtX2FuaW1hdGlvblRp
bWUpIHsKKyAgICAgICAgKm1fY3VycmVudFBvc2l0aW9uID0gbV9kZXNpcmVkUG9zaXRpb247Cisg
ICAgICAgIHJlc2V0KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGRl
bHRhVGltZSA8IG1fYXR0YWNrVGltZSkKKyAgICAgICAgbmV3UG9zaXRpb24gPSBhdHRhY2tDdXJ2
ZShtX2F0dGFja0N1cnZlLCBkZWx0YVRpbWUsIG1fYXR0YWNrVGltZSwgbV9zdGFydFBvc2l0aW9u
LCBtX2F0dGFja1Bvc2l0aW9uKTsKKyAgICBlbHNlIGlmIChkZWx0YVRpbWUgPCAobV9hbmltYXRp
b25UaW1lIC0gbV9yZWxlYXNlVGltZSkpCisgICAgICAgIG5ld1Bvc2l0aW9uID0gbV9hdHRhY2tQ
b3NpdGlvbiArIChkZWx0YVRpbWUgLSBtX2F0dGFja1RpbWUpICogbV9kZXNpcmVkVmVsb2NpdHk7
CisgICAgZWxzZSB7CisgICAgICAgIC8vIHJlbGVhc2UgaXMgYmFzZWQgb24gdGFyZ2V0aW5nIHRo
ZSBleGFjdCBmaW5hbCBwb3NpdGlvbi4KKyAgICAgICAgZG91YmxlIHJlbGVhc2VEZWx0YVQgPSBk
ZWx0YVRpbWUgLSAobV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSk7CisgICAgICAgIG5l
d1Bvc2l0aW9uID0gcmVsZWFzZUN1cnZlKG1fcmVsZWFzZUN1cnZlLCByZWxlYXNlRGVsdGFULCBt
X3JlbGVhc2VUaW1lLCBtX3JlbGVhc2VQb3NpdGlvbiwgbV9kZXNpcmVkUG9zaXRpb24pOworICAg
IH0KKworICAgIC8vIE5vcm1hbGl6ZSB2ZWxvY2l0eSB0byBhIHBlciBzZWNvbmQgYW1vdW50LiBD
b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZvciBqYW5rLgorICAgIGlmIChsYXN0U2Nyb2xsSW50ZXJ2
YWwgPiAwKQorICAgICAgICBtX2N1cnJlbnRWZWxvY2l0eSA9IChuZXdQb3NpdGlvbiAtICptX2N1
cnJlbnRQb3NpdGlvbikgLyBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgKm1fY3VycmVudFBvc2l0
aW9uID0gbmV3UG9zaXRpb247CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU2Nyb2xsQW5pbWF0
b3JOb25lOjpTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
KQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCisgICAgLCBtX2hvcml6b250
YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYKQorICAgICwgbV92ZXJ0aWNhbERhdGEodGhpcywg
Jm1fY3VycmVudFBvc1kpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yTm9uZTo6flNjcm9sbEFuaW1h
dG9yTm9uZSgpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRh
bERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7
Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
QW5pbWF0b3JFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xs
KG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICAvLyBG
SVhNRTogZ2V0IHRoZSB0eXBlIHBhc3NlZCBpbi4gTW91c2VXaGVlbCBjb3VsZCBhbHNvIGJlIGJ5
IGxpbmUsIGJ1dCBzaG91bGQgc3RpbGwgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBhbmltYXRpb24g
cGFyYW1ldGVycyB0aGFuIHRoZSBrZXlib2FyZC4KKyAgICBQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6CisgICAgICAgIHBhcmFtZXRl
cnMgPSBQYXJhbWV0ZXJzKHRydWUsIDcgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgMyAqIGtUaWNr
VGltZSwgUXVhZHJhdGljLCAzICoga1RpY2tUaW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTY3JvbGxCeVBhZ2U6CisgICAgICAgIHBhcmFtZXRlcnMgPSBQYXJhbWV0ZXJzKHRydWUsIDE1
ICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDUgKiBrVGlja1RpbWUsIFF1YWRyYXRpYywgNSAqIGtU
aWNrVGltZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDoKKyAgICAg
ICAgaWYgKGZhYnMobXVsdGlwbGllcikgPiAyMCkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBQ
YXJhbWV0ZXJzKHRydWUsIDExICoga1RpY2tUaW1lLCBRdWFkcmF0aWMsIDMgKiBrVGlja1RpbWUs
IFF1YWRyYXRpYywgMyAqIGtUaWNrVGltZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIElmIHRoZSBpbmRpdmlkdWFsIGlucHV0
IHNldHRpbmcgaXMgZGlzYWJsZWQsIGJhaWwuCisgICAgaWYgKCFwYXJhbWV0ZXJzLm1faXNFbmFi
bGVkKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgLy8gVGhpcyBpcyBhbiBhbmlt
YXRhYmxlIHNjcm9sbC4gQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgUGVyQXhpc0Rh
dGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8gJm1fdmVydGlj
YWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisKKyAgICBmbG9hdCBzY3JvbGxhYmxlU2l6ZSA9
IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKG9yaWVudGF0
aW9uKSk7CisgICAgYm9vbCByZXN1bHQgPSBkYXRhLT51cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMo
b3JpZW50YXRpb24sIHN0ZXAsIG11bHRpcGxpZXIsIHNjcm9sbGFibGVTaXplLCBXVEY6OmN1cnJl
bnRUaW1lKCksICZwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIWRhdGEtPm1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKSkgeworICAgICAgICByZXN1bHQgJj0gZGF0YS0+YW5pbWF0ZVNjcm9sbChXVEY6
OmN1cnJlbnRUaW1lKCkpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgZGF0YS0+
bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoa0FuaW1hdGlvblRpbWVyRGVsYXkpOworICAg
IH0KKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5l
ZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQo
Jm1fdmVydGljYWxEYXRhKTsKKworICAgIG1faG9yaXpvbnRhbERhdGEucmVzZXQoKTsKKyAgICAq
bV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3NpdGlvbiA9IG9mZnNldC54KCk7CisgICAgbV9o
b3Jpem9udGFsRGF0YS5tX2Rlc2lyZWRQb3NpdGlvbiA9IG9mZnNldC54KCk7CisKKyAgICBtX3Zl
cnRpY2FsRGF0YS5yZXNldCgpOworICAgICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJlbnRQb3NpdGlv
biA9IG9mZnNldC55KCk7CisgICAgbV92ZXJ0aWNhbERhdGEubV9kZXNpcmVkUG9zaXRpb24gPSBv
ZmZzZXQueSgpOworCisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9y
Tm9uZT4qIHRpbWVyKQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IFdURjo6Y3VycmVudFRp
bWUoKTsKKyAgICBpZiAoKHRpbWVyID09ICZtX2hvcml6b250YWxEYXRhLm1fYW5pbWF0aW9uVGlt
ZXIpID8KKyAgICAgICAgbV9ob3Jpem9udGFsRGF0YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1l
KSA6CisgICAgICAgIG1fdmVydGljYWxEYXRhLmFuaW1hdGVTY3JvbGwoY3VycmVudFRpbWUpKQor
ICAgIHsKKyAgICAgICAgZG91YmxlIGRlbHRhID0gV1RGOjpjdXJyZW50VGltZSgpIC0gY3VycmVu
dFRpbWU7CisgICAgICAgIHRpbWVyLT5zdGFydE9uZVNob3Qoa0FuaW1hdGlvblRpbWVyRGVsYXkg
LSBkZWx0YSk7CisgICAgfQorICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yTm9uZTo6c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0Rh
dGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzY5
OTYxMmJiNGI0ZjMwNTEwYjkwMDZhYTVhMWE1MTc0MjRlYTE1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgKQEAgLTAsMCArMSwx
MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvck5vbmVfaAorI2RlZmluZSBTY3JvbGxBbmlt
YXRvck5vbmVfaAorCisjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK2NsYXNzIFNjcm9sbEFuaW1h
dG9yTm9uZVRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFNjcm9sbEFuaW1h
dG9yUGFyYW1ldGVyczsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25lIDogcHVibGljIFNjcm9s
bEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFy
ZWEqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIGVudW0gQ3VydmUg
eworICAgICAgICBMaW5lYXIsCisgICAgICAgIFF1YWRyYXRpYywKKyAgICAgICAgQ3ViaWMsCisg
ICAgICAgIEJvdW5jZQorICAgIH07CisKKyAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CisgICAgICAg
IFBhcmFtZXRlcnMoKTsKKyAgICAgICAgUGFyYW1ldGVycyhib29sLCBkb3VibGUsIEN1cnZlLCBk
b3VibGUsIEN1cnZlLCBkb3VibGUpOworCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgdGltZXMg
Y2FuIGJlIG92ZXJzcGVjaWZpZWQgc3VjaCB0aGF0IHJlbGVhc2VUaW1lIG9yIHJlbGVhc2VUaW1l
IGFuZCBhdHRhY2tUaW1lIGFyZSBncmVhdGVyCisgICAgICAgIC8vIHRoYW4gYW5pbWF0aW9uVGlt
ZS4gYW5pbWF0aW9uVGltZSB0YWtlcyBwcmlvcml0eSBvdmVyIHJlbGVhc2VUaW1lLCBjYXBwaW5n
IGl0LiBhdHRhY2tUaW1lIGlzIGNhcHBlZCBhdAorICAgICAgICAvLyB3aGF0ZXZlciB0aW1lIHJl
bWFpbnMsIG9yIHplcm8gaWYgbm9uZS4KKyAgICAgICAgYm9vbCBtX2lzRW5hYmxlZDsKKyAgICAg
ICAgZG91YmxlIG1fYW5pbWF0aW9uVGltZTsKKworICAgICAgICBDdXJ2ZSBtX2F0dGFja0N1cnZl
OworICAgICAgICBkb3VibGUgbV9hdHRhY2tUaW1lOworCisgICAgICAgIEN1cnZlIG1fcmVsZWFz
ZUN1cnZlOworICAgICAgICBkb3VibGUgbV9yZWxlYXNlVGltZTsKKyAgICB9OworCitwcm90ZWN0
ZWQ6CisgICAgZnJpZW5kIGNsYXNzIDo6U2Nyb2xsQW5pbWF0b3JOb25lVGVzdDsKKworICAgIHN0
cnVjdCBQZXJBeGlzRGF0YSB7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yTm9u
ZSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcyk7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAg
ICAgICAgYm9vbCB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoU2Nyb2xsYmFyT3JpZW50YXRpb24s
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIGZsb2F0IHNjcm9sbGFibGVTaXplLCBkb3Vi
bGUgY3VycmVudFRpbWUsIFBhcmFtZXRlcnMqKTsKKyAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xs
KGRvdWJsZSBjdXJyZW50VGltZSk7CisKKyAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJ2ZUF0KEN1
cnZlLCBkb3VibGUgdCk7CisgICAgICAgIHN0YXRpYyBkb3VibGUgY3VydmVEZXJpdmF0aXZlQXQo
Q3VydmUsIGRvdWJsZSB0KTsKKworICAgICAgICBzdGF0aWMgZG91YmxlIGF0dGFja0N1cnZlKEN1
cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUgY3VydmVULCBkb3VibGUgc3RhcnRQb3MsIGRvdWJs
ZSBhdHRhY2tQb3MpOworICAgICAgICBzdGF0aWMgZG91YmxlIHJlbGVhc2VDdXJ2ZShDdXJ2ZSwg
ZG91YmxlIGRlbHRhVCwgZG91YmxlIGN1cnZlVCwgZG91YmxlIHJlbGVhc2VQb3MsIGRvdWJsZSBk
ZXNpcmVkUG9zKTsKKworICAgICAgICBmbG9hdCogbV9jdXJyZW50UG9zaXRpb247CisgICAgICAg
IGRvdWJsZSBtX2N1cnJlbnRWZWxvY2l0eTsKKworICAgICAgICBkb3VibGUgbV9kZXNpcmVkUG9z
aXRpb247CisgICAgICAgIGRvdWJsZSBtX2Rlc2lyZWRWZWxvY2l0eTsKKworICAgICAgICBkb3Vi
bGUgbV9zdGFydFBvc2l0aW9uOworICAgICAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgICAg
IGRvdWJsZSBtX3N0YXJ0VmVsb2NpdHk7CisKKyAgICAgICAgZG91YmxlIG1fYW5pbWF0aW9uVGlt
ZTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblRpbWU7CisKKyAgICAgICAgZG91Ymxl
IG1fYXR0YWNrUG9zaXRpb247CisgICAgICAgIGRvdWJsZSBtX2F0dGFja1RpbWU7CisgICAgICAg
IEN1cnZlIG1fYXR0YWNrQ3VydmU7CisKKyAgICAgICAgZG91YmxlIG1fcmVsZWFzZVBvc2l0aW9u
OworICAgICAgICBkb3VibGUgbV9yZWxlYXNlVGltZTsKKyAgICAgICAgQ3VydmUgbV9yZWxlYXNl
Q3VydmU7CisKKyAgICAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKKyAg
ICAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25lPiBtX2FuaW1hdGlvblRpbWVyOworICAgIH07
CisKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JOb25l
PiopOworICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsK
KworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92
ZXJ0aWNhbERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yTm9uZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCAzNjEzMWZkMGJi
NzY5YWFjYzdiNTk1ZWIxMGRmMjc5MzU2ODM4OTk3Li45ZjdlMTA1YjhlYjQzNWIwYWI1ZTY2Mzlj
NzVhZjlkYjRkZjUwMjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29u
bmVjdEZyb21QYWdlKCkgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsQW5pbWF0b3JFbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogcHJpdmF0ZToKICAgICAvLyBOT1RFOiBP
bmx5IGNhbGxlZCBmcm9tIHRoZSBTY3JvbGxBbmltYXRvci4KICAgICBmcmllbmQgY2xhc3MgU2Ny
b2xsQW5pbWF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY5OWE3NmUwOGU4Njhi
M2I3OTcwN2JmMDJiZjY2OTBlZjJmNTc2OWQuLjA4MDkwODYwMmRkOWNjNDg3NDA5ZTBhNzI3MTM1
ZTVkMjA4MWVlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDYtMjAgIFNjb3R0IEJ5ZXIgIDxzY290dGJ5ZXJAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNtb290aCBzY3JvbGxp
bmcgZm9yIENocm9taXVtLCBpbml0aWFsIHBhdGNoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4NzgKKworICAgICAgICBBZGQgaW4gYSBkZWZhdWx0
IHNjcm9sbGluZyBhbmltYXRvciBpbiB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5LCB3aXRoIGEgcnVu
IHRpbWUgZW5hYmxlIHN3aXRjaCwgdG8gcHJvdmlkZQorICAgICAgICBhbmltYXRlZCAvIHNtb290
aCBzY3JvbGxpbmcgb24gcGxhdGZvcm1zIGFuZCBmb3IgaW5wdXQgZGV2aWNlcyB3aGVyZSBpdCdz
IG5vdCBwcm92aWRlZCBieSB0aGUgcGxhdGZvcm0sIGFuZCB0bworICAgICAgICBiZSBlYXNpbHkg
Y29uZmlndXJhYmxlIHRvIHdoYXQgc2l0dWF0dWF0aW9ucyB0aGUgYW5pbWF0aW9ucyBhcmUgcHJv
dmlkZWQgZm9yLiBUaGUgc21vb3RoIHNjcm9sbGluZyBjb2RlIGlzCisgICAgICAgIGNvbXBpbGVk
IG91dCBieSBkZWZhdWx0LgorCisgICAgICAgIFVuaXQgdGVzdHMgU2Nyb2xsQW5pbWF0b3JOb25l
VGVzdC5jcHAKKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIGZlYXR1cmVzLmd5
cGk6CisgICAgICAgICogcHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogc3JjL1dlYlNl
dHRpbmdzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RW5h
YmxlU2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAg
ICAgICAgKiB0ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChNb2NrU2Nyb2xsYWJsZUFyZWE6Ok1vY2tTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChNb2Nr
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEFuaW1hdG9yRW5hYmxlZCk6CisgICAgICAgIChNb2NrU2Ny
b2xsQW5pbWF0b3JOb25lOjpNb2NrU2Nyb2xsQW5pbWF0b3JOb25lKToKKyAgICAgICAgKE1vY2tT
Y3JvbGxBbmltYXRvck5vbmU6OmN1cnJlbnRYKToKKyAgICAgICAgKE1vY2tTY3JvbGxBbmltYXRv
ck5vbmU6OmN1cnJlbnRZKToKKyAgICAgICAgKE1vY2tTY3JvbGxBbmltYXRvck5vbmU6OnJlc2V0
KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdDo6U2Ny
b2xsQW5pbWF0b3JOb25lVGVzdCk6CisgICAgICAgIChTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpT
ZXRVcCk6CisgICAgICAgIChTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpUZWFyRG93bik6CisgICAg
ICAgIChTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpyZXNldCk6CisgICAgICAgIChTY3JvbGxBbmlt
YXRvck5vbmVUZXN0Ojp1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMpOgorICAgICAgICAoU2Nyb2xs
QW5pbWF0b3JOb25lVGVzdDo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgIChTY3JvbGxBbmltYXRv
ck5vbmVUZXN0OjpjdXJ2ZUludGVncmFsQXQpOgorICAgICAgICAoU2Nyb2xsQW5pbWF0b3JOb25l
VGVzdDo6YXR0YWNrQXJlYSk6CisgICAgICAgIChTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpyZWxl
YXNlQXJlYSk6CisgICAgICAgIChTY3JvbGxBbmltYXRvck5vbmVUZXN0OjphdHRhY2tDdXJ2ZSk6
CisgICAgICAgIChTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpyZWxlYXNlQ3VydmUpOgorICAgICAg
ICAoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdDo6Y3VydmVEZXJpdmF0aXZlQXQpOgorICAgICAgICAo
U2Nyb2xsQW5pbWF0b3JOb25lVGVzdDo6Y3VydmVUZXN0SW5uZXIpOgorICAgICAgICAoU2Nyb2xs
QW5pbWF0b3JOb25lVGVzdDo6Y3VydmVUZXN0KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTEt
MDYtMTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUm9sbGVk
IERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA4NDAyZTU0MTg1ZDk0ODUz
YTc2OWI1MDUxODk3Y2RkMjc1NDRlNWQ3Li5mMmEwZGM3MjNiYzAyMmE3NjdhM2YwNTMwYzA3YmU4
MzEwMzZiZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTY1LDYgKzY1LDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9QT0RBcmVuYVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EUmVk
QmxhY2tUcmVlVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9u
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkKaW5kZXggYmI4MTY4ZDFiNmI0YzQzM2IyNDA0NmJlODZlNjhlZGM0OGZkNjkzMS4uYWFhYTcz
MGYxOTRmNmJiODIxM2UyNTMzYzM4YjgwYmM1MWM3MzcxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
ZmVhdHVyZXMuZ3lwaQpAQCAtMTA3LDExICsxMDcsMTMgQEAKICAgICAgICdlbmFibGVfdG91Y2hf
ZXZlbnRzJSc6IDEsCiAgICAgICAndXNlX3NraWFfZ3B1JSc6IDAsCiAgICAgICAnZW5hYmxlX3Rv
dWNoX2ljb25fbG9hZGluZyUnIDogMCwKKyAgICAgICdlbmFibGVfc21vb3RoX3Njcm9sbGluZyUn
OiAwLAogICAgIH0sCiAgICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUnOiAnPCh1c2Vf
YWNjZWxlcmF0ZWRfY29tcG9zaXRpbmcpJywKICAgICAndXNlX3RocmVhZGVkX2NvbXBvc2l0aW5n
JSc6ICc8KHVzZV90aHJlYWRlZF9jb21wb3NpdGluZyknLAogICAgICdlbmFibGVfc3ZnJSc6ICc8
KGVuYWJsZV9zdmcpJywKICAgICAnZW5hYmxlX3RvdWNoX2V2ZW50cyUnOiAnPChlbmFibGVfdG91
Y2hfZXZlbnRzKScsCisgICAgJ2VuYWJsZV9zbW9vdGhfc2Nyb2xsaW5nJSc6ICc8KGVuYWJsZV9z
bW9vdGhfc2Nyb2xsaW5nKScsCiAgICAgJ2NvbmRpdGlvbnMnOiBbCiAgICAgICBbJ3VzZV9hY2Nl
bGVyYXRlZF9jb21wb3NpdGluZz09MScsIHsKICAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsK
QEAgLTE1MSw2ICsxNTMsMTEgQEAKICAgICAgICAgICAnRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09M
X0hBTkRMRVI9MScsCiAgICAgICAgIF0sCiAgICAgICB9XSwKKyAgICAgIFsnZW5hYmxlX3Ntb290
aF9zY3JvbGxpbmc9PTEnLCB7CisgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCisgICAgICAg
ICAgJ0VOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEnLAorICAgICAgICBdLAorICAgICAgfV0sCiAg
ICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oCmluZGV4IDFmY2FiYmVkMjRjNGQxMGI1MGZjMGVmNWNjZTU4OTRiNTBkZTkwMjcuLjQxMzAw
ZGUzZTYxZmE4MWIwMjkwZGRlYTRkOTkyNjc3NjZhYmVmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApAQCAtMTI0LDYgKzEyNCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQoYm9vbCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChi
b29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFByaW50QmFja2dyb3VuZHMoYm9v
bCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29sKSA9
IDA7CiAKIHByb3RlY3RlZDoKICAgICB+V2ViU2V0dGluZ3MoKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDc5OWJmZGY2MGFlNjIy
YWYzMDI5NGNhZjA1MTQ4ZmFkZmZhNDdjOGEuLmQ4ODk2Y2UwYTFhOWZhMzc3MDk4MWNhNTEyMGYz
OGMwYmQ2NTJjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
dHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmNwcApAQCAtNDIyLDQgKzQyMiwxMyBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyhib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5ncy0+c2V0
U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyhlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0lt
cGw6OnNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKGJvb2wgZW5hYmxlZCkKK3sKKyNpZiBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKKyAgICBtX3NldHRpbmdzLT5zZXRFbmFibGVTY3JvbGxBbmltYXRv
cihlbmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAppbmRleCBhNTE1ZDViNTNlYzliNjkzNzg3NDlkZDJiNmJlYmJiM2Fm
MDVjZDdhLi45M2RiNTdmMDkzZjNmN2U1ZjIwZDFhMTk3YTAwZWIyZDQyZmI3MjNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtMTE3LDYgKzEx
Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3Vy
ZUNvbnRlbnQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1
cmVDb250ZW50KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQcmludEJhY2tncm91
bmRzKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmltYXRvcihib29s
KTsKIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRl
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQzYjU1MjlhZTM1ZDZkZjdhYTRhOTM2Nzg3ZGFlOTljN2Q5YjIw
ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Njcm9s
bEFuaW1hdG9yTm9uZVRlc3QuY3BwCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGVzdHMg
Zm9yIHRoZSBTY3JvbGxBbmltYXRvck5vbmUgY2xhc3MuCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
b3JOb25lLmgiCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiVHJlZVRlc3RIZWxwZXJzLmgiCisj
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordXNpbmcgdGVzdGluZzo6QXRMZWFzdDsKK3VzaW5nIHRl
c3Rpbmc6OlJldHVybjsKK3VzaW5nIHRlc3Rpbmc6Ol87CisKK2NsYXNzIE1vY2tTY3JvbGxhYmxl
QXJlYSA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6CisgICAgTW9ja1Njcm9sbGFi
bGVBcmVhKGJvb2wgc2Nyb2xsQW5pbWF0b3JFbmFibGVkKQorICAgICAgICA6IG1fc2Nyb2xsQW5p
bWF0b3JFbmFibGVkKHNjcm9sbEFuaW1hdG9yRW5hYmxlZCkgeyB9CisKKyAgICBNT0NLX0NPTlNU
X01FVEhPRDAoaXNBY3RpdmUsIGJvb2woKSk7CisgICAgTU9DS19DT05TVF9NRVRIT0QxKHNjcm9s
bFNpemUsIGludChTY3JvbGxiYXJPcmllbnRhdGlvbikpOworICAgIE1PQ0tfQ09OU1RfTUVUSE9E
MShzY3JvbGxQb3NpdGlvbiwgaW50KFNjcm9sbGJhciopKTsKKyAgICBNT0NLX01FVEhPRDIoaW52
YWxpZGF0ZVNjcm9sbGJhciwgdm9pZChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikpOworICAg
IE1PQ0tfQ09OU1RfTUVUSE9EMChpc1Njcm9sbENvcm5lclZpc2libGUsIGJvb2woKSk7CisgICAg
TU9DS19DT05TVF9NRVRIT0QwKHNjcm9sbENvcm5lclJlY3QsIEludFJlY3QoKSk7CisgICAgTU9D
S19NRVRIT0QxKHNldFNjcm9sbE9mZnNldCwgdm9pZChjb25zdCBJbnRQb2ludCYpKTsKKyAgICBN
T0NLX01FVEhPRDIoaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QsIHZvaWQoU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYpKTsKKyAgICBNT0NLX01FVEhPRDEoaW52YWxpZGF0ZVNjcm9sbENvcm5lclJl
Y3QsIHZvaWQoY29uc3QgSW50UmVjdCYpKTsKKyAgICBNT0NLX01FVEhPRDEoc2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbiwgdm9pZChjb25zdCBJbnRQb2ludCYpKTsKKworICAgIGJvb2wgc2Ny
b2xsQW5pbWF0b3JFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxBbmltYXRvckVuYWJs
ZWQ7IH0KKyAgICBib29sIG1fc2Nyb2xsQW5pbWF0b3JFbmFibGVkOworfTsKKworY2xhc3MgTW9j
a1Njcm9sbEFuaW1hdG9yTm9uZSA6IHB1YmxpYyBTY3JvbGxBbmltYXRvck5vbmUgeworcHVibGlj
OgorICAgIE1vY2tTY3JvbGxBbmltYXRvck5vbmUoKQorICAgICAgICA6IFNjcm9sbEFuaW1hdG9y
Tm9uZShuZXcgTW9ja1Njcm9sbGFibGVBcmVhKHRydWUpKSB7IH0KKyAgICBNb2NrU2Nyb2xsQW5p
bWF0b3JOb25lKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgOiBTY3Jv
bGxBbmltYXRvck5vbmUoc2Nyb2xsYWJsZUFyZWEpIHsgfQorCisgICAgZmxvYXQgY3VycmVudFgo
KSB7IHJldHVybiBtX2N1cnJlbnRQb3NYOyB9CisgICAgZmxvYXQgY3VycmVudFkoKSB7IHJldHVy
biBtX2N1cnJlbnRQb3NZOyB9CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIHN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsKKyAgICAgICAgc3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKKyAgICAgICAgbV9jdXJy
ZW50UG9zWCA9IDA7CisgICAgICAgIG1fY3VycmVudFBvc1kgPSAwOworICAgICAgICBtX2hvcml6
b250YWxEYXRhLnJlc2V0KCk7CisgICAgICAgIG1fdmVydGljYWxEYXRhLnJlc2V0KCk7CisgICAg
fQorCisgICAgTU9DS19NRVRIT0QxKHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbiwgdm9p
ZChjb25zdCBGbG9hdFBvaW50JikpOworfTsKKworVEVTVChTY3JvbGxBbmltYXRvckVuYWJsZWQs
IEVuYWJsZWQpCit7CisgICAgTW9ja1Njcm9sbGFibGVBcmVhIHNjcm9sbGFibGVBcmVhKHRydWUp
OworICAgIE1vY2tTY3JvbGxBbmltYXRvck5vbmUgc2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSgmc2Ny
b2xsYWJsZUFyZWEpOworCisgICAgRVhQRUNUX0NBTEwoc2Nyb2xsYWJsZUFyZWEsIHNjcm9sbFNp
emUoXykpLlRpbWVzKEF0TGVhc3QoMSkpLldpbGxSZXBlYXRlZGx5KFJldHVybigxMDAwKSk7Cisg
ICAgRVhQRUNUX0NBTEwoc2Nyb2xsYWJsZUFyZWEsIHNldFNjcm9sbE9mZnNldChfKSkuVGltZXMo
QXRMZWFzdCgxKSk7CisKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnNjcm9sbChIb3Jpem9u
dGFsU2Nyb2xsYmFyLCBTY3JvbGxCeUxpbmUsIDEwMCwgMSk7CisgICAgRVhQRUNUX05FKDEwMCwg
c2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfTkUoMCwgc2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bS5jdXJyZW50WSgpKTsKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVt
LnJlc2V0KCk7CisKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnNjcm9sbChIb3Jpem9udGFs
U2Nyb2xsYmFyLCBTY3JvbGxCeVBhZ2UsIDEwMCwgMSk7CisgICAgRVhQRUNUX05FKDEwMCwgc2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfTkUoMCwgc2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bS5jdXJyZW50WSgpKTsKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnJl
c2V0KCk7CisKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnNjcm9sbChIb3Jpem9udGFsU2Ny
b2xsYmFyLCBTY3JvbGxCeVBpeGVsLCA0LCAyNSk7CisgICAgRVhQRUNUX05FKDEwMCwgc2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfTkUoMCwgc2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bS5jdXJyZW50WSgpKTsKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnJlc2V0
KCk7Cit9CisKK1RFU1QoU2Nyb2xsQW5pbWF0b3JFbmFibGVkLCBEaXNhYmxlZCkKK3sKKyAgICBN
b2NrU2Nyb2xsYWJsZUFyZWEgc2Nyb2xsYWJsZUFyZWEoZmFsc2UpOworICAgIE1vY2tTY3JvbGxB
bmltYXRvck5vbmUgc2Nyb2xsQW5pbWF0b3JDaHJvbWl1bSgmc2Nyb2xsYWJsZUFyZWEpOworCisg
ICAgRVhQRUNUX0NBTEwoc2Nyb2xsYWJsZUFyZWEsIHNjcm9sbFNpemUoXykpLlRpbWVzKEF0TGVh
c3QoMSkpLldpbGxSZXBlYXRlZGx5KFJldHVybigxMDAwKSk7CisgICAgRVhQRUNUX0NBTEwoc2Ny
b2xsYWJsZUFyZWEsIHNldFNjcm9sbE9mZnNldChfKSkuVGltZXMoQXRMZWFzdCgxKSk7CisKKyAg
ICBzY3JvbGxBbmltYXRvckNocm9taXVtLnNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3Jv
bGxCeUxpbmUsIDEwMCwgMSk7CisgICAgRVhQRUNUX0VRKDEwMCwgc2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bS5jdXJyZW50WSgpKTsKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnJlc2V0KCk7CisKKyAg
ICBzY3JvbGxBbmltYXRvckNocm9taXVtLnNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3Jv
bGxCeVBhZ2UsIDEwMCwgMSk7CisgICAgRVhQRUNUX0VRKDEwMCwgc2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bS5jdXJyZW50WCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgc2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bS5jdXJyZW50WSgpKTsKKyAgICBzY3JvbGxBbmltYXRvckNocm9taXVtLnJlc2V0KCk7CisKKyAg
ICBzY3JvbGxBbmltYXRvckNocm9taXVtLnNjcm9sbChIb3Jpem9udGFsU2Nyb2xsYmFyLCBTY3Jv
bGxCeURvY3VtZW50LCAxMDAsIDEpOworICAgIEVYUEVDVF9FUSgxMDAsIHNjcm9sbEFuaW1hdG9y
Q2hyb21pdW0uY3VycmVudFgoKSk7CisgICAgRVhQRUNUX0VRKDAsIHNjcm9sbEFuaW1hdG9yQ2hy
b21pdW0uY3VycmVudFkoKSk7CisgICAgc2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5yZXNldCgpOwor
CisgICAgc2Nyb2xsQW5pbWF0b3JDaHJvbWl1bS5zY3JvbGwoSG9yaXpvbnRhbFNjcm9sbGJhciwg
U2Nyb2xsQnlQaXhlbCwgMTAwLCAxKTsKKyAgICBFWFBFQ1RfRVEoMTAwLCBzY3JvbGxBbmltYXRv
ckNocm9taXVtLmN1cnJlbnRYKCkpOworICAgIEVYUEVDVF9FUSgwLCBzY3JvbGxBbmltYXRvckNo
cm9taXVtLmN1cnJlbnRZKCkpOworICAgIHNjcm9sbEFuaW1hdG9yQ2hyb21pdW0ucmVzZXQoKTsK
K30KKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25lVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvck5vbmVUZXN0KCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFBvc2l0
aW9uID0gMTAwOworICAgICAgICBtX2RhdGEgPSBuZXcgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJB
eGlzRGF0YSgmbV9tb2NrU2Nyb2xsQW5pbWF0b3JOb25lLCAmbV9jdXJyZW50UG9zaXRpb24pOwor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IG1fZGF0YTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCB1cGRhdGVEYXRh
RnJvbVBhcmFtZXRlcnMoU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0IHN0ZXAsIGZsb2F0IG11
bHRpcGxpZXIsIGZsb2F0IHNjcm9sbGFibGVTaXplLCBkb3VibGUgY3VycmVudFRpbWUsIFNjcm9s
bEFuaW1hdG9yTm9uZTo6UGFyYW1ldGVycyopOworICAgIGJvb2wgYW5pbWF0ZVNjcm9sbChkb3Vi
bGUgY3VycmVudFRpbWUpOworCisgICAgZG91YmxlIGN1cnZlSW50ZWdyYWxBdChTY3JvbGxBbmlt
YXRvck5vbmU6OkN1cnZlLCBkb3VibGUgdCk7CisgICAgZG91YmxlIGF0dGFja0FyZWEoU2Nyb2xs
QW5pbWF0b3JOb25lOjpDdXJ2ZSwgZG91YmxlIHN0YXJ0VCwgZG91YmxlIGVuZFQpOworICAgIGRv
dWJsZSByZWxlYXNlQXJlYShTY3JvbGxBbmltYXRvck5vbmU6OkN1cnZlLCBkb3VibGUgc3RhcnRU
LCBkb3VibGUgZW5kVCk7CisgICAgZG91YmxlIGF0dGFja0N1cnZlKFNjcm9sbEFuaW1hdG9yTm9u
ZTo6Q3VydmUsIGRvdWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsIGRvdWJsZSBzdGFydFBvc2l0
aW9uLCBkb3VibGUgYXR0YWNrUG9zaXRpb24pOworICAgIGRvdWJsZSByZWxlYXNlQ3VydmUoU2Ny
b2xsQW5pbWF0b3JOb25lOjpDdXJ2ZSwgZG91YmxlIGRlbHRhVCwgZG91YmxlIGN1cnZlVCwgZG91
YmxlIHJlbGVhc2VQb3NpdGlvbiwgZG91YmxlIGRlc2lyZWRQb3NpdGlvbik7CisgICAgZG91Ymxl
IGN1cnZlRGVyaXZhdGl2ZUF0KFNjcm9sbEFuaW1hdG9yTm9uZTo6Q3VydmUsIGRvdWJsZSB1bml0
VGltZSk7CisKKyAgICB2b2lkIGN1cnZlVGVzdElubmVyKFNjcm9sbEFuaW1hdG9yTm9uZTo6Q3Vy
dmUsIGRvdWJsZSBzdGVwLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBjdXJ2ZVRlc3QoU2Nyb2xs
QW5pbWF0b3JOb25lOjpDdXJ2ZSk7CisKKyAgICBzdGF0aWMgZG91YmxlIGtUaWNrVGltZTsKKyAg
ICBzdGF0aWMgZG91YmxlIGtBbmltYXRpb25UaW1lOworICAgIHN0YXRpYyBkb3VibGUga1N0YXJ0
VGltZTsKKyAgICBzdGF0aWMgZG91YmxlIGtFbmRUaW1lOworICAgIGZsb2F0IG1fY3VycmVudFBv
c2l0aW9uOworICAgIE1vY2tTY3JvbGxBbmltYXRvck5vbmUgbV9tb2NrU2Nyb2xsQW5pbWF0b3JO
b25lOworICAgIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGEqIG1fZGF0YTsKK307CisK
K2RvdWJsZSBTY3JvbGxBbmltYXRvck5vbmVUZXN0OjprVGlja1RpbWUgPSAxIC8gNjAuMDsKK2Rv
dWJsZSBTY3JvbGxBbmltYXRvck5vbmVUZXN0OjprQW5pbWF0aW9uVGltZSA9IDAuMDE7Citkb3Vi
bGUgU2Nyb2xsQW5pbWF0b3JOb25lVGVzdDo6a1N0YXJ0VGltZSA9IDEwLjA7Citkb3VibGUgU2Ny
b2xsQW5pbWF0b3JOb25lVGVzdDo6a0VuZFRpbWUgPSAyMC4wOworCit2b2lkIFNjcm9sbEFuaW1h
dG9yTm9uZVRlc3Q6OnJlc2V0KCkKK3sKKyAgICBtX2RhdGEtPnJlc2V0KCk7Cit9CisKK2Jvb2wg
U2Nyb2xsQW5pbWF0b3JOb25lVGVzdDo6dXBkYXRlRGF0YUZyb21QYXJhbWV0ZXJzKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyLCBm
bG9hdCBzY3JvbGxhYmxlU2l6ZSwgZG91YmxlIGN1cnJlbnRUaW1lLCBTY3JvbGxBbmltYXRvck5v
bmU6OlBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit7CisgICAgZG91YmxlIG9sZFZlbG9jaXR5ID0g
bV9kYXRhLT5tX2N1cnJlbnRWZWxvY2l0eTsKKyAgICBkb3VibGUgb2xkRGVzaXJlZFZlbG9jaXR5
ID0gbV9kYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICBib29sIHJlc3VsdCA9IG1fZGF0YS0+
dXBkYXRlRGF0YUZyb21QYXJhbWV0ZXJzKG9yaWVudGF0aW9uLCBzdGVwLCBtdWx0aXBsaWVyLCBz
Y3JvbGxhYmxlU2l6ZSwgY3VycmVudFRpbWUsIHBhcmFtZXRlcnMpOworICAgIEVYUEVDVF9MRShv
bGRWZWxvY2l0eSwgbV9kYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSk7CisKKyAgICBkb3VibGUgZGVs
dGFUaW1lID0gbV9kYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lIC0gbV9kYXRhLT5tX3N0YXJ0VGlt
ZTsKKyAgICBkb3VibGUgdGltZUxlZnQgPSBtX2RhdGEtPm1fYW5pbWF0aW9uVGltZSAtIGRlbHRh
VGltZTsKKyAgICBkb3VibGUgcmVsZWFzZVRpbWVMZWZ0ID0gc3RkOjptaW4odGltZUxlZnQsIG1f
ZGF0YS0+bV9yZWxlYXNlVGltZSk7CisgICAgZG91YmxlIGF0dGFja1RpbWVMZWZ0ID0gc3RkOjpt
YXgoMC4sIG1fZGF0YS0+bV9hdHRhY2tUaW1lIC0gZGVsdGFUaW1lKTsKKyAgICBkb3VibGUgc3Vz
dGFpblRpbWVMZWZ0ID0gc3RkOjptYXgoMC4sIHRpbWVMZWZ0IC0gcmVsZWFzZVRpbWVMZWZ0IC0g
YXR0YWNrVGltZUxlZnQpOworCisgICAgRVhQRUNUX0xFKG9sZERlc2lyZWRWZWxvY2l0eSAqIDAu
OTksIG1fZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpOworCisgICAgZG91YmxlIGV4cGVjdGVkUmVs
ZWFzZVBvc2l0aW9uID0gbV9kYXRhLT5tX2F0dGFja1Bvc2l0aW9uICsgc3VzdGFpblRpbWVMZWZ0
ICogbV9kYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKGV4cGVj
dGVkUmVsZWFzZVBvc2l0aW9uLCBtX2RhdGEtPm1fcmVsZWFzZVBvc2l0aW9uKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JOb25lVGVzdDo6YW5pbWF0ZVNj
cm9sbChkb3VibGUgY3VycmVudFRpbWUpCit7CisgICAgZG91YmxlIG9sZFBvc2l0aW9uID0gKm1f
ZGF0YS0+bV9jdXJyZW50UG9zaXRpb247CisgICAgYm9vbCB0ZXN0RXN0aW1hdGVkTWF4VmVsb2Np
dHkgPSBtX2RhdGEtPm1fc3RhcnRUaW1lICsgbV9kYXRhLT5tX2FuaW1hdGlvblRpbWUgLSBtX2Rh
dGEtPm1fbGFzdEFuaW1hdGlvblRpbWUgPiBtX2RhdGEtPm1fcmVsZWFzZVRpbWU7CisKKyAgICBi
b29sIHJlc3VsdCA9IG1fZGF0YS0+YW5pbWF0ZVNjcm9sbChjdXJyZW50VGltZSk7CisKKyAgICBk
b3VibGUgZGVsdGFUaW1lID0gbV9kYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lIC0gbV9kYXRhLT5t
X3N0YXJ0VGltZTsKKyAgICBkb3VibGUgdGltZUxlZnQgPSBtX2RhdGEtPm1fYW5pbWF0aW9uVGlt
ZSAtIGRlbHRhVGltZTsKKyAgICBkb3VibGUgcmVsZWFzZVRpbWVMZWZ0ID0gc3RkOjptaW4odGlt
ZUxlZnQsIG1fZGF0YS0+bV9yZWxlYXNlVGltZSk7CisgICAgZG91YmxlIGF0dGFja1RpbWVMZWZ0
ID0gc3RkOjptYXgoMC4sIG1fZGF0YS0+bV9hdHRhY2tUaW1lIC0gZGVsdGFUaW1lKTsKKyAgICBk
b3VibGUgc3VzdGFpblRpbWVMZWZ0ID0gc3RkOjptYXgoMC4sIHRpbWVMZWZ0IC0gcmVsZWFzZVRp
bWVMZWZ0IC0gYXR0YWNrVGltZUxlZnQpOworICAgIGRvdWJsZSBkaXN0YW5jZUxlZnQgPSBtX2Rh
dGEtPm1fZGVzaXJlZFBvc2l0aW9uIC0gKm1fZGF0YS0+bV9jdXJyZW50UG9zaXRpb247CisKKyAg
ICBFWFBFQ1RfTEUoMCwgbV9kYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSk7CisgICAgRVhQRUNUX0xF
KG9sZFBvc2l0aW9uLCAqbV9kYXRhLT5tX2N1cnJlbnRQb3NpdGlvbik7CisgICAgRVhQRUNUX0dF
KG1fZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgKiAyLCBtX2RhdGEtPm1fY3VycmVudFZlbG9jaXR5
KTsKKyAgICBpZiAodGVzdEVzdGltYXRlZE1heFZlbG9jaXR5KQorICAgICAgICBFWFBFQ1RfR0Uo
KGRpc3RhbmNlTGVmdCAvIHN1c3RhaW5UaW1lTGVmdCkgKiAxLjIsIG1fZGF0YS0+bV9jdXJyZW50
VmVsb2NpdHkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIFNjcm9sbEFuaW1h
dG9yTm9uZVRlc3Q6OmN1cnZlSW50ZWdyYWxBdChTY3JvbGxBbmltYXRvck5vbmU6OkN1cnZlIGN1
cnZlLCBkb3VibGUgdCkKK3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxB
bmltYXRvck5vbmU6OkxpbmVhcjoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAvIDM7CisgICAg
Y2FzZSBTY3JvbGxBbmltYXRvck5vbmU6OlF1YWRyYXRpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0
ICogdCAqIHQgLyA0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0b3JOb25lOjpDdWJpYzoKKyAgICAg
ICAgcmV0dXJuIHQgKiB0ICogdCAqIHQgKiB0IC8gNTsKKyAgICBjYXNlIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6Qm91bmNlOgorICAgICAgICBkb3VibGUgYXJlYTsKKyAgICAgICAgZG91YmxlIHQxID0g
c3RkOjptaW4odCwgMSAvIDIuNzUpOworICAgICAgICBhcmVhID0gMi41MjA4MyAqIHQxICogdDEg
KiB0MTsKKyAgICAgICAgaWYgKHQgPCAxIC8gMi43NSkKKyAgICAgICAgICAgIHJldHVybiBhcmVh
OworICAgICAgICB0MSA9IHN0ZDo6bWluKHQgLSAxIC8gMi43NSwgMSAvIDIuNzUpOworICAgICAg
ICBkb3VibGUgYm91bmNlQXJlYSA9IHQxICogKHQxICogKDIuNTIwODMgKiB0MSAtIDEuMzc1KSAr
IDEpOworICAgICAgICBhcmVhICs9IGJvdW5jZUFyZWE7CisgICAgICAgIGlmICh0IDwgMiAvIDIu
NzUpCisgICAgICAgICAgICByZXR1cm4gYXJlYTsKKyAgICAgICAgdDEgPSBzdGQ6Om1pbih0IC0g
MiAvIDIuNzUsIDAuNSAvIDIuNzUpOworICAgICAgICBib3VuY2VBcmVhID0gIHQxICogKHQxICog
KDIuNTIwODMgKiB0MSAtIDAuNjg3NSkgKyAxKTsKKyAgICAgICAgYXJlYSArPSBib3VuY2VBcmVh
OworICAgICAgICBpZiAodCA8IDIuNSAvIDIuNzUpCisgICAgICAgICAgICByZXR1cm4gYXJlYTsK
KyAgICAgICAgdDEgPSB0IC0gMi41IC8gMi43NTsKKyAgICAgICAgYm91bmNlQXJlYSA9IHQxICog
KHQxICogKDIuNTIwODMgKiB0MSAtIDAuMzQzNzUpICsgMSk7CisgICAgICAgIGFyZWEgKz0gYm91
bmNlQXJlYTsKKyAgICAgICAgcmV0dXJuIGFyZWE7CisgICAgfQorfQorCitkb3VibGUgU2Nyb2xs
QW5pbWF0b3JOb25lVGVzdDo6YXR0YWNrQXJlYShTY3JvbGxBbmltYXRvck5vbmU6OkN1cnZlIGN1
cnZlLCBkb3VibGUgc3RhcnRULCBkb3VibGUgZW5kVCkKK3sKKyAgICBkb3VibGUgc3RhcnRWYWx1
ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgc3RhcnRUKTsKKyAgICBkb3VibGUgZW5kVmFsdWUg
PSBjdXJ2ZUludGVncmFsQXQoY3VydmUsIGVuZFQpOworICAgIHJldHVybiBlbmRWYWx1ZSAtIHN0
YXJ0VmFsdWU7Cit9CisKK2RvdWJsZSBTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpyZWxlYXNlQXJl
YShTY3JvbGxBbmltYXRvck5vbmU6OkN1cnZlIGN1cnZlLCBkb3VibGUgc3RhcnRULCBkb3VibGUg
ZW5kVCkKK3sKKyAgICBkb3VibGUgc3RhcnRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwg
MSAtIGVuZFQpOworICAgIGRvdWJsZSBlbmRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwg
MSAtIHN0YXJ0VCk7CisgICAgcmV0dXJuIGVuZFZhbHVlIC0gc3RhcnRWYWx1ZTsKK30KKworZG91
YmxlIFNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q6OmF0dGFja0N1cnZlKFNjcm9sbEFuaW1hdG9yTm9u
ZTo6Q3VydmUgY3VydmUsIGRvdWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsIGRvdWJsZSBzdGFy
dFBvc2l0aW9uLCBkb3VibGUgYXR0YWNrUG9zaXRpb24pCit7CisgICAgcmV0dXJuIFNjcm9sbEFu
aW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmF0dGFja0N1cnZlKGN1cnZlLCBkZWx0YVQsIGN1cnZl
VCwgc3RhcnRQb3NpdGlvbiwgYXR0YWNrUG9zaXRpb24pOworfQorCitkb3VibGUgU2Nyb2xsQW5p
bWF0b3JOb25lVGVzdDo6cmVsZWFzZUN1cnZlKFNjcm9sbEFuaW1hdG9yTm9uZTo6Q3VydmUgY3Vy
dmUsIGRvdWJsZSBkZWx0YVQsIGRvdWJsZSBjdXJ2ZVQsIGRvdWJsZSByZWxlYXNlUG9zaXRpb24s
IGRvdWJsZSBkZXNpcmVkUG9zaXRpb24pCit7CisgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yTm9u
ZTo6UGVyQXhpc0RhdGE6OnJlbGVhc2VDdXJ2ZShjdXJ2ZSwgZGVsdGFULCBjdXJ2ZVQsIHJlbGVh
c2VQb3NpdGlvbiwgZGVzaXJlZFBvc2l0aW9uKTsKK30KKworZG91YmxlIFNjcm9sbEFuaW1hdG9y
Tm9uZVRlc3Q6OmN1cnZlRGVyaXZhdGl2ZUF0KFNjcm9sbEFuaW1hdG9yTm9uZTo6Q3VydmUgY3Vy
dmUsIGRvdWJsZSB1bml0VGltZSkKK3sKKyAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3JOb25lOjpQ
ZXJBeGlzRGF0YTo6Y3VydmVEZXJpdmF0aXZlQXQoY3VydmUsIHVuaXRUaW1lKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvck5vbmVUZXN0OjpjdXJ2ZVRlc3RJbm5lcihTY3JvbGxBbmltYXRvck5v
bmU6OkN1cnZlIGN1cnZlLCBkb3VibGUgc3RlcCwgZG91YmxlIHRpbWUpCit7CisgICAgY29uc3Qg
ZG91YmxlIGtQb3NpdGlvbiA9IDEwMDA7CisKKyAgICBkb3VibGUgb2xkUG9zID0gMDsKKyAgICBk
b3VibGUgb2xkVmVsb2NpdHkgPSAwOworICAgIGRvdWJsZSBhY2N1bXVsYXRlID0gMDsKKworICAg
IGZvciAoZG91YmxlIHQgPSBzdGVwIDsgdCA8PSB0aW1lIDsgdCArPSBzdGVwKSB7CisgICAgICAg
IGRvdWJsZSBuZXdQb3MgPSBhdHRhY2tDdXJ2ZShjdXJ2ZSwgdCwgdGltZSwgMCwga1Bvc2l0aW9u
KTsKKyAgICAgICAgZG91YmxlIGRlbHRhID0gbmV3UG9zIC0gb2xkUG9zOworICAgICAgICBkb3Vi
bGUgdmVsb2NpdHkgPSBkZWx0YSAvIHN0ZXA7CisgICAgICAgIGRvdWJsZSB2ZWxvY2l0eURlbHRh
ID0gdmVsb2NpdHkgLSBvbGRWZWxvY2l0eTsKKworICAgICAgICBhY2N1bXVsYXRlICs9IChvbGRQ
b3MgKyBuZXdQb3MpIC8gMiAqIChzdGVwIC8gdGltZSk7CisgICAgICAgIG9sZFBvcyA9IG5ld1Bv
czsKKyAgICAgICAgb2xkVmVsb2NpdHkgPSB2ZWxvY2l0eTsKKyAgICAgICAgaWYgKGN1cnZlICE9
IFNjcm9sbEFuaW1hdG9yTm9uZTo6Qm91bmNlKSB7CisgICAgICAgICAgICBFWFBFQ1RfTEUoMCwg
dmVsb2NpdHlEZWx0YSk7CisgICAgICAgICAgICBFWFBFQ1RfTFQoMCwgZGVsdGEpOworICAgICAg
ICB9CisKKyAgICAgICAgZG91YmxlIGFyZWEgPSBhdHRhY2tBcmVhKGN1cnZlLCAwLCB0IC8gdGlt
ZSkgKiBrUG9zaXRpb247CisgICAgICAgIEVYUEVDVF9MRSgwLCBhcmVhKTsKKyAgICAgICAgRVhQ
RUNUX05FQVIoYWNjdW11bGF0ZSwgYXJlYSwgMS4wKTsKKyAgICB9CisKKyAgICBvbGRQb3MgPSAw
OworICAgIG9sZFZlbG9jaXR5ICo9IDI7CisgICAgYWNjdW11bGF0ZSA9IGF0dGFja0FyZWEoY3Vy
dmUsIDAsIDEpICoga1Bvc2l0aW9uOworICAgIGZvciAoZG91YmxlIHQgPSBzdGVwIDsgdCA8PSB0
aW1lIDsgdCArPSBzdGVwKSB7CisgICAgICAgIGRvdWJsZSBuZXdQb3MgPSByZWxlYXNlQ3VydmUo
Y3VydmUsIHQsIHRpbWUsIDAsIGtQb3NpdGlvbik7CisgICAgICAgIGRvdWJsZSBkZWx0YSA9IG5l
d1BvcyAtIG9sZFBvczsKKyAgICAgICAgZG91YmxlIHZlbG9jaXR5ID0gZGVsdGEgLyBzdGVwOwor
ICAgICAgICBkb3VibGUgdmVsb2NpdHlEZWx0YSA9IHZlbG9jaXR5IC0gb2xkVmVsb2NpdHk7CisK
KyAgICAgICAgYWNjdW11bGF0ZSAtPSAoa1Bvc2l0aW9uIC0gKG9sZFBvcyArIG5ld1BvcykgLyAy
KSAqIChzdGVwIC8gdGltZSk7CisgICAgICAgIG9sZFBvcyA9IG5ld1BvczsKKyAgICAgICAgb2xk
VmVsb2NpdHkgPSB2ZWxvY2l0eTsKKyAgICAgICAgaWYgKGN1cnZlICE9IFNjcm9sbEFuaW1hdG9y
Tm9uZTo6Qm91bmNlKSB7CisgICAgICAgICAgICBFWFBFQ1RfR0UoMC4wMSwgdmVsb2NpdHlEZWx0
YSk7CisgICAgICAgICAgICBFWFBFQ1RfTFQoMCwgZGVsdGEpOworICAgICAgICB9CisKKyAgICAg
ICAgZG91YmxlIGFyZWEgPSByZWxlYXNlQXJlYShjdXJ2ZSwgdCAvIHRpbWUsIDEpICoga1Bvc2l0
aW9uOworICAgICAgICBFWFBFQ1RfTEUoMCwgYXJlYSk7CisgICAgICAgIEVYUEVDVF9ORUFSKGFj
Y3VtdWxhdGUsIGFyZWEsIDEuMCk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9u
ZVRlc3Q6OmN1cnZlVGVzdChTY3JvbGxBbmltYXRvck5vbmU6OkN1cnZlIGN1cnZlKQoreworICAg
IGN1cnZlVGVzdElubmVyKGN1cnZlLCAwLjAxLCAwLjI1KTsKKyAgICBjdXJ2ZVRlc3RJbm5lcihj
dXJ2ZSwgMC4yLCAxMCk7CisgICAgY3VydmVUZXN0SW5uZXIoY3VydmUsIDAuMDI1LCAxMCk7Cisg
ICAgY3VydmVUZXN0SW5uZXIoY3VydmUsIDAuMDEsIDEpOworICAgIGN1cnZlVGVzdElubmVyKGN1
cnZlLCAwLjI1LCA0MCk7Cit9CisKK1RFU1RfRihTY3JvbGxBbmltYXRvck5vbmVUZXN0LCBDdXJ2
ZU1hdGhMaW5lYXIpCit7CisgICAgY3VydmVUZXN0KFNjcm9sbEFuaW1hdG9yTm9uZTo6TGluZWFy
KTsKK30KKworVEVTVF9GKFNjcm9sbEFuaW1hdG9yTm9uZVRlc3QsIEN1cnZlTWF0aFF1YWRyYXRp
YykKK3sKKyAgICBjdXJ2ZVRlc3QoU2Nyb2xsQW5pbWF0b3JOb25lOjpRdWFkcmF0aWMpOworfQor
CitURVNUX0YoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdCwgQ3VydmVNYXRoQ3ViaWMpCit7CisgICAg
Y3VydmVUZXN0KFNjcm9sbEFuaW1hdG9yTm9uZTo6Q3ViaWMpOworfQorCitURVNUX0YoU2Nyb2xs
QW5pbWF0b3JOb25lVGVzdCwgQ3VydmVNYXRoQm91bmNlKQoreworICAgIGN1cnZlVGVzdChTY3Jv
bGxBbmltYXRvck5vbmU6OkJvdW5jZSk7Cit9CisKK1RFU1RfRihTY3JvbGxBbmltYXRvck5vbmVU
ZXN0LCBTY3JvbGxPbmNlTGluZWFyKQoreworICAgIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGFyYW1l
dGVycyBwYXJhbWV0ZXJzKHRydWUsIDcgKiBrVGlja1RpbWUsIFNjcm9sbEFuaW1hdG9yTm9uZTo6
TGluZWFyLCAzICoga1RpY2tUaW1lLCBTY3JvbGxBbmltYXRvck5vbmU6OkxpbmVhciwgMyAqIGtU
aWNrVGltZSk7CisKKyAgICB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoVmVydGljYWxTY3JvbGxi
YXIsIDEsIDQwLCAxMDAwLCBrU3RhcnRUaW1lLCAmcGFyYW1ldGVycyk7CisgICAgYm9vbCByZXN1
bHQgPSB0cnVlOworICAgIGZvciAoZG91YmxlIHQgPSBrU3RhcnRUaW1lOyByZXN1bHQgJiYgdCA8
IGtFbmRUaW1lOyB0ICs9IGtBbmltYXRpb25UaW1lKQorICAgICAgICByZXN1bHQgPSBhbmltYXRl
U2Nyb2xsKHQpOworfQorCitURVNUX0YoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdCwgU2Nyb2xsT25j
ZVF1YWRyYXRpYykKK3sKKyAgICBTY3JvbGxBbmltYXRvck5vbmU6OlBhcmFtZXRlcnMgcGFyYW1l
dGVycyh0cnVlLCA3ICoga1RpY2tUaW1lLCBTY3JvbGxBbmltYXRvck5vbmU6OlF1YWRyYXRpYywg
MyAqIGtUaWNrVGltZSwgU2Nyb2xsQW5pbWF0b3JOb25lOjpRdWFkcmF0aWMsIDMgKiBrVGlja1Rp
bWUpOworCisgICAgdXBkYXRlRGF0YUZyb21QYXJhbWV0ZXJzKFZlcnRpY2FsU2Nyb2xsYmFyLCAx
LCA0MCwgMTAwMCwga1N0YXJ0VGltZSwgJnBhcmFtZXRlcnMpOworICAgIGJvb2wgcmVzdWx0ID0g
dHJ1ZTsKKyAgICBmb3IgKGRvdWJsZSB0ID0ga1N0YXJ0VGltZTsgcmVzdWx0ICYmIHQgPCBrRW5k
VGltZTsgdCArPSBrQW5pbWF0aW9uVGltZSkKKyAgICAgICAgcmVzdWx0ID0gYW5pbWF0ZVNjcm9s
bCh0KTsKK30KKworVEVTVF9GKFNjcm9sbEFuaW1hdG9yTm9uZVRlc3QsIFNjcm9sbExvbmdRdWFk
cmF0aWMpCit7CisgICAgU2Nyb2xsQW5pbWF0b3JOb25lOjpQYXJhbWV0ZXJzIHBhcmFtZXRlcnMo
dHJ1ZSwgMjAgKiBrVGlja1RpbWUsIFNjcm9sbEFuaW1hdG9yTm9uZTo6UXVhZHJhdGljLCAzICog
a1RpY2tUaW1lLCBTY3JvbGxBbmltYXRvck5vbmU6OlF1YWRyYXRpYywgMyAqIGtUaWNrVGltZSk7
CisKKyAgICB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoVmVydGljYWxTY3JvbGxiYXIsIDEsIDQw
LCAxMDAwLCBrU3RhcnRUaW1lLCAmcGFyYW1ldGVycyk7CisgICAgYm9vbCByZXN1bHQgPSB0cnVl
OworICAgIGZvciAoZG91YmxlIHQgPSBrU3RhcnRUaW1lOyByZXN1bHQgJiYgdCA8IGtFbmRUaW1l
OyB0ICs9IGtBbmltYXRpb25UaW1lKQorICAgICAgICByZXN1bHQgPSBhbmltYXRlU2Nyb2xsKHQp
OworfQorCitURVNUX0YoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdCwgU2Nyb2xsUXVhZHJhdGljTm9T
dXN0YWluKQoreworICAgIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGFyYW1ldGVycyBwYXJhbWV0ZXJz
KHRydWUsIDggKiBrVGlja1RpbWUsIFNjcm9sbEFuaW1hdG9yTm9uZTo6UXVhZHJhdGljLCA0ICog
a1RpY2tUaW1lLCBTY3JvbGxBbmltYXRvck5vbmU6OlF1YWRyYXRpYywgNCAqIGtUaWNrVGltZSk7
CisKKyAgICB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoVmVydGljYWxTY3JvbGxiYXIsIDEsIDQw
LCAxMDAwLCBrU3RhcnRUaW1lLCAmcGFyYW1ldGVycyk7CisgICAgYm9vbCByZXN1bHQgPSB0cnVl
OworICAgIGZvciAoZG91YmxlIHQgPSBrU3RhcnRUaW1lOyByZXN1bHQgJiYgdCA8IGtFbmRUaW1l
OyB0ICs9IGtBbmltYXRpb25UaW1lKQorICAgICAgICByZXN1bHQgPSBhbmltYXRlU2Nyb2xsKHQp
OworfQorCitURVNUX0YoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdCwgU2Nyb2xsT25jZUN1YmljKQor
eworICAgIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzKHRydWUsIDcg
KiBrVGlja1RpbWUsIFNjcm9sbEFuaW1hdG9yTm9uZTo6Q3ViaWMsIDMgKiBrVGlja1RpbWUsIFNj
cm9sbEFuaW1hdG9yTm9uZTo6Q3ViaWMsIDMgKiBrVGlja1RpbWUpOworCisgICAgdXBkYXRlRGF0
YUZyb21QYXJhbWV0ZXJzKFZlcnRpY2FsU2Nyb2xsYmFyLCAxLCA0MCwgMTAwMCwga1N0YXJ0VGlt
ZSwgJnBhcmFtZXRlcnMpOworICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICBmb3IgKGRvdWJs
ZSB0ID0ga1N0YXJ0VGltZTsgcmVzdWx0ICYmIHQgPCBrRW5kVGltZTsgdCArPSBrQW5pbWF0aW9u
VGltZSkKKyAgICAgICAgcmVzdWx0ID0gYW5pbWF0ZVNjcm9sbCh0KTsKK30KKworVEVTVF9GKFNj
cm9sbEFuaW1hdG9yTm9uZVRlc3QsIFNjcm9sbE9uY2VTaG9ydCkKK3sKKyAgICBTY3JvbGxBbmlt
YXRvck5vbmU6OlBhcmFtZXRlcnMgcGFyYW1ldGVycyh0cnVlLCA3ICoga1RpY2tUaW1lLCBTY3Jv
bGxBbmltYXRvck5vbmU6OkN1YmljLCAzICoga1RpY2tUaW1lLCBTY3JvbGxBbmltYXRvck5vbmU6
OkN1YmljLCAzICoga1RpY2tUaW1lKTsKKworICAgIHVwZGF0ZURhdGFGcm9tUGFyYW1ldGVycyhW
ZXJ0aWNhbFNjcm9sbGJhciwgMSwgNDAsIDEwMDAsIGtTdGFydFRpbWUsICZwYXJhbWV0ZXJzKTsK
KyAgICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgZm9yIChkb3VibGUgdCA9IGtTdGFydFRpbWU7
IHJlc3VsdCAmJiB0IDwga0VuZFRpbWU7IHQgKz0ga1RpY2tUaW1lKQorICAgICAgICByZXN1bHQg
PSBhbmltYXRlU2Nyb2xsKHQpOworfQorCitURVNUX0YoU2Nyb2xsQW5pbWF0b3JOb25lVGVzdCwg
U2Nyb2xsVHdpY2VRdWFkcmF0aWMpCit7CisgICAgU2Nyb2xsQW5pbWF0b3JOb25lOjpQYXJhbWV0
ZXJzIHBhcmFtZXRlcnModHJ1ZSwgNyAqIGtUaWNrVGltZSwgU2Nyb2xsQW5pbWF0b3JOb25lOjpR
dWFkcmF0aWMsIDMgKiBrVGlja1RpbWUsIFNjcm9sbEFuaW1hdG9yTm9uZTo6UXVhZHJhdGljLCAz
ICoga1RpY2tUaW1lKTsKKworICAgIHVwZGF0ZURhdGFGcm9tUGFyYW1ldGVycyhWZXJ0aWNhbFNj
cm9sbGJhciwgMSwgNDAsIDEwMDAsIGtTdGFydFRpbWUsICZwYXJhbWV0ZXJzKTsKKyAgICBib29s
IHJlc3VsdCA9IHRydWU7CisgICAgZG91YmxlIHQ7CisgICAgZm9yICh0ID0ga1N0YXJ0VGltZTsg
cmVzdWx0ICYmIHQgPCBrU3RhcnRUaW1lICsgMS41ICoga1RpY2tUaW1lOyB0ICs9IGtBbmltYXRp
b25UaW1lKQorICAgICAgICByZXN1bHQgPSBhbmltYXRlU2Nyb2xsKHQpOworCisgICAgcmVzdWx0
ID0gcmVzdWx0ICYmIGFuaW1hdGVTY3JvbGwodCk7CisgICAgZG91YmxlIGJlZm9yZSA9IG1fY3Vy
cmVudFBvc2l0aW9uOworICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB1cGRhdGVEYXRhRnJvbVBhcmFt
ZXRlcnMoVmVydGljYWxTY3JvbGxiYXIsIDEsIDQwLCAxMDAwLCB0LCAmcGFyYW1ldGVycyk7Cisg
ICAgcmVzdWx0ID0gcmVzdWx0ICYmIGFuaW1hdGVTY3JvbGwodCk7CisgICAgZG91YmxlIGFmdGVy
ID0gbV9jdXJyZW50UG9zaXRpb247CisgICAgRVhQRUNUX05FQVIoYmVmb3JlLCBhZnRlciwgMTAp
OworCisgICAgdCArPSBrQW5pbWF0aW9uVGltZTsKKworICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBh
bmltYXRlU2Nyb2xsKHQpOworICAgIGJlZm9yZSA9IG1fY3VycmVudFBvc2l0aW9uOworICAgIHJl
c3VsdCA9IHJlc3VsdCAmJiB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoVmVydGljYWxTY3JvbGxi
YXIsIDEsIDQwLCAxMDAwLCB0LCAmcGFyYW1ldGVycyk7CisgICAgcmVzdWx0ID0gcmVzdWx0ICYm
IGFuaW1hdGVTY3JvbGwodCk7CisgICAgYWZ0ZXIgPSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAgICBF
WFBFQ1RfTkVBUihiZWZvcmUsIGFmdGVyLCAxMCk7CisKKyAgICB0ICs9IGtBbmltYXRpb25UaW1l
OworICAgIGZvciAoOyByZXN1bHQgJiYgdCA8IGtFbmRUaW1lOyB0ICs9IGtBbmltYXRpb25UaW1l
KQorICAgICAgICByZXN1bHQgPSBhbmltYXRlU2Nyb2xsKHQpOworfQorCitURVNUX0YoU2Nyb2xs
QW5pbWF0b3JOb25lVGVzdCwgU2Nyb2xsTG90c1F1YWRyYXRpYykKK3sKKyAgICBTY3JvbGxBbmlt
YXRvck5vbmU6OlBhcmFtZXRlcnMgcGFyYW1ldGVycyh0cnVlLCA3ICoga1RpY2tUaW1lLCBTY3Jv
bGxBbmltYXRvck5vbmU6OlF1YWRyYXRpYywgMyAqIGtUaWNrVGltZSwgU2Nyb2xsQW5pbWF0b3JO
b25lOjpRdWFkcmF0aWMsIDMgKiBrVGlja1RpbWUpOworCisgICAgdXBkYXRlRGF0YUZyb21QYXJh
bWV0ZXJzKFZlcnRpY2FsU2Nyb2xsYmFyLCAxLCA0MCwgMTAwMCwga1N0YXJ0VGltZSwgJnBhcmFt
ZXRlcnMpOworICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAgICBkb3VibGUgdDsKKyAgICBmb3Ig
KHQgPSBrU3RhcnRUaW1lOyByZXN1bHQgJiYgdCA8IGtTdGFydFRpbWUgKyAxLjUgKiBrVGlja1Rp
bWU7IHQgKz0ga0FuaW1hdGlvblRpbWUpCisgICAgICAgIHJlc3VsdCA9IGFuaW1hdGVTY3JvbGwo
dCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyArK2kpIHsKKyAgICAgICAgdCArPSBr
QW5pbWF0aW9uVGltZTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIGFuaW1hdGVTY3JvbGwo
dCk7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMo
VmVydGljYWxTY3JvbGxiYXIsIDMsIDQwLCAxMDAwMCwgdCwgJnBhcmFtZXRlcnMpOworICAgIH0K
KworICAgIHQgKz0ga0FuaW1hdGlvblRpbWU7CisgICAgZm9yICg7IHJlc3VsdCAmJiB0IDwga0Vu
ZFRpbWU7IHQgKz0ga0FuaW1hdGlvblRpbWUpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBh
bmltYXRlU2Nyb2xsKHQpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>