<?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>32356</bug_id>
          
          <creation_ts>2009-12-09 17:15:54 -0800</creation_ts>
          <short_desc>Implement smooth scrolling for multiple platforms</short_desc>
          <delta_ts>2010-09-13 13:59:49 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45411</dependson>
          <blocked>31900</blocked>
    
    <blocked>16123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>hyatt</cc>
    
    <cc>igitur</cc>
    
    <cc>kenneth</cc>
    
    <cc>mitz</cc>
    
    <cc>peter</cc>
    
    <cc>theodorejb</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>170259</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-09 17:15:54 -0800</bug_when>
    <thetext>Title of this bug is vague because I&apos;m not sure precisely how far I&apos;ll have to go.  At the very least I&apos;d like a platform-neutral framework that different platforms plug different acceleration curves into, and a Windows implementation that Chromium could use (and probably Safari/Win too, which I assume would want the same behavior)

Some investigation of IE 8 and Fx 3.5 on Windows:

Points true of both, which we should copy:
* Clicking in the track, clicking on the scroll arrows, pgup/pgdn/space/up arrow/down arrow all smooth-scroll.
* Thumb dragging and shift-clicking do not smooth-scroll.
* Smooth-scrolling also smooth-scrolls the thumb.

IE-specific details:
* Animation curve may be nonlinear (initial acceleration, maybe closing acceleration)?  Hard to tell since it&apos;s so fast.
* Rate is calculated based on what type of scrolling is being done, not how far the thumb actually has to travel.  (Good, see below)
* Reversing direction in mid scroll completes the old scroll and then reverses.  (Slightly odd-feeling)

Firefox:
* Smooth scrolling cuts the net speed of scroll-with-scroll-arrows in half.  (Ugh)
* Animation curve may be linear, hard to tell (I didn&apos;t go look at the source code)
* When scrolling repeatedly (e.g. holding a button down), the scrolling is done in segments just like w/o smooth scrolling, each of which is scrolled smoothly over the time until the next update.  As a result, the last segment of a scroll, which may be shorter, is scrolled &quot;slower&quot; (often noticeably slow), which feels very weird.
* Reversing direction in mid scroll affects scrolling immediately.

Behavioral goals for our implementation:
* Determine desired steady-state scroll speed from scroll type (page vs. line), not distance to scroll (i.e. like IE, not Fx).
* Accelerate current scroll speed at a constant rate to reach desired speed.  Ramp time should be a small fraction of the standard time-per-scroll-increment, e.g. 0.25x.  The overall scroll will end up taking this amount of time &quot;extra&quot; (regardless of net distance scrolled) and will be half this amount of time &quot;behind&quot; the non-smooth scroll in steady-state.
* Ramp down linearly using same constant to stop at endpoint.
* Reversing direction in mid scroll should take effect immediately (i.e. like Fx, not IE), but precise algorithm for changing velocity is open to question; either reversing the acceleration or reversing the current velocity might be OK.

Implementation details:
* We&apos;ll need to add &quot;desired position&quot; and &quot;desired velocity&quot; variables to Scrollbar, as well as a Timer to do the updating.  We could theoretically use the existing timer if our smooth scroll update rate was a divisor of the autoscroll rates, but it seems better to not rely on that. 
* CSS animations look like they fire every 25 ms (= 40 FPS), perhaps we should use the same value for the smooth scroll updates.
* ScrollbarTheme is going to need ways to specify the smooth scrolling details (including &quot;do we do it at all&quot;).  I don&apos;t know how much I need to parametrize because I don&apos;t know what the Mac smooth scrolling desired curve looks like.  Hyatt, feel free to fill me in...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170275</commentid>
    <comment_count>1</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-09 18:12:56 -0800</bug_when>
    <thetext>More implementation detail:
* Programmatic scrolling (which we don&apos;t want to smooth-scroll) calls into setValue(), not scroll().  Both scroll() and setValue() call setCurrentPos().
* Middle-mouse-autoscroll (which we also don&apos;t want to smooth-scroll) also calls setValue().
* Wheel scroll (which we do want to smooth-scroll) also calls setValue().
* Dragging the thumb (which we don&apos;t want to smooth-scroll) calls the various mouseMoved()/moveThumb() functions.
* Scrolling by holding down keyboard keys (which we do want to smooth-scroll) calls scroll() repeatedly, never the timer-based functions called when a user holds down the mouse on a scrollbar part.

Not totally clear what should happen when multiple of these are in play at once (e.g. dragging the thumb + flicking the wheel).

Clearly, I&apos;m going to need to parametrize setValue() so that callers can indicate if they want smooth scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170293</commentid>
    <comment_count>2</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-09 19:30:40 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Clearly, I&apos;m going to need to parametrize setValue() so that callers can
&gt; indicate if they want smooth scrolling.

Lies.  As an API name, &quot;setValue()&quot; is pretty clear.  It doesn&apos;t mean &quot;scroll to value&quot;.  I should instead change wheel scrolls to go through a different function, probably scroll().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170578</commentid>
    <comment_count>3</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-10 16:26:15 -0800</bug_when>
    <thetext>IE&apos;s acceleration curves for mouse wheel scrolling are more obvious than for other methods.  There they seem to have no deceleration and either a linear or superlinear acceleration.

There are a number of implementation bits I missed nothing above:
* We must account for timer lag lest smooth scrolling slow down net scroll speed on pages that don&apos;t scroll quickly.
* There are problems with cases like mouse wheel scroll, where we can get a rapid series of small scroll events.  In this case, for each event we&apos;ll micro-smooth-scroll the event (perhaps not smoothing at all if the distance is short compared to our initial smooth scrolling velocity) and then possibly do it again an extremely short time later for the next event, adding up to a different (less smooth) appearance than if we had done a single scroll of double the distance.  It&apos;s not obvious to me what the best solution is here.  Perhaps I need to have a far different acceleration curve for wheel scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170594</commentid>
    <comment_count>4</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-10 17:23:34 -0800</bug_when>
    <thetext>Another data point: Neither Firefox nor IE smooth-scroll for document-sized scrolls (e.g. pressing home or end).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170997</commentid>
    <comment_count>5</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-11 17:25:30 -0800</bug_when>
    <thetext>OK, I have a working patch I&apos;ll post soon.

More implementation notes:
* I dropped the idea of a deceleration at the end of the scroll.  It&apos;s tricky to figure out how to do this exactly right, and after thinking about it more I decided it probably wouldn&apos;t feel all that great anyway.  Added bonus: this cuts the net smooth-scrolling-imposed constant lag by half compared to my first design.
* For keyboard scrolls, because the key repeat rate might be higher than the autoscroll timer repeat rate (which is what I used to calculate the desired steady-state scroll velocity), we could get scroll increments queued up, resulting in scrolling for a while after releasing the key.  Because I don&apos;t know of a good way of checking the precise repeat rate (and didn&apos;t want to try to infer it with a heuristic), I inserted code that basically discards additional keyboard scrolls when we&apos;ve already got some queued.  This has the effect of clamping the maximum keyboard scroll rate to match what happens when you hold the mouse down on parts of the scrollbar, which doesn&apos;t seem too bad to me.  Sadly, this meant plumbing a bool through basically every scroll-related function in WebCore, ugh; the alternative was extending the ScrollGranularity enum to hack this property in, which seemed like a bad superposition of discrete meanings.
* I decided to deal with the wheel scroll case by setting the desired steady-state velocity based on how far our desired scroll position is from our current one.  This makes wheel scrolls feel similar to other types of scrolls (see comment in the code for why), with the nice property that at both low and high speeds the scroll is smooth and not laggy.
* I don&apos;t know precisely what kinds of scroll algorithms different platforms will want, so for now I&apos;ve only added a few knobs to the ScrollbarTheme.  We can of course add to these.

In my testing, Chromium built with this patch feels subjectively superior to both IE&apos;s and Firefox&apos; smooth scrolling implementations.  Hoorj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171013</commentid>
    <comment_count>6</comment_count>
      <attachid>44720</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-11 18:37:45 -0800</bug_when>
    <thetext>Created attachment 44720
patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171015</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 18:40:04 -0800</bug_when>
    <thetext>Attachment 44720 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/Scrollbar.cpp:232:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171017</commentid>
    <comment_count>8</comment_count>
      <attachid>44721</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-11 18:48:50 -0800</bug_when>
    <thetext>Created attachment 44721
patch v1.1

I wasn&apos;t even touching that line of code... :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171018</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 18:50:38 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44721 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171031</commentid>
    <comment_count>10</comment_count>
      <attachid>44721</attachid>
    <who name="">mitz</who>
    <bug_when>2009-12-11 21:53:07 -0800</bug_when>
    <thetext>Comment on attachment 44721
patch v1.1

It seems odd that smooth scrolling is implemented in Scrollbar, as it’s not a scrollbar feature, but rather a feature of scrollable areas.

This implementation of the scroll animator and additional scrolling behavior in cross-platform code does not enable ports to have their own smooth scrolling behavior that matches their platforms’ native behavior. Therefore, I think there’s no point doing things this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171036</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-11 22:36:13 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 44721 [details])
&gt; It seems odd that smooth scrolling is implemented in Scrollbar, as it’s not a
&gt; scrollbar feature, but rather a feature of scrollable areas.

The code in Scrollbar is not just a View observing how an area is scrolled.  It function as a Model responsible for handling scrolling, calculating how things should be updated and sending out those updates.  Note how the scrollbar itself, not just the web content, is smoothly updated.  I don&apos;t think it&apos;s feasible to put this code anywhere else.

&gt; This implementation of the scroll animator and additional scrolling behavior in
&gt; cross-platform code does not enable ports to have their own smooth scrolling
&gt; behavior that matches their platforms’ native behavior.

It&apos;s impossible for me to design anything different without knowing the precise details of how each platform smooth scrolls.  I put some basic tweaking knobs in to start with.  We can change them if we need to.  But this should be most of what any platform needs.

I had discussed this briefly with hyatt on IRC before launching into things and was under the impression that this was the desired route to take -- as I said above, it&apos;s the only way I can even imagine writing it.  And the whole point is to put much of the machinery into cross-platform code; even if we could keep it solely in platform-specific files, every platform would have to completely reimplement it.  That isn&apos;t how we&apos;ve done anything else around Scrollbar, where everything is cross-platform with some oracle functions in ScrollbarTheme, so why is it desirable here?

It is extremely discouraging to put a completely functional implementation up (not just a prototype, but something which has already gone through one round of testing and tweaking) and have you say it&apos;s totally wrong but offer absolutely no insight on the concrete details of what it fails to accomplish or what the alternative design is that you think is correct.  What are the specifics of Mac smooth scrolling that are unrepresentable in this algorithm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171046</commentid>
    <comment_count>12</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-11 23:39:29 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 44721 [details] [details])
&gt; &gt; It seems odd that smooth scrolling is implemented in Scrollbar, as it’s not a
&gt; &gt; scrollbar feature, but rather a feature of scrollable areas.
&gt; 
&gt; The code in Scrollbar is not just a View observing how an area is scrolled.  It
&gt; function as a Model responsible for handling scrolling, calculating how things
&gt; should be updated and sending out those updates.

This wasn&apos;t as clear as it could have been.  Let me try again.  Apologies if this is already clear to you (though if it is then I&apos;m even more confused by your comments).

Smooth scrolling _is_ a scrollbar feature.  It affects all the types of scrolling performed inside the scrollbar -- single scrolls up or down and autoscrolling, triggered by mouse or keyboard -- and causes them to appear to the scrollbar client as more frequent, smaller scrolls.  That it&apos;s the scrollbar which performs these is clear from the scroll() API, which takes a high-level description of the type of scrolling to be performed and decides what the ultimate results will be.  Callers don&apos;t delve into the low-level details of what the appearance of this scroll will be, and clients don&apos;t do anything more complex than simply respond to the controlling scrollbar.

By contrast, the types of &quot;scrolling&quot; which are simply setting the scroll position, rather than moving from one position to another, bypass scroll() and call setValue() instead.  Even here, it is the Scrollbar object which tracks the scroll position and notifies the client that it has changed, but in this case the Scrollbar is not really transforming a high-level input into low-level outputs.

If I try to imagine putting smooth scrolling on the scrollview, then I get the strange effect that the scrollbar tells the scrollview to change its position, and then the scrollview, having converted that to a series of smaller scroll increments, tells the scrollbar to change _its_ position (backwards).  Not only does this possibly result in scrollbar jitter, and represent the first ever communication backwards from scrollview to scrollbar (muddying the model/view picture), but it also tangles with any autoscrolling the scrollbar is in the midst of performing.

Perhaps I&apos;m totally misinterpreting where you were thinking the smooth scrolling code should go?

&gt; It&apos;s impossible for me to design anything different without knowing the precise
&gt; details of how each platform smooth scrolls.  I put some basic tweaking knobs
&gt; in to start with.  We can change them if we need to.

I should have mentioned more specifically that it&apos;s really easy to extend the set of knobs to make the scrolling algorithm arbitrarily complex.  I avoided doing this not because it would be hard but because I didn&apos;t want to parameterize what I didn&apos;t know needed to be.  The few knobs in there are samples and the things it seemed most likely for a platform to want to change, like whether there was an initial acceleration curve and how long it took.  And of course there&apos;s a function for a platform to disable smooth scrolling entirely, either because it never wants to do it or because we don&apos;t yet have the implementation correct.

If, for example, a platform needs nonlinear acceleration, it would be very easy for me to change the oracle function to take an input time and output an acceleration or velocity.

Some quick observation of Mac smooth scrolling suggests it has linear acceleration (over a longer time period than in my default implementation) as well as deceleration.  If you have precise details that&apos;d be awesome.  It&apos;s definitely feasible to support this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171057</commentid>
    <comment_count>13</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-12-12 00:03:36 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; What are the specifics of Mac smooth scrolling that are unrepresentable in this algorithm?

The shape of the animation curves, the total duration of the animation, how the animation changes when the target is changed during animation, scroll by document being animated, and no dropping of keyboard events are the ones I have noticed.

Rather than trying to add just enough complexity to the cross-platform code to support any known platform behavior, leaving the animator implementation to platform-specific code allows for arbitrarily complex behavior, and for leveraging—rather than replicating—platform code. This last point, while not especially important for Mac OS X WebKit, can benefit ports that may run on different versions of the underlying OS, which may have different behaviors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171065</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-12 00:23:58 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Rather than trying to add just enough complexity to the cross-platform code to
&gt; support any known platform behavior, leaving the animator implementation to
&gt; platform-specific code allows for arbitrarily complex behavior, and for
&gt; leveraging—rather than replicating—platform code.

What are you suggesting, concretely?  That the implementations of setDesiredPos(), smoothScroll(), etc. all be placed in PlatformScrollbar?

The downside of this is that on platforms which have no platform code that can be hooked at a fine-grained level to get the right scroll behaviors out, which is certainly Windows and I imagine the majority of other OSes WebKit is ported to, this does cause replication, on every platform that has to completely reimplement smooth scrolling.  Is even Mac able to provide the hooks you need here?  After all, we&apos;re not actually using native widgets, so we can&apos;t simply toggle a smooth scroll attribute and be done.

It would help me immensely for you to lay out a detailed, concrete design for what the platform-specific implementation you&apos;re suggesting looks like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171449</commentid>
    <comment_count>15</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-12-14 09:52:03 -0800</bug_when>
    <thetext>How about something like this? A scrollable area can own an instance of ScrollAnmiator, which in turn has a (weak) reference back to the scrollable area (a ScrollbarClient or a perhaps ScrollAnimatorClient?). The ScrollAnimator has methods to stop animation, query if animation is in progress, set the animation target (a 2D offset; animating each scroll axis independently is yet another thing that makes the Scrollbar-based implementation unsuitable for Mac OS X), and query the current animation target. Upon setting a target, the ScrollAnimator drives its client to the target. The ScrollbarClient interface is extended to allow scrollbars (and other callers) to specify whether a scroll operation should be immediate or may be animated. ScrollAnimator implementations are platform- and/or port-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171480</commentid>
    <comment_count>16</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-14 11:03:58 -0800</bug_when>
    <thetext>Thanks a bunch for the detail, that makes things noticeably clearer.

It seems a little odd that the flow for setting a target is Scrollbar-&gt;ScrollbarClient-&gt;ScrollAnimator-&gt;ScrollAnimatorClient, rather than just Scrollbar-&gt;ScrollAnimator-&gt;ScrollAnimatorClient, especially if the Scrollbar is the one determining whether animation should actually occur-- it seems slightly more natural if the Scrollbar just tells the animator &quot;here&apos;s what happened&quot; and the animator decides everything else.  Do you think this is a reasonable model?  A downside would be if the Scrollbar wants to tell the ScrollbarClient something that the ScrollAnimator is never going to care about, we&apos;d have to have useless passthrough functions.

One other bit of strangeness with today&apos;s code is that there seems to be a second implementation of scrolling inside the RenderListBo, so that scrolling &lt;select&gt; dropdowns smooth-scrolls today (but feels strange doing it).  I don&apos;t understand how this code works and I am suspicious that maybe it should be refactored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171482</commentid>
    <comment_count>17</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-12-14 11:26:30 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; It seems a little odd that the flow for setting a target is
&gt; Scrollbar-&gt;ScrollbarClient-&gt;ScrollAnimator-&gt;ScrollAnimatorClient, rather than
&gt; just Scrollbar-&gt;ScrollAnimator-&gt;ScrollAnimatorClient, especially if the
&gt; Scrollbar is the one determining whether animation should actually occur-- it
&gt; seems slightly more natural if the Scrollbar just tells the animator &quot;here&apos;s
&gt; what happened&quot; and the animator decides everything else.  Do you think this is
&gt; a reasonable model?  A downside would be if the Scrollbar wants to tell the
&gt; ScrollbarClient something that the ScrollAnimator is never going to care about,
&gt; we&apos;d have to have useless passthrough functions.

I guess I just find it odd that all manner of scrolling goes through Scrollbar. For example, if the area is scrolled to the bottom right corner and you press Home, ideally the ScrollAnimator should just be told to go to the origin once, instead of having the horizontal scrollbar tell it to go to the left and then the vertical scrollbar tell it to go to the top(-left). Then again, since the end result will be the same (at least for the animator implementation I have in mind), I don’t think it’s important to do it one way or another in the context of fixing this bug. “Whatever goes with the existing code” seems fine to me.

&gt; One other bit of strangeness with today&apos;s code is that there seems to be a
&gt; second implementation of scrolling inside the RenderListBo, so that scrolling
&gt; &lt;select&gt; dropdowns smooth-scrolls today (but feels strange doing it).  I don&apos;t
&gt; understand how this code works and I am suspicious that maybe it should be
&gt; refactored.

Hm… &lt;select&gt; drop-downs are implemented by PopupListBox. The Chromium variant (PopupMenuChromium.cpp) appears to be a FramelessScrollView. Not sure how it manages scrolling. Other variants appear to use different scrolling mechanisms (if any).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171488</commentid>
    <comment_count>18</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-14 11:46:23 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; I guess I just find it odd that all manner of scrolling goes through Scrollbar.
&gt; For example, if the area is scrolled to the bottom right corner and you press
&gt; Home, ideally the ScrollAnimator should just be told to go to the origin once,
&gt; instead of having the horizontal scrollbar tell it to go to the left and then
&gt; the vertical scrollbar tell it to go to the top(-left). Then again, since the
&gt; end result will be the same (at least for the animator implementation I have in
&gt; mind), I don’t think it’s important to do it one way or another in the context
&gt; of fixing this bug. “Whatever goes with the existing code” seems fine to me.

I think that&apos;s a valid issue but slightly different than the one I was raising -- it has to do with the code one level up, which is currently calling the scrollbar methods.  It&apos;s not clear to me whether that should tell a scrollview to change its position rather than a scrollbar, or maybe even talk to a scrollanimator directly.

&gt; &gt; One other bit of strangeness with today&apos;s code is that there seems to be a
&gt; &gt; second implementation of scrolling inside the RenderListBox, so that scrolling
&gt; &gt; &lt;select&gt; dropdowns smooth-scrolls today (but feels strange doing it).  I don&apos;t
&gt; &gt; understand how this code works and I am suspicious that maybe it should be
&gt; &gt; refactored.
&gt; 
&gt; Hm… &lt;select&gt; drop-downs are implemented by PopupListBox. The Chromium variant
&gt; (PopupMenuChromium.cpp) appears to be a FramelessScrollView. Not sure how it
&gt; manages scrolling. Other variants appear to use different scrolling mechanisms
&gt; (if any).

Sorry, I&apos;m referring to &lt;select multiple&gt;.  See the code in RenderListBox.cpp compared to RenderLayer.cpp.  There are different implementations of panscrolling, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171600</commentid>
    <comment_count>19</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-14 15:00:53 -0800</bug_when>
    <thetext>I&apos;m not sure having the ScrollAnimator be a separate object buys much.  Looking at the current code, maybe the easiest thing to do is simply to extend the ScrollbarClient interface slightly.

The trickiest bit here is making sure the scrollbar itself is animated in sync with the page.  It seems like the theoretical best way to do this would be to make the scrollbar be a dumb view of the relevant scroll position, which would be kept on the scrollanimator or scrollable view.  I&apos;m concerned about how large a change this would be.

Maybe a fallback is to add a parameter to Scrollbar::setValue() that indicates it should not ask the animation to reset, then plumb that through the scrollable view, and have animation-related updates set that flag.  Then you get a call pattern that looks something like EventHandler-&gt;ScrollView-&gt;Scrollbar-&gt;ScrollbarClient-&gt;Scrollbar.

I really wish I had hyatt&apos;s input here; I&apos;m much less familiar with the ScrollbarClient/ScrollView side of things than the Scrollbar side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172154</commentid>
    <comment_count>20</comment_count>
      <attachid>44938</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-15 21:37:53 -0800</bug_when>
    <thetext>Created attachment 44938
patch v2

This patch implements something like what mitz described.  There is a ScrollAnimator class that can be subclassed on particular ports or platforms to perform one- or two-dimensional animation; the APIs to call it are extremely simple, so the class can implement pretty much any algorithm it desires.  There is a ScrollAnimatorClient class that the animator uses to convey the scroll amounts back to the scrollbars; for simplicity&apos;s sake, ScrollbarClient inherits from this class.  ScrollbarClient also adds the couple of hooks needed for the Scrollbar to communicate to the ScrollAnimator that a scroll is desired.

ScrollAnimator.h contains a stub implementation that will do no scroll animation (i.e. the same behavior as before this patch), and everyone but PLATFORM(CHROMIUM) uses it.  I also thought about putting the one relevant function here in something like a ScrollAnimatorNone.cpp and compiling that in to projects where appropriate, I wasn&apos;t sure which would be better.

The smooth-scrolling logic from the last patch is moved to ScrollAnimatorChromiumWin.  It has also been updated to not clamp keyboard scrolling rates to the scrollbar autorepeat rate (I found a way to make keyboard scrolling fairly smooth even at higher rates).  We still do need the added plumbing in the rest of the code that tells us whether we&apos;re performing a keyboard-triggered scroll or not.

There are a few problems with this patch:
* XCode project not updated with ScrollAnimator.h -- I don&apos;t have a Mac with XCode handy (someone want to add the relevant bits here so I can put them in the patch?)
* Won&apos;t link on non-Windows Chromium (need to get the right #ifdefs in place)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172155</commentid>
    <comment_count>21</comment_count>
      <attachid>44939</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-15 21:38:34 -0800</bug_when>
    <thetext>Created attachment 44939
patch v2, for reals

Argh, try checking the &quot;patch&quot; box</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172156</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 21:40:33 -0800</bug_when>
    <thetext>Attachment 44939 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/ScrollAnimator.h:66:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/chromium/ScrollAnimatorChromiumWin.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/chromium/ScrollAnimatorChromiumWin.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172158</commentid>
    <comment_count>23</comment_count>
      <attachid>44940</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-15 21:44:45 -0800</bug_when>
    <thetext>Created attachment 44940
patch v2.1

Try to fix style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172159</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 21:46:09 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44940 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172183</commentid>
    <comment_count>25</comment_count>
      <attachid>44940</attachid>
    <who name="">mitz</who>
    <bug_when>2009-12-15 23:47:05 -0800</bug_when>
    <thetext>Comment on attachment 44940
patch v2.1

Thanks, this looks promising! I am going to need some more time to review the entire patch. Here are a few comments, not necessarily the most important or deepest ones (the fact that I refer to a method or use a parameter name in the following doesn’t mean that I think that it should stay :) ).

1. Since it turns out that all ScrollAnimatorClients are ScrollbarClients, you can probably roll the former interface into the latter
2. Empty method implementations are written as { }, not {}
3. Consider using an enum type instead of bool for fromKeypress, to improve clarity of call sites that currently just pass &apos;false&apos; or &apos;true&apos;
4. changedSomething should be a bool&amp;, as it’s not allowed to be 0 anyway
5. We are trying to move away from passing 2D offsets and sizes as 2 ints, so setScrollOffsetsFromAnimation() should take a const IntSize&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172258</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 04:51:05 -0800</bug_when>
    <thetext>Attachment 44940 did not pass chromium-ews:
Full output: http://webkit-commit-queue.appspot.com/results/128553</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172295</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-16 07:50:17 -0800</bug_when>
    <thetext>Sorry for the noise.  This appears to be a bug in chromium-ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172416</commentid>
    <comment_count>28</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-16 11:06:32 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; 1. Since it turns out that all ScrollAnimatorClients are ScrollbarClients, you
&gt; can probably roll the former interface into the latter

OK.  I debated this and initially decided the current route was clearer, but thinking more, I think you&apos;re right, it would be better to just have ScrollbarClient.  (Added bonus: makes ScrollAnimator.h only contain one class, its namesake.)

&gt; 2. Empty method implementations are written as { }, not {}

Will fix.

&gt; 3. Consider using an enum type instead of bool for fromKeypress, to improve
&gt; clarity of call sites that currently just pass &apos;false&apos; or &apos;true&apos;

The tempting route if I go with an enum is to enumerate all sources (e.g. KEYPRESS, WHEEL, PANSCROLL, PROGRAMMATIC, etc.).  That would definitely add clarity.  My worry is that I might not know the right type everywhere.  Probably this is just due to me not knowing the code well enough.  I&apos;ll look into doing this.

&gt; 4. changedSomething should be a bool&amp;, as it’s not allowed to be 0 anyway

OK; should that be added to the style guide?  Right now it doesn&apos;t say anything about when to use one or the other (I&apos;m coming from a background of the Google style guide, which forbids non-const refs.)

&gt; 5. We are trying to move away from passing 2D offsets and sizes as 2 ints, so
&gt; setScrollOffsetsFromAnimation() should take a const IntSize&amp;

Will change, the reasons I originally wanted to do this didn&apos;t end up being all that serious.

One other bad thing about this patch is that it doesn&apos;t provide smooth scrolling to Safari/Win, which probably wants to use a similar algorithm (as I think dhyatt alluded to on IRC when we first chatted).  Maybe instead of having this as ChromiumWin I should just do it for Windows in general.  Not sure that all Windows ports (e.g. Chromium) use the win/ code though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172588</commentid>
    <comment_count>29</comment_count>
      <attachid>45025</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-16 16:57:26 -0800</bug_when>
    <thetext>Created attachment 45025
patch v3

Changes from the last patch:

* Addresses all mitz&apos; comments
* Adds modification to project.pbxproj for Mac build
* Makes implementation be used by all PLATFORM(OS_WIN) targets
* Minor tweaks to animator implementation for better comments and ability to handle autoscroll delays other than 0.05</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172590</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 17:00:22 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45025 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173037</commentid>
    <comment_count>31</comment_count>
      <attachid>45025</attachid>
    <who name="">mitz</who>
    <bug_when>2009-12-17 21:55:14 -0800</bug_when>
    <thetext>Comment on attachment 45025
patch v3

&gt; +    static ScrollAnimator* possiblyCreateWithClient(ScrollbarClient*);

I would like you to rename this method to “create”. We have a few static create() methods that may return 0, and we don’t call out that fact in the name. We also don’t specify the role of the parameter when it is implied by the type.

&gt; +    virtual bool possiblyAnimateScroll(ScrollDirection, ScrollGranularity, ScrollSource, float step, float multipliedStep, float maxPos, bool&amp; changedSomething) { return false; }

No surprise here: I would like to get rid of “possibly” (or at least move it to the end); since this is a ScrollAnimator method, animation is implied, so I would also get rid of “animate”. At the same time, I feel that the meanings of the return value and of changedSomething aren’t clear enough. I *think* changedSomething says whether the scroll offset will change (although it doesn’t actually change by the time the method returns), whereas the return value says whether the requested scroll is animatable.

It looks like anyone calling this method actually wants scrolling to occur (if needed), whether animated or not, i.e. if this method returns false, the caller is just going to do an immediate scroll. I like that the animator decides whether to animate, but I don’t think the caller should care about the decision. If the animator decides not to animate (which yours does in the scroll-by-document case), it should just do an immediate scroll (or infinite-velocity animated scroll).

So here’s the first draft of this API that I’d suggest:
    // Computes a scroll destination for the given parameters. Returns false if already at the destination. Otherwise, starts scrolling towards the destination
    // and returns true. Scrolling may be immediate or animated.
    virtual bool scroll(ScrollDirection, ScrollGranularity, ScrollSource, float step, float multipliedStep, float maxPos);

But I’d rather see a multiplier instead of a multipliedStep. It bothers me that ScrollDirection is only used to determine the axis (because the direction along the axis is given by the multiplier). We can use the ScrollbarOrientation enum to indicate the axis (maybe rename it to ScrollAxis someday). Finally, I don’t think the caller should precompute maxPos (why is it a float?) and pass it down here. We can add a ScrollbarClient method (virtual IntSize scrollSize() const;) to return the max offsets.

So here’s the second draft:
    // Computes a scroll destination for the given parameters. Returns false if already at the destination. Otherwise, starts scrolling towards the destination
    // and returns true. Scrolling may be immediate or animated.
    virtual bool scroll(ScrollbarOrientation, ScrollGranularity, ScrollSource, float step, int multiplier);

&gt; +    virtual void setScrollPositionAndStopAnimation(ScrollbarOrientation, float) { }

I was expecting something like
    // Stops animated scrolling if it is in progress.
    virtual void stop();

I need to keep reading to understand how setScrollPositionAndStopAnimation() works. Who would want to stop animation along one axis and not the other? Why does the caller need to pass a float (0..1) position? I’ll keep reading and see.

I’m skipping ScrollAnimatorWin for now. Except
&gt; +    // This is an animatible scroll.  Calculate the scroll delta.
s/animatible/animatable/

&gt; +        ScrollbarPartOrMenu,  // &quot;Scrollbar&quot; alone clashes with the class name
But what does “OrMenu” mean?

&gt; +void ScrollView::setScrollOffsetFromAnimation(const IntPoint&amp; offset)
&gt; +{
&gt; +    if (m_horizontalScrollbar)
&gt; +        m_horizontalScrollbar-&gt;setValue(offset.x(), true);
&gt; +    if (m_verticalScrollbar)
&gt; +        m_verticalScrollbar-&gt;setValue(offset.y(), true);
&gt; +}
&gt; +

We’ll want things without scrollbars to be able to scroll smoothly. Going through the scrollbars won’t do.

&gt; -        scrollBy(IntSize(-deltaX, -deltaY));
&gt; +
&gt; +        // Should we fall back on scrollBy() if there is no scrollbar for a non-zero delta?
&gt; +        if (deltaY &amp;&amp; m_verticalScrollbar)
&gt; +            m_verticalScrollbar-&gt;scroll(ScrollUp, ScrollByPixel, Wheel, deltaY);
&gt; +        if (deltaY &amp;&amp; m_horizontalScrollbar)
&gt; +            m_horizontalScrollbar-&gt;scroll(ScrollLeft, ScrollByPixel, Wheel, deltaX);

This is introducing dependency on scrollbars.

&gt; -    bool setValue(int);
&gt; +    bool setValue(int, bool fromScrollAnimation);

So I don’t think this is the best distinction to make. Instead, you want to distinguish between the case where the change comes from the client (driven by smooth-scrolling animation, by drag-to-scroll auto animation, or whatever) and the other case, where the change needs to go to the client. Currently I see things like RenderLayer’s valueChanged() implementation having to pass a boolean to its scrollToOffset() method so that it will not call back into the scrollbars. Seems like we have an opportunity to fix this.

I don’t have time to finish this review right now, but I wanted to let you know what my thoughts were so far. The most troubling issue is that in our existing code, scrolling is driven by Scrollbar even when it is not initiated by a scrollbar, which makes it difficult to let ScrollAnimator drive scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173046</commentid>
    <comment_count>32</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-12-17 22:26:27 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 45025 [details])
&gt; &gt; +    static ScrollAnimator* possiblyCreateWithClient(ScrollbarClient*);
&gt; 
&gt; I would like you to rename this method to “create”.

Will rename.

&gt; &gt; +    virtual bool possiblyAnimateScroll(ScrollDirection, ScrollGranularity, ScrollSource, float step, float multipliedStep, float maxPos, bool&amp; changedSomething) { return false; }
&gt; 
&gt; It looks like anyone calling this method actually wants scrolling to occur (if
&gt; needed), whether animated or not, i.e. if this method returns false, the caller
&gt; is just going to do an immediate scroll. I like that the animator decides
&gt; whether to animate, but I don’t think the caller should care about the
&gt; decision. If the animator decides not to animate (which yours does in the
&gt; scroll-by-document case), it should just do an immediate scroll (or
&gt; infinite-velocity animated scroll).

OK.

&gt; But I’d rather see a multiplier instead of a multipliedStep. It bothers me that
&gt; ScrollDirection is only used to determine the axis (because the direction along
&gt; the axis is given by the multiplier). We can use the ScrollbarOrientation enum
&gt; to indicate the axis (maybe rename it to ScrollAxis someday).

OK.

&gt; Finally, I don’t
&gt; think the caller should precompute maxPos (why is it a float?) and pass it down
&gt; here. We can add a ScrollbarClient method (virtual IntSize scrollSize() const;)
&gt; to return the max offsets.

This means all ScrollbarClients will have to keep this value around, right?  Right now only the Scrollbar has it stored, in the form of the m_totalSize and m_visibleSize members, which get set by the setProportion() function.  Most uses of these could be removed and converted to calls to m_client-&gt;scrollSize(), removing the setProportion() function as well, but there&apos;s one use of m_totalSize to calculate the scroll step for ScrollByDocument.  Maybe that can also be changed to a call to scrollSize(), however, since the total scroll can&apos;t exceed that?...

&gt; I was expecting something like
&gt;     // Stops animated scrolling if it is in progress.
&gt;     virtual void stop();
&gt; 
&gt; I need to keep reading to understand how setScrollPositionAndStopAnimation()
&gt; works.

When something directs the scrollbar to do a non-animated scroll to a particular position, we need to stop the animation; but because the ScrollAnimator also has to track the current position in order to know how to animate when the next animated scroll appears, we also have to mirror that value over.

This is a mess.  If ScrollAnimator drove everything, and Scrollbar was much dumber, we could avoid this.  To accomplish this we&apos;d need to modify the code that calls setValue() and have it call the ScrollAnimator, as well as fixing the issues you note below with the scrollbar driving the scroll.

&gt; Who would want to stop animation along one axis and not the other?

I&apos;m not sure.  I wanted to avoid thinking deeply about this case for the moment and just add animation to the current axis-independent interface.  I was hoping to tackle issues like this in a second pass, perhaps.

&gt; Why
&gt; does the caller need to pass a float (0..1) position?

It&apos;s not 0..1.  It&apos;s on the same scale that is used to pass (integer) scroll offsets to the ScrollbarClient.  It&apos;s just that the Scrollbar/ScrollAnimator keep a more precise representation to avoid building up errors due to rounding.

&gt; &gt; +    // This is an animatible scroll.  Calculate the scroll delta.
&gt; s/animatible/animatable/

Are you sure?  I looked both up in a few dictionaries when writing this (because it bugged me too!) and couldn&apos;t find either, but Google had a lot more results for &quot;animatible&quot;...

&gt; &gt; +        ScrollbarPartOrMenu,  // &quot;Scrollbar&quot; alone clashes with the class name
&gt; But what does “OrMenu” mean?

The scrollbar context menu.  In the Qt port and Windows native (although this isn&apos;t implemented in Chromium/Win, dunno if it&apos;s in Safari/Win), scrollbars have a context menu.  Look through the patch for the uses of this value.

The name sucks, but &quot;ScrollbarPart&quot; alone felt misleading...

&gt; &gt; +void ScrollView::setScrollOffsetFromAnimation(const IntPoint&amp; offset)
&gt; &gt; +{
&gt; &gt; +    if (m_horizontalScrollbar)
&gt; &gt; +        m_horizontalScrollbar-&gt;setValue(offset.x(), true);
&gt; &gt; +    if (m_verticalScrollbar)
&gt; &gt; +        m_verticalScrollbar-&gt;setValue(offset.y(), true);
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; We’ll want things without scrollbars to be able to scroll smoothly. Going
&gt; through the scrollbars won’t do.

But right now, no scrolling happens except what goes through scrollbars.  This doesn&apos;t make the situation worse.

I agree with you about the ideal design goals.  I&apos;m reluctant to try and rearchitect scrolling entirely in the same patch where I&apos;m adding scroll animation.  Can we take things in stages?

&gt; &gt; -        scrollBy(IntSize(-deltaX, -deltaY));
&gt; &gt; +
&gt; &gt; +        // Should we fall back on scrollBy() if there is no scrollbar for a non-zero delta?
&gt; &gt; +        if (deltaY &amp;&amp; m_verticalScrollbar)
&gt; &gt; +            m_verticalScrollbar-&gt;scroll(ScrollUp, ScrollByPixel, Wheel, deltaY);
&gt; &gt; +        if (deltaY &amp;&amp; m_horizontalScrollbar)
&gt; &gt; +            m_horizontalScrollbar-&gt;scroll(ScrollLeft, ScrollByPixel, Wheel, deltaX);
&gt; 
&gt; This is introducing dependency on scrollbars.

Yes... but much of the scrolling capability in this file already depends on them.  If I don&apos;t do this, then wheel scrolls never reach the ScrollAnimator.

Again, this is entangled in how the Scrollbar drives most scrolling, except when it doesn&apos;t.  I admit to being a bit confused about how ScrollView works here, but fixing it in this patch, as I said above, scares me.  Maybe you understand the problem better and are more confident of the fix...

&gt; &gt; -    bool setValue(int);
&gt; &gt; +    bool setValue(int, bool fromScrollAnimation);
&gt; 
&gt; So I don’t think this is the best distinction to make. Instead, you want to
&gt; distinguish between the case where the change comes from the client (driven by
&gt; smooth-scrolling animation, by drag-to-scroll auto animation, or whatever) and
&gt; the other case, where the change needs to go to the client. Currently I see
&gt; things like RenderLayer’s valueChanged() implementation having to pass a
&gt; boolean to its scrollToOffset() method so that it will not call back into the
&gt; scrollbars. Seems like we have an opportunity to fix this.

If we&apos;re mucking with this, then it seems like the ideal end stage is that all changes come from the client, and none go to the client; that is, that the ScrollAnimator drives all scrolling and the Scrollbar merely displays the results on its thumb, and notifies the ScrollAnimator of any input events it sees directly.

&gt; I don’t have time to finish this review right now, but I wanted to let you know
&gt; what my thoughts were so far.

Thanks!

&gt; The most troubling issue is that in our existing
&gt; code, scrolling is driven by Scrollbar even when it is not initiated by a
&gt; scrollbar, which makes it difficult to let ScrollAnimator drive scrolling.

Yes!  This was what I first alluded to at the end of comment 19 paragraph 2.

What a mess!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175192</commentid>
    <comment_count>33</comment_count>
      <attachid>45025</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-28 01:41:03 -0800</bug_when>
    <thetext>Comment on attachment 45025
patch v3

Marking r- per prior comments, so this doesn&apos;t clog the queue. It&apos;s clear more review is needed but at least the already mentioned issues should be fixed in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219225</commentid>
    <comment_count>34</comment_count>
      <attachid>54744</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-04-29 15:46:19 -0700</bug_when>
    <thetext>Created attachment 54744
patch v3.1

Resurrecting this.  First step: updated the previous patch to apply against current trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268801</commentid>
    <comment_count>35</comment_count>
      <attachid>65325</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-24 14:34:45 -0700</bug_when>
    <thetext>Created attachment 65325
patch v3.2

Resurrecting the old patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269420</commentid>
    <comment_count>36</comment_count>
      <attachid>65459</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-25 11:57:34 -0700</bug_when>
    <thetext>Created attachment 65459
patch v4.0

This patch implements some of the requests from comment 31.  Specifically, all the changes to the signatures of create() (formerly possiblyCreateWithClient()) and scroll() (formerly possiblyAnimateScroll()) have been made.  One of the requested changes, the addition of a ScrollbarClient::scrollSize() function, seems kind of like unnecessary extra plumbing to me at this stage, given that the old method with the scroll() caller providing a |maxPos| was easy to do since that function only has one caller.  However, maybe it is a step toward a better scrolling implementation.

Additionally, this makes all clients have a ScrollAnimator, which by default does no animation.  This makes the scrolling model slightly more consistent and thus less confusing.

I did not make major changes to ScrollView, such as trying to re-plumb scrolling to not go through the scrollbars.  If we want to do that, I think we need to redesign the entire flow for scrolling as a separate patch, rather than do it in this.  I don&apos;t think that should gate this landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269425</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-25 11:59:52 -0700</bug_when>
    <thetext>Attachment 65459 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/ScrollView.cpp:278:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/ScrollView.cpp:279:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/ScrollAnimator.h:60:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/ScrollAnimator.h:61:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/ScrollAnimator.cpp:58:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebCore/rendering/RenderDataGrid.cpp:175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/ScrollTypes.h:48:  One space before end of line comments  [whitespace/comments] [5]
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebpage.cpp&quot;
WebCore/rendering/RenderListBox.cpp:528:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/rendering/RenderLayer.cpp:1623:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/rendering/RenderLayer.cpp:1624:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/win/PopupMenuWin.cpp:669:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/public/WebScrollbar.h:65:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 12 in 52 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269427</commentid>
    <comment_count>38</comment_count>
      <attachid>65461</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-25 12:05:35 -0700</bug_when>
    <thetext>Created attachment 65461
patch v4.1

Fix style errors.  Thanks MSVC for re-indenting my lines like I didn&apos;t want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269439</commentid>
    <comment_count>39</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-25 12:30:03 -0700</bug_when>
    <thetext>Attachment 65461 did not build on qt:
Build output: http://queues.webkit.org/results/3787495</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269441</commentid>
    <comment_count>40</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-25 12:43:30 -0700</bug_when>
    <thetext>Attachment 65461 did not build on mac:
Build output: http://queues.webkit.org/results/3766620</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269443</commentid>
    <comment_count>41</comment_count>
      <attachid>65463</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-25 12:47:04 -0700</bug_when>
    <thetext>Created attachment 65463
patch v4.2

Fix Qt and Mac compile errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269462</commentid>
    <comment_count>42</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-25 13:23:35 -0700</bug_when>
    <thetext>Attachment 65463 did not build on mac:
Build output: http://queues.webkit.org/results/3793393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269464</commentid>
    <comment_count>43</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-25 13:23:58 -0700</bug_when>
    <thetext>Attachment 65463 did not build on qt:
Build output: http://queues.webkit.org/results/3789535</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269488</commentid>
    <comment_count>44</comment_count>
      <attachid>65471</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-25 14:06:55 -0700</bug_when>
    <thetext>Created attachment 65471
patch v4.3

Fix more Qt errors; guess at Mac errors (scrolled off EWS output :( )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269513</commentid>
    <comment_count>45</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-25 14:37:29 -0700</bug_when>
    <thetext>Attachment 65471 did not build on mac:
Build output: http://queues.webkit.org/results/3753647</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269514</commentid>
    <comment_count>46</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-25 14:40:36 -0700</bug_when>
    <thetext>Attachment 65471 did not build on qt:
Build output: http://queues.webkit.org/results/3769692</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269572</commentid>
    <comment_count>47</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-25 15:58:34 -0700</bug_when>
    <thetext>Hmm.  I bet I can do this without plumbing scroll sources everywhere.  Re-reading my patch more closely (because I wrote the darn thing more than 8 months ago), I think the only real reason I need them is to determine whether the source is &quot;scrollbar autorepeat timer&quot; or &quot;everything else&quot;.  I can do that with a small subset of the existing code.

However, there&apos;s an open question as to whether &quot;programmatic&quot; scrolls should ever be smooth-scrolled.  It&apos;s reasonable to say no, in which case I still do need some form of this plumbing so I can distinguish these two types of scrolling.  Or I need to somehow change these to call setValue() instead of scroll()...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269613</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-25 17:00:39 -0700</bug_when>
    <thetext>Attachment 65471 did not build on chromium:
Build output: http://queues.webkit.org/results/3809047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269679</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-25 19:23:01 -0700</bug_when>
    <thetext>Attachment 65471 did not build on gtk:
Build output: http://queues.webkit.org/results/3772657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270072</commentid>
    <comment_count>50</comment_count>
      <attachid>65609</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-26 13:22:13 -0700</bug_when>
    <thetext>Created attachment 65609
patch v5.0

After thinking about the math some more, I realized my current implementation doesn&apos;t actually need command sources at all.  So this patch removes that plumbing entirely.  Yay simplification!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270087</commentid>
    <comment_count>51</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-26 13:40:39 -0700</bug_when>
    <thetext>Attachment 65609 did not build on mac:
Build output: http://queues.webkit.org/results/3770738</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270092</commentid>
    <comment_count>52</comment_count>
      <attachid>65613</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-26 13:44:38 -0700</bug_when>
    <thetext>Created attachment 65613
patch v5.1

Fix Mac compile break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270107</commentid>
    <comment_count>53</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-26 14:08:54 -0700</bug_when>
    <thetext>Attachment 65613 did not build on mac:
Build output: http://queues.webkit.org/results/3746702</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270110</commentid>
    <comment_count>54</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-26 14:13:47 -0700</bug_when>
    <thetext>Attachment 65613 did not build on qt:
Build output: http://queues.webkit.org/results/3793426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270152</commentid>
    <comment_count>55</comment_count>
      <attachid>65627</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-26 15:24:24 -0700</bug_when>
    <thetext>Created attachment 65627
patch v5.2

I&apos;m not sure what the Qt error is caused by.  This should fix the Mac error by only forward-declaring ScrollAnimator in ScrollbarClient.h, and moving functions that need the definition to a new ScrollbarClient.cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270164</commentid>
    <comment_count>56</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-26 15:39:34 -0700</bug_when>
    <thetext>Attachment 65627 did not build on qt:
Build output: http://queues.webkit.org/results/3725700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270192</commentid>
    <comment_count>57</comment_count>
      <attachid>65640</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-26 16:10:00 -0700</bug_when>
    <thetext>Created attachment 65640
patch v5.3

OK, added changes to CMakeLists.txt and WebCore.pro, fingers crossed that I did it correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272507</commentid>
    <comment_count>58</comment_count>
      <attachid>66142</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-31 16:55:32 -0700</bug_when>
    <thetext>Created attachment 66142
patch v5.4

Changes setValue() and setCurentPos() from taking a bool to taking an enum at hyatt&apos;s request in IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272509</commentid>
    <comment_count>59</comment_count>
      <attachid>66142</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-08-31 16:56:52 -0700</bug_when>
    <thetext>Comment on attachment 66142
patch v5.4

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272518</commentid>
    <comment_count>60</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-31 17:09:22 -0700</bug_when>
    <thetext>Attachment 66142 did not build on mac:
Build output: http://queues.webkit.org/results/3885200</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272529</commentid>
    <comment_count>61</comment_count>
      <attachid>66148</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-31 17:34:17 -0700</bug_when>
    <thetext>Created attachment 66148
patch v5.5

Fix compile failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272534</commentid>
    <comment_count>62</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-31 17:47:01 -0700</bug_when>
    <thetext>Attachment 66148 did not build on qt:
Build output: http://queues.webkit.org/results/3907002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272535</commentid>
    <comment_count>63</comment_count>
      <attachid>66150</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-31 17:47:47 -0700</bug_when>
    <thetext>Created attachment 66150
patch v5.6

Fix other compile errors that I didn&apos;t catch because they weren&apos;t built for Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272537</commentid>
    <comment_count>64</comment_count>
      <attachid>66152</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-08-31 17:48:30 -0700</bug_when>
    <thetext>Created attachment 66152
patch v5.7

Hmm, upload was incomplete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272881</commentid>
    <comment_count>65</comment_count>
      <attachid>66152</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-01 10:32:36 -0700</bug_when>
    <thetext>Comment on attachment 66152
patch v5.7

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272927</commentid>
    <comment_count>66</comment_count>
      <attachid>66152</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-01 12:17:21 -0700</bug_when>
    <thetext>Comment on attachment 66152
patch v5.7

Rejecting patch 66152 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--wait-for-httpd&apos;, &apos;--ignore-tests&apos;, &apos;compositing,media&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 20893 test cases.
fast/events/continuous-platform-wheelevent-in-scrolling-div.html -&gt; failed

Exiting early after 1 failures. 7160 tests run.
142.72s total testing time

7159 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout

Full output: http://queues.webkit.org/results/3956028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274940</commentid>
    <comment_count>67</comment_count>
      <attachid>66142</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-07 03:20:55 -0700</bug_when>
    <thetext>Comment on attachment 66142
patch v5.4

Cleared David Hyatt&apos;s review+ from obsolete attachment 66142 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275273</commentid>
    <comment_count>68</comment_count>
      <attachid>66762</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-09-07 14:03:08 -0700</bug_when>
    <thetext>Created attachment 66762
patch v5.8

Helps when you don&apos;t accidentally delete an important block of code when merging in the latest svn update...

This also fixes a bug where horizontal wheel events would be ignored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275337</commentid>
    <comment_count>69</comment_count>
      <attachid>66762</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-07 15:24:24 -0700</bug_when>
    <thetext>Comment on attachment 66762
patch v5.8

Rejecting patch 66762 from commit-queue.

Unexpected failure when processing patch!  Please file a bug against webkit-patch.
Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--build&apos;, &apos;--non-interactive&apos;, &apos;--ignore-builders&apos;, &apos;--build-style=both&apos;, &apos;--quiet&apos;, 66762, &apos;--test&apos;, &apos;--parent-command=commit-queue&apos;, &apos;--no-update&apos;]&quot; exit_code: 1
Last 500 characters of output:
bkit.org/attachment.cgi?id=66762&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=32356&amp;ctype=xml
Processing 1 patch from 1 bug.
Cleaning working directory
Processing patch 66762 from bug 32356.
Dave Hyatt found in /Users/eseidel/Projects/CommitQueue/ChangeLog does not appear to be a valid reviewer according to committers.py.
ERROR: /Users/eseidel/Projects/CommitQueue/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275347</commentid>
    <comment_count>70</comment_count>
      <attachid>66777</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-09-07 15:39:41 -0700</bug_when>
    <thetext>Created attachment 66777
patch v5.9

For crying out loud.  &quot;Dave&quot; -&gt; &quot;David&quot; for the commit bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275352</commentid>
    <comment_count>71</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-07 15:46:42 -0700</bug_when>
    <thetext>FYI, you can use &quot;webkit-patch land-safely&quot; to automatically fill in the reviewer and then have it upload your current patch for commit.  Adam and I use that command when making small last-minute edits like these.  I guess I never think about the dave vs. david question because webkit-patch always fills in the reviewer for me these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275711</commentid>
    <comment_count>72</comment_count>
      <attachid>66152</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-08 03:18:10 -0700</bug_when>
    <thetext>Comment on attachment 66152
patch v5.7

Cleared David Hyatt&apos;s review+ from obsolete attachment 66152 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275932</commentid>
    <comment_count>73</comment_count>
      <attachid>66777</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-09-08 10:51:55 -0700</bug_when>
    <thetext>Comment on attachment 66777
patch v5.9

Forgot to mark this as &quot;patch&quot;, no wonder it didn&apos;t land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275993</commentid>
    <comment_count>74</comment_count>
      <attachid>66777</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-08 12:32:15 -0700</bug_when>
    <thetext>Comment on attachment 66777
patch v5.9

Clearing flags on attachment: 66777

Committed r67001: &lt;http://trac.webkit.org/changeset/67001&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275994</commentid>
    <comment_count>75</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-08 12:32:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276011</commentid>
    <comment_count>76</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 12:56:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67001 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278362</commentid>
    <comment_count>77</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-13 11:56:28 -0700</bug_when>
    <thetext>FYI:  I checked in a change to add a compile time option for this, and it is now disabled by default on all platforms.

See https://bugs.webkit.org/show_bug.cgi?id=45689</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278457</commentid>
    <comment_count>78</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-09-13 13:59:49 -0700</bug_when>
    <thetext>Thanks Darin!  (I asked Darin to do this for me as a few issues came up and I&apos;m on vacation for a week.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44720</attachid>
            <date>2009-12-11 18:37:45 -0800</date>
            <delta_ts>2009-12-11 18:48:50 -0800</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>48953</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1NiBAQAorMjAwOS0xMi0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
IFBsdW1iIGEgd2F5IHRvIGF2b2lkIHF1ZXVlaW5nIHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRv
cmVwZWF0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KToKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOiBQbHVtYiBhIHdheSB0byBhdm9pZCBxdWV1ZWlu
ZyBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9t
IGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBhIHdheSB0byBhdm9pZCBxdWV1ZWluZyBz
Y3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpTY3JvbGxiYXIpOiBJbml0
IG5ld2x5LWFkZGVkIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNj
cm9sbGJhcik6IFN0b3Agc21vb3RoIHNjcm9sbCB0aW1lciBhcyB3ZWxsIGFzIGV4aXN0aW5nIGF1
dG9zY3JvbGwgdGltZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVlKTog
U3RvcCBzbW9vdGggc2Nyb2xsaW5nIGlmIGEgY2FsbGVyIHNldHMgdGhlIHNjcm9sbCBwb3NpdGlv
biBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKTogU21vb3Ro
IHNjcm9sbCBpZiBkZXNpcmVkLiAgQXZvaWQgcXVldWVpbmcgZXh0cmEgc2Nyb2xscyBmb3Iga2V5
Ym9hcmQgYXV0b3JlcGVhdCB3aGVuIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnBhaW50KTogUmVtb3ZlIHdoaXRlc3BhY2Ugb24gZW1wdHkgbGluZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KTogUmVuYW1l
IGV4aXN0aW5nICJ0aW1lciIgbmFtZXMgdG8gImF1dG9zY3JvbGxUaW1lciIuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OnN0YXJ0QXV0b3Njcm9sbFRpbWVySWZOZWVkZWQpOiBSZW5hbWUg
ZXhpc3RpbmcgInRpbWVyIiBuYW1lcyB0byAiYXV0b3Njcm9sbFRpbWVyIi4gIEF1dG9zY3JvbGwg
ZGVzaXJlZCBwb3MgcmF0aGVyIHRoYW4gY3VycmVudCBwb3MgaWYgc21vb3RoIHNjcm9sbGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3RvcEF1dG9zY3JvbGxUaW1lcklmTmVlZGVk
KTogUmVuYW1lIGV4aXN0aW5nICJ0aW1lciIgbmFtZXMgdG8gImF1dG9zY3JvbGxUaW1lciIuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNtb290aFNjcm9sbFRpbWVyRmlyZWQpOiBDYWxs
YmFjayB0byBwZXJmb3JtIHNtb290aCBzY3JvbGxpbmcgb24gYW4gYW5pbWF0aW9uIHRpbWVyLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdG9wU21vb3RoU2Nyb2xsVGltZXJJZk5lZWRl
ZCk6IFBhcmFsbGVsIHRvIHN0b3BBdXRvc2Nyb2xsVGltZXJJZk5lZWRlZCgpLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyOjpzbW9vdGhTY3JvbGwpOiBQZXJmb3JtIGEgc2luZ2xlIHNtb290
aCBzY3JvbGwgaW5jcmVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1
bWIpOiBTdG9wIHNtb290aCBzY3JvbGxpbmcgaWYgdGhlIHVzZXIgbW92ZXMgdGhlIHRodW1iIG1h
bnVhbGx5LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKTogQWRk
IGhvb2sgdG8gc3RvcC9yZXNldCBzbW9vdGggc2Nyb2xsaW5nIGlmIGRlc2lyZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldERlc2lyZWRQb3MpOiBTZXQgdXAgc21vb3RoIHNjcm9s
bGluZyB2YXJpYWJsZXMgYW5kIGJlZ2luIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOiBTdG9wIHNtb290aCBzY3JvbGxpbmcgaWYgdGhl
IHVzZXIgc25hcHMgdGhlIHRodW1iIGJhY2suICBSZW5hbWUgZXhpc3RpbmcgInRpbWVyIiBuYW1l
cyB0byAiYXV0b3Njcm9sbFRpbWVyIi4gIFJlbW92ZSB3aGl0ZXNwYWNlIG9uIGVtcHR5IGxpbmUu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlVXApOiBSZW5hbWUgZXhpc3Rpbmcg
InRpbWVyIiBuYW1lcyB0byAiYXV0b3Njcm9sbFRpbWVyIi4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6bW91c2VEb3duKTogUmVtb3ZlIHdoaXRlc3BhY2Ugb24gZW1wdHkgbGluZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVp
bmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuICBSZW5hbWUgZXhpc3RpbmcgInRp
bWVyIiBuYW1lcyB0byAiYXV0b3Njcm9sbFRpbWVyIi4gIEFkZCBiaXRzIGZvciBzbW9vdGggc2Ny
b2xsaW5nLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6IEFkZCBwbGF0Zm9y
bS1zcGVjaWZpYyBjb250cm9sIGhvb2tzIGZvciBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnNtb290aFNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZTo6c21vb3RoU2Nyb2xsVGltZXJEZWxheSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZTo6c21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9uVGltZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFBsdW1iIGEgd2F5IHRvIGF2b2lkIHF1ZXVl
aW5nIHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRvcmVwZWF0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDogUGx1
bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBl
YXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogUGx1bWIgYSB3YXkgdG8g
YXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9tIGtl
eWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OiBQbHVtYiBhIHdheSB0byBhdm9pZCBxdWV1ZWluZyBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0
b3JlcGVhdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVl
dWVpbmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmg6IEFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBjb250cm9s
IGhvb2tzIGZvciBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Ny
b2xsYmFyVGhlbWU6OnNtb290aFNjcm9sbFRpbWVyRGVsYXkpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOiBQbHVtYiBhIHdheSB0byBhdm9pZCBx
dWV1ZWluZyBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6IFBsdW1iIGEgd2F5IHRvIGF2b2lk
IHF1ZXVlaW5nIHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRvcmVwZWF0LgorCiAyMDA5LTEyLTEx
ICBTaGluaWNoaXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lv
biA1MjAzNikKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MDIsNyArOTAyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NOb2Rl
KFBhcwogICAgIG1fbW91c2VQcmVzc05vZGUgPSBub2RlOwogfQogCi1ib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykKIHsKICAgICBOb2RlKiBub2RlID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCkBAIC05MTAsNyArOTEw
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAg
IGlmIChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7
Ci0gICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5p
c0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIDEuMGYsIGFsbG93VW5saW1pdGVkUXVldWVpbmcpKSB7CiAgICAgICAgICAgICBzZXRG
cmFtZVdhc1Njcm9sbGVkQnlVc2VyKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtOTE5LDE0ICs5MTksMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJm
bG93KFNjcm9sbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnNj
cm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KQorYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBi
b29sIGFsbG93VW5saW1pdGVkUXVldWVpbmcpCiB7Ci0gICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xs
T3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgYm9vbCBoYW5kbGVkID0gc2Ny
b2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWlu
Zyk7CiAgICAgaWYgKCFoYW5kbGVkKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7
CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3
KCk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdmlldyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5KSA6IGZhbHNlOworICAgICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykg
OiBmYWxzZTsKICAgICAgICAgICAgIGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAg
ICAgICAgIH0gd2hpbGUgKCFoYW5kbGVkICYmIGZyYW1lKTsKICAgICAgfQpJbmRleDogV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDkgKzEyMCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqKTsKIAotICAgIGJvb2wgc2Nyb2xs
T3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBz
Y3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBib29sIGFs
bG93VW5saW1pdGVkUXVldWVpbmcgPSB0cnVlKTsKIAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGxS
ZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBib29sIGFsbG93
VW5saW1pdGVkUXVldWVpbmcgPSB0cnVlKTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAg
ICAgYm9vbCBzaG91bGREcmFnQXV0b05vZGUoTm9kZSosIGNvbnN0IEludFBvaW50JikgY29uc3Q7
IC8vIC13ZWJraXQtdXNlci1kcmFnID09IGF1dG8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMywxNyArMzEzLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QKICAgICB1cGRhdGVTY3JvbGxiYXJzKEludFNpemUobmV3U2Ny
b2xsUG9zaXRpb24ueCgpLCBuZXdTY3JvbGxQb3NpdGlvbi55KCkpKTsKIH0KIAotYm9vbCBTY3Jv
bGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCitib29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBhbGxvd1VubGlt
aXRlZFF1ZXVlaW5nKQogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1
cm4gcGxhdGZvcm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAKICAgICBpZiAoZGly
ZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7CiAgICAgICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
MS4wZiwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCAxLjBmLCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtNjc3LDcgKzY3NywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlCiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgZGVs
dGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0
YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIHNjcm9s
bEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRlbHRhPworICAg
ICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7
CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhl
bCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlz
aW9uIDUyMDM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxSZWN0SW50b1Zp
ZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0Jik7CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2Qg
c2Nyb2xscyBieSBsaW5lcywgcGFnZXMgb3IgcGl4ZWxzLgotICAgIGJvb2wgc2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyA9
IHRydWUpOwogICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0
aGUgdmlldyAoZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgogICAg
IHZvaWQgc2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCisjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTcsNiArNTgsOSBAQCBTY3JvbGxiYXI6OlNjcm9s
bGJhcihTY3JvbGxiYXJDbGllbnQqIGNsCiAgICAgLCBtX3Zpc2libGVTaXplKDApCiAgICAgLCBt
X3RvdGFsU2l6ZSgwKQogICAgICwgbV9jdXJyZW50UG9zKDApCisgICAgLCBtX2Rlc2lyZWRQb3Mo
MCkKKyAgICAsIG1fc21vb3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX3Ntb290
aFNjcm9sbERlc2lyZWRWZWxvY2l0eSgwKQogICAgICwgbV9kcmFnT3JpZ2luKDApCiAgICAgLCBt
X2xpbmVTdGVwKDApCiAgICAgLCBtX3BhZ2VTdGVwKDApCkBAIC02NSw3ICs2OSw4IEBAIFNjcm9s
bGJhcjo6U2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2wKICAgICAsIG1fcHJlc3NlZFBhcnQo
Tm9QYXJ0KQogICAgICwgbV9wcmVzc2VkUG9zKDApCiAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKLSAg
ICAsIG1fc2Nyb2xsVGltZXIodGhpcywgJlNjcm9sbGJhcjo6YXV0b3Njcm9sbFRpbWVyRmlyZWQp
CisgICAgLCBtX2F1dG9zY3JvbGxUaW1lcih0aGlzLCAmU2Nyb2xsYmFyOjphdXRvc2Nyb2xsVGlt
ZXJGaXJlZCkKKyAgICAsIG1fc21vb3RoU2Nyb2xsVGltZXIodGhpcywgJlNjcm9sbGJhcjo6c21v
b3RoU2Nyb2xsVGltZXJGaXJlZCkKICAgICAsIG1fb3ZlcmxhcHNSZXNpemVyKGZhbHNlKQogICAg
ICwgbV9zdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSkKIHsKQEAgLTgzLDggKzg4LDkgQEAgU2Ny
b2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbAogCiBTY3JvbGxiYXI6On5TY3Jv
bGxiYXIoKQogewotICAgIHN0b3BUaW1lcklmTmVlZGVkKCk7Ci0gICAgCisgICAgc3RvcEF1dG9z
Y3JvbGxUaW1lcklmTmVlZGVkKCk7CisgICAgc3RvcFNtb290aFNjcm9sbFRpbWVySWZOZWVkZWQo
KTsKKwogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3JvbGxiYXIodGhpcyk7CiB9CiAKQEAgLTkz
LDcgKzk5LDcgQEAgYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQogICAgIHYgPSBtYXgo
bWluKHYsIG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSksIDApOwogICAgIGlmICh2YWx1ZSgp
ID09IHYpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gT3VyIHZhbHVlIHN0YXllZCB0aGUgc2Ft
ZS4KLSAgICBzZXRDdXJyZW50UG9zKHYpOworICAgIHNldEN1cnJlbnRQb3ModiwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNSwyNiArMTIxLDQxIEBAIHZvaWQgU2Nyb2xsYmFy
OjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhl
bHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBhbGxvd1Vu
bGltaXRlZFF1ZXVlaW5nKQogewogICAgIGZsb2F0IHN0ZXAgPSAwOwogICAgIGlmICgoZGlyZWN0
aW9uID09IFNjcm9sbFVwICYmIG1fb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHx8
IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpKQotICAgICAgICBzdGVwID0gLTE7CisgICAgICAgIHN0ZXAgPSAtbXVsdGlwbGll
cjsKICAgICBlbHNlIGlmICgoZGlyZWN0aW9uID09IFNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCAmJiBt
X29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpKSAKLSAgICAgICAgc3RlcCA9IDE7
Ci0gICAgCi0gICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5TGluZSkKLSAgICAgICAgc3Rl
cCAqPSBtX2xpbmVTdGVwOwotICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGFn
ZSkKLSAgICAgICAgc3RlcCAqPSBtX3BhZ2VTdGVwOwotICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5
ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHN0ZXAgPSBtdWx0aXBsaWVyOworCisgICAg
ZmxvYXQgc21vb3RoU2Nyb2xsU3RlcCA9IDA7CisgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9s
bEJ5RG9jdW1lbnQpCiAgICAgICAgIHN0ZXAgKj0gbV90b3RhbFNpemU7CiAgICAgZWxzZSBpZiAo
Z3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKICAgICAgICAgc3RlcCAqPSBtX3BpeGVsU3Rl
cDsKLSAgICAgICAgCi0gICAgZmxvYXQgbmV3UG9zID0gbV9jdXJyZW50UG9zICsgc3RlcCAqIG11
bHRpcGxpZXI7Ci0gICAgZmxvYXQgbWF4UG9zID0gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXpl
OwotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obmV3UG9zLCBtYXhQb3MpLCAwLjBm
KSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmUp
CisgICAgICAgICAgICBzbW9vdGhTY3JvbGxTdGVwID0gbV9saW5lU3RlcDsKKyAgICAgICAgZWxz
ZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQYWdlKQorICAgICAgICAgICAgc21vb3RoU2Ny
b2xsU3RlcCA9IG1fcGFnZVN0ZXA7CisgICAgICAgIHN0ZXAgKj0gc21vb3RoU2Nyb2xsU3RlcDsK
KyAgICB9CisKKyAgICBmbG9hdCBuZXdQb3MgPSBtYXgobWluKG1fZGVzaXJlZFBvcyArIHN0ZXAs
IHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSkgLSBtX3Zpc2libGVTaXplKSwgMC4wZik7
CisgICAgLy8gRG9uJ3Qgc21vb3RoIHNjcm9sbCBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3Ig
ZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIXRoZW1lKCktPnNtb290aFNjcm9sbCgpIHx8
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHNldEN1
cnJlbnRQb3MobmV3UG9zLCB0cnVlKTsKKyAgICAvLyBGb3Iga2V5Ym9hcmQgYXV0b3JlcGVhdCBz
Y3JvbGxpbmcsIGRvbid0IHF1ZXVlIHVwIG1vcmUgdGhhbiB0d28gc2Nyb2xsCisgICAgLy8gaW5j
cmVtZW50cyBpbiBhZHZhbmNlLCBsZXN0IHdoZW4gdGhlIHVzZXIgbGlmdHMgdXAgdGhlIGtleSB3
ZSBjb250aW51ZQorICAgIC8vIHNjcm9sbGluZyBmb3IgYSB3aGlsZSB0byAiY2F0Y2ggdXAiLiAg
KFR3byBpbmNyZW1lbnRzIGlzIHRoZSBtaW5pbXVtCisgICAgLy8gY3V0b2ZmIHdlIGNhbiBoYXZl
IHdpdGhvdXQgcmlza2luZyBzY3JvbGwgdW5kZXJmbG93OyB0byBiZSBtb3JlIHByZWNpc2UsCisg
ICAgLy8gZm9yIGEga2V5IHJlcGVhdCBkZWxheSBvZiB8eHwgKiB0aGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpLCB3ZSB3aWxsCisgICAgLy8gZXZlbnR1YWxseSB1bmRlcmZsb3cgaWYgd2Ug
ZG9uJ3QgYWxsb3cgdGhlIG5ldyBwb3NpdGlvbiB0byBhZHZhbmNlIGJ5IGF0CisgICAgLy8gbGVh
c3QgKHxzdGVwfCAqIHx4fCAqIDIpKS4KKyAgICBpZiAoIWFsbG93VW5saW1pdGVkUXVldWVpbmcg
JiYgKGFicyhuZXdQb3MgLSBtX2N1cnJlbnRQb3MpID49IChhYnMoc3RlcCkgKiAyKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2V0RGVzaXJlZFBvcyhuZXdQb3MsIHNtb290
aFNjcm9sbFN0ZXApOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigp
CkBAIC0xNTMsNyArMTc0LDcgQEAgdm9pZCBTY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogYwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
ICAgIAorCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZnJhbWVSZWN0
KCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODgsMTAg
KzIwOSwxMCBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAKICAg
ICAvLyBIYW5kbGUgdGhlIGFycm93cyBhbmQgdHJhY2suCiAgICAgaWYgKHNjcm9sbChwcmVzc2Vk
UGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQot
ICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOworICAgICAgICBzdGFydEF1dG9zY3Jv
bGxUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIAotdm9pZCBTY3JvbGxiYXI6OnN0YXJ0VGltZXJJ
Zk5lZWRlZChkb3VibGUgZGVsYXkpCit2b2lkIFNjcm9sbGJhcjo6c3RhcnRBdXRvc2Nyb2xsVGlt
ZXJJZk5lZWRlZChkb3VibGUgZGVsYXkpCiB7CiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgZm9y
IHRoZSB0aHVtYi4KICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpCkBAIC0yMDgs
MjAgKzIyOSwyMCBAQCB2b2lkIFNjcm9sbGJhcjo6c3RhcnRUaW1lcklmTmVlZGVkKGRvdWJsCiAg
ICAgLy8gV2UgY2FuJ3Qgc2Nyb2xsIGlmIHdlJ3ZlIGhpdCB0aGUgYmVnaW5uaW5nIG9yIGVuZC4K
ICAgICBTY3JvbGxEaXJlY3Rpb24gZGlyID0gcHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKTsK
ICAgICBpZiAoZGlyID09IFNjcm9sbFVwIHx8IGRpciA9PSBTY3JvbGxMZWZ0KSB7Ci0gICAgICAg
IGlmIChtX2N1cnJlbnRQb3MgPT0gMCkKKyAgICAgICAgaWYgKG1fZGVzaXJlZFBvcyA9PSAwKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRQ
b3MgPT0gbWF4aW11bSgpKQorICAgICAgICBpZiAobV9kZXNpcmVkUG9zID09IG1heGltdW0oKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3Njcm9sbFRpbWVyLnN0YXJ0T25l
U2hvdChkZWxheSk7CisgICAgbV9hdXRvc2Nyb2xsVGltZXIuc3RhcnRPbmVTaG90KGRlbGF5KTsK
IH0KIAotdm9pZCBTY3JvbGxiYXI6OnN0b3BUaW1lcklmTmVlZGVkKCkKK3ZvaWQgU2Nyb2xsYmFy
OjpzdG9wQXV0b3Njcm9sbFRpbWVySWZOZWVkZWQoKQogewotICAgIGlmIChtX3Njcm9sbFRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIG1fc2Nyb2xsVGltZXIuc3RvcCgpOworICAgIGlmIChtX2F1
dG9zY3JvbGxUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2F1dG9zY3JvbGxUaW1lci5zdG9w
KCk7CiB9CiAKIFNjcm9sbERpcmVjdGlvbiBTY3JvbGxiYXI6OnByZXNzZWRQYXJ0U2Nyb2xsRGly
ZWN0aW9uKCkKQEAgLTI0NCw2ICsyNjUsMTA2IEBAIFNjcm9sbEdyYW51bGFyaXR5IFNjcm9sbGJh
cjo6cHJlc3NlZFBhcnQKICAgICByZXR1cm4gU2Nyb2xsQnlQYWdlOwogfQogCit2b2lkIFNjcm9s
bGJhcjo6c21vb3RoU2Nyb2xsVGltZXJGaXJlZChUaW1lcjxTY3JvbGxiYXI+KikKK3sKKyAgICBz
bW9vdGhTY3JvbGwoKTsKK30KKwordm9pZCBTY3JvbGxiYXI6OnN0b3BTbW9vdGhTY3JvbGxUaW1l
cklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9zbW9vdGhTY3JvbGxUaW1lci5pc0FjdGl2ZSgpKQor
ICAgICAgICBtX3Ntb290aFNjcm9sbFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxiYXI6
OnNtb290aFNjcm9sbCgpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5nIHBlcmYg
dmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFsIHRpbWUg
dG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBlcXVhbCB0bworICAgIC8vICAgdDAgKyAw
LjV0QSAtIHREICsgdFMKKyAgICAvLyBXaGVyZQorICAgIC8vICAgdDAgPSBUaGUgdGltZSB0byBw
ZXJmb3JtIHRoZSBzY3JvbGwgd2l0aG91dCBzbW9vdGggc2Nyb2xsaW5nCisgICAgLy8gICB0QSA9
IHRoZW1lKCktPnNtb290aFNjcm9sbEFjY2VsZXJhdGlvblRpbWUoKQorICAgIC8vICAgdEQgPSB0
aGVtZSgpLT5zbW9vdGhTY3JvbGxUaW1lckRlbGF5KCkKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAg
Ly8gICAgICAgIHNpbmdsZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVl
IHRvIGNhbGxpbmcKKyAgICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBm
b3Igc2ltcGxlIHBhZ2VzLCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMp
LgorICAgIC8vCisgICAgLy8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhl
IHRvdGFsIGxhZyAoYXMgdXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgfjAgKGFjdHVhbGx5
IDE1IG1zIGJ5IGRlZmF1bHQpIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yCisg
ICAgLy8gY29tcGxleCBwYWdlcy4gIFdpdGhvdXQga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJn
ZSB0UyBpcyBpdCdzIGhhcmQgdG8KKyAgICAvLyBkbyBiZXR0ZXIgdGhhbiB0aGlzLiAgUGVyaGFw
cyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMgdmFsdWVzCisgICAgLy8gYW5kIGZv
cndhcmQtY29tcGVuc2F0ZS4KKworCisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9s
bCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIg
bGFzdCB1cGRhdGUuICBUaGlzIG1heSBiZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNw
ZWNpYWxseSBpZgorICAgIC8vIHRoZSBwYWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBz
bG93LgorICAgIGRvdWJsZSBkZXNpcmVkU2Nyb2xsSW50ZXJ2YWwgPSB0aGVtZSgpLT5zbW9vdGhT
Y3JvbGxUaW1lckRlbGF5KCk7CisgICAgLy8gVG8gYXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2Un
dmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxpbmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3Zl
IGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBpZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSds
bCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21lIGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAg
IGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxvY2l0
eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBtX2xhc3RTbW9vdGhTY3JvbGxUaW1lKSA6IGRlc2ly
ZWRTY3JvbGxJbnRlcnZhbDsKKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IGZhciB3ZSd2ZSBhY3R1
YWxseSB0cmF2ZWxlZCBhbmQgdXBkYXRlIG91ciBjdXJyZW50CisgICAgLy8gdmVsb2NpdHkuCisg
ICAgZmxvYXQgZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICBpZiAobV9zbW9vdGhTY3JvbGxDdXJyZW50
VmVsb2NpdHkgPCBtX3Ntb290aFNjcm9sbERlc2lyZWRWZWxvY2l0eSkgeworICAgICAgICAvLyBX
ZSBhY2NlbGVyYXRlIGF0IGEgY29uc3RhbnQgcmF0ZSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJl
ZCB2ZWxvY2l0eS4KKyAgICAgICAgLy8gdGhlbWUoKS0+c21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9u
VGltZSgpIGlzIHRoZSB0aW1lIHdlJ2xsIHRha2UgdG8KKyAgICAgICAgLy8gYWNjZWxlcmF0ZSBm
cm9tIDAgdG8gdGhhdCB2ZWxvY2l0eS4gIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSB3aWxsCisgICAg
ICAgIC8vIHByb2R1Y2UgYSBtb3JlIHByb25vdW5jZWQgYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAg
ICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uUmF0ZSA9IG1fc21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9j
aXR5IC8gdGhlbWUoKS0+c21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9uVGltZSgpOworCisgICAgICAg
IC8vIEZpZ3VyZSBvdXQgd2hldGhlciBjb250YW50IGFjY2VsZXJhdGlvbiBoYXMgY2F1c2VkIHVz
IHRvIHJlYWNoIG91cgorICAgICAgICAvLyB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0
IHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlID0gYWNjZWxlcmF0aW9uUmF0ZSAqIGxhc3RTY3JvbGxJ
bnRlcnZhbDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsTmV3VmVsb2NpdHkgPSBtX3Ntb290aFNj
cm9sbEN1cnJlbnRWZWxvY2l0eSArIHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlOworICAgICAgICBp
ZiAocG90ZW50aWFsTmV3VmVsb2NpdHkgPiBtX3Ntb290aFNjcm9sbERlc2lyZWRWZWxvY2l0eSkg
eworICAgICAgICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGF0IHNvbWUg
cG9pbnQgYmV0d2VlbiBvdXIgbGFzdAorICAgICAgICAgICAgLy8gdXBkYXRlIGFuZCBub3cuICBU
aGUgZGlzdGFuY2UgdHJhdmVsZWQgY2FuIGJlIGNhbGN1bGF0ZWQgaW4gdHdvCisgICAgICAgICAg
ICAvLyBwaWVjZXM6IHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB3aGlsZSBhY2NlbGVyYXRpbmcsIGFu
ZCB0aGUKKyAgICAgICAgICAgIC8vIGRpc3RhbmNlIHRyYXZlbGVkIGFmdGVyIHJlYWNoaW5nIHRo
ZSB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgICAgICBmbG9hdCBhY3R1YWxWZWxvY2l0eUNoYW5n
ZSA9IG1fc21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9jaXR5IC0gbV9zbW9vdGhTY3JvbGxDdXJyZW50
VmVsb2NpdHk7CisgICAgICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25JbnRlcnZhbCA9IGFjdHVh
bFZlbG9jaXR5Q2hhbmdlIC8gYWNjZWxlcmF0aW9uUmF0ZTsKKyAgICAgICAgICAgIC8vIFRoZSBk
aXN0YW5jZSB0cmF2ZWxlZCB1bmRlciBjb25zdGFudCBhY2NlbGVyYXRpb24gaXMgdGhlIGFyZWEK
KyAgICAgICAgICAgIC8vIHVuZGVyIGEgbGluZSBzZWdtZW50IHdpdGggYSBjb25zdGFudCByaXNp
bmcgc2xvcGUuICBCcmVhayB0aGlzCisgICAgICAgICAgICAvLyBpbnRvIGEgdHJpYW5ndWxhciBw
b3J0aW9uIGF0b3AgYSByZWN0YW5ndWxhciBwb3J0aW9uIGFuZCBzdW0uCisgICAgICAgICAgICBk
aXN0YW5jZVRyYXZlbGVkID0gKChtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxvY2l0eSArIChhY3R1
YWxWZWxvY2l0eUNoYW5nZSAvIDIpKSAqIGFjY2VsZXJhdGlvbkludGVydmFsKTsKKyAgICAgICAg
ICAgIC8vIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBhdCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGlzIHNp
bXBseQorICAgICAgICAgICAgLy8gKHRhcmdldCB2ZWxvY2l0eSkgKiAocmVtYWluaW5nIHRpbWUg
YWZ0ZXIgYWNjZWxlcmF0aW5nKS4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgKz0gKG1f
c21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9jaXR5ICogKGxhc3RTY3JvbGxJbnRlcnZhbCAtIGFjY2Vs
ZXJhdGlvbkludGVydmFsKSk7CisgICAgICAgICAgICBtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxv
Y2l0eSA9IG1fc21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9jaXR5OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gQ29uc3RhbnQgYWNjZWxlcmF0aW9uIHRocm91Z2ggdGhlIGVudGlyZSB0
aW1lIGludGVydmFsLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IChtX3Ntb290aFNj
cm9sbEN1cnJlbnRWZWxvY2l0eSArIChwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSAvIDIpKSAqIGxh
c3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgICAgIG1fc21vb3RoU2Nyb2xsQ3VycmVudFZlbG9j
aXR5ID0gcG90ZW50aWFsTmV3VmVsb2NpdHk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSwgc28gdGhl
IGRpc3RhbmNlIHdlJ3ZlCisgICAgICAgIC8vIHRyYXZlbGVkIGlzIHNpbXBseSAoY3VycmVudCB2
ZWxvY2l0eSkgKiAoZWxhcHNlZCB0aW1lKS4KKyAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IG1f
c21vb3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5ICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAg
ICAvLyBJZiBvdXIgZGVzaXJlZCB2ZWxvY2l0eSBoYXMgZGVjcmVhc2VkLCBkcm9wIHRoZSBjdXJy
ZW50IHZlbG9jaXR5IHRvby4KKyAgICAgICAgbV9zbW9vdGhTY3JvbGxDdXJyZW50VmVsb2NpdHkg
PSBtX3Ntb290aFNjcm9sbERlc2lyZWRWZWxvY2l0eTsKKyAgICB9CisKKyAgICAvLyBOb3cgdXBk
YXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGRpc3RhbmNlIHRyYXZlbGVkLgor
ICAgIGlmIChkaXN0YW5jZVRyYXZlbGVkID49IGFicyhtX2Rlc2lyZWRQb3MgLSBtX2N1cnJlbnRQ
b3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZlbGVkIGZhciBlbm91Z2ggdG8gcmVhY2ggdGhl
IGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290aAorICAgICAgICAvLyBzY3JvbGxpbmcuCisg
ICAgICAgIHNldEN1cnJlbnRQb3MobV9kZXNpcmVkUG9zLCBmYWxzZSk7CisgICAgICAgIG1fc21v
b3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBO
b3QgeWV0IGF0IHRoZSB0YXJnZXQgcG9zaXRpb24uICBUcmF2ZWwgdG93YXJkcyBpdCBhbmQgc2V0
IHVwIHRoZQorICAgICAgICAvLyBuZXh0IHVwZGF0ZS4KKyAgICAgICAgaWYgKG1fY3VycmVudFBv
cyA+IG1fZGVzaXJlZFBvcykKKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAtZGlzdGFu
Y2VUcmF2ZWxlZDsKKyAgICAgICAgc2V0Q3VycmVudFBvcyhtX2N1cnJlbnRQb3MgKyBkaXN0YW5j
ZVRyYXZlbGVkLCBmYWxzZSk7CisgICAgICAgIG1fc21vb3RoU2Nyb2xsVGltZXIuc3RhcnRPbmVT
aG90KGRlc2lyZWRTY3JvbGxJbnRlcnZhbCk7CisgICAgICAgIG1fbGFzdFNtb290aFNjcm9sbFRp
bWUgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGJhcjo6bW92
ZVRodW1iKGludCBwb3MpCiB7CiAgICAgLy8gRHJhZyB0aGUgdGh1bWIuCkBAIC0yNTcsMTEgKzM3
OCwxNyBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBpZiAo
ZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAgICBp
ZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1i
UG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAg
ICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBt
YXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29sIFNjcm9s
bGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVu
dFBvcyhmbG9hdCBwb3MsIGJvb2wgcmVzZXRTbW9vdGhTY3JvbGwpCiB7CisgICAgaWYgKHJlc2V0
U21vb3RoU2Nyb2xsKSB7CisgICAgICAgIHN0b3BTbW9vdGhTY3JvbGxUaW1lcklmTmVlZGVkKCk7
CisgICAgICAgIG1fZGVzaXJlZFBvcyA9IHBvczsKKyAgICAgICAgbV9zbW9vdGhTY3JvbGxDdXJy
ZW50VmVsb2NpdHkgPSAwOworICAgIH0KKwogICAgIGlmIChwb3MgPT0gbV9jdXJyZW50UG9zKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI3Nyw2ICs0MDQsMzQgQEAgYm9vbCBTY3JvbGxi
YXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IFNjcm9sbGJhcjo6c2V0RGVzaXJlZFBvcyhmbG9hdCBwb3MsIGZsb2F0IHN0ZXApCit7CisgICAg
aWYgKHBvcyA9PSBtX2Rlc2lyZWRQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
ZGVzaXJlZFBvcyA9IHBvczsKKyAgICBpZiAobV9jdXJyZW50UG9zID09IG1fZGVzaXJlZFBvcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRm9yIHdoZWVsIHNjcm9sbHMsIHdlIHNl
dCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIgYXdheSBmcm9tCisgICAgLy8g
dGhlIHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUuICBUaGlzIG1ha2VzIHdoZWVsIHNjcm9sbHMgZmVl
bCBzaW1pbGFyIHRvIHRoZQorICAgIC8vIG90aGVyIHR5cGVzIG9mIHNjcm9sbHMsIHNpbmNlIGlu
IGJvdGggY2FzZXMgd2UncmUgc2V0dGluZyB0aGUgdmVsb2NpdHkKKyAgICAvLyBzdWNoIHRoYXQg
aW4gdGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBzZWNvbmRzIHdlJ2xsIHJlYWNoIHRo
ZSBuZXcKKyAgICAvLyBkZXNpcmVkIHBvc2l0aW9uIChzZWUgYmVsb3cpLgorICAgIGlmICghc3Rl
cCkKKyAgICAgICAgc3RlcCA9IGFicyhtX2Rlc2lyZWRQb3MgLSBtX2N1cnJlbnRQb3MpOworCisg
ICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB8bV9hdXRvc2Nyb2xsVGltZXJ8IHdpbGwgZW5kIHVw
IGNhbGxpbmcgaGVyZSB0bworICAgIC8vIGluY3JlbWVudCB8bV9kZXNpcmVkUG9zfCBieSB8c3Rl
cHwgZXZlcnkKKyAgICAvLyB0aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIHNlY29uZHMu
ICBJZiB3ZSBzZXQgdGhlIGRlc2lyZWQgdmVsb2NpdHkKKyAgICAvLyB0byBleGFjdGx5IHRoaXMg
cmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsIG5laXRoZXIgcmFjZSBhaGVhZCAoYW5kIHRoZW4K
KyAgICAvLyBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGxhZyBiZWhpbmQuCisgICAgbV9zbW9vdGhT
Y3JvbGxEZXNpcmVkVmVsb2NpdHkgPSBzdGVwIC8gdGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKTsKKyAgICBpZiAoIW1fc21vb3RoU2Nyb2xsVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
c21vb3RoU2Nyb2xsKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgU2Nyb2xsYmFyOjpz
ZXRIb3ZlcmVkUGFydChTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7CiAgICAgaWYgKHBhcnQgPT0gbV9o
b3ZlcmVkUGFydCkKQEAgLTMwNiw3ICs0NjEsNyBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VNb3Zl
ZChjb25zdCBQbGF0Zm9yCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7
CiAgICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbih0aGlzLCBl
dnQpKQotICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmlnaW4pOworICAgICAgICAg
ICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmlnaW4sIHRydWUpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyAKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvcygpKS54KCkgOgpAQCAtMzI0LDE2ICs0NzksMTYgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNl
TW92ZWQoY29uc3QgUGxhdGZvcgogICAgICAgICAgICAgaWYgKHBhcnQgPT0gbV9wcmVzc2VkUGFy
dCkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBtb3VzZSBpcyBtb3ZpbmcgYmFjayBvdmVyIHRo
ZSBwcmVzc2VkIHBhcnQuICBXZQogICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gc3RhcnQgdXAg
dGhlIHRpbWVyIGFjdGlvbiBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBzdGFydFRpbWVySWZOZWVk
ZWQodGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSk7CisgICAgICAgICAgICAgICAgc3Rh
cnRBdXRvc2Nyb2xsVGltZXJJZk5lZWRlZCh0aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgp
KTsKICAgICAgICAgICAgICAgICB0aGVtZSgpLT5pbnZhbGlkYXRlUGFydCh0aGlzLCBtX3ByZXNz
ZWRQYXJ0KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ob3ZlcmVkUGFydCA9PSBtX3ByZXNz
ZWRQYXJ0KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGlzIGxlYXZpbmcgdGhlIHBy
ZXNzZWQgcGFydC4gIEtpbGwgb3VyIHRpbWVyCiAgICAgICAgICAgICAgICAgLy8gaWYgbmVlZGVk
LgotICAgICAgICAgICAgICAgIHN0b3BUaW1lcklmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAg
c3RvcEF1dG9zY3JvbGxUaW1lcklmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgdGhlbWUoKS0+
aW52YWxpZGF0ZVBhcnQodGhpcywgbV9wcmVzc2VkUGFydCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gCi0gICAgICAgIAorCiAgICAgICAgIHNldEhvdmVyZWRQYXJ0KHBhcnQpOwogICAgIH0g
CiAKQEAgLTM1MCw3ICs1MDUsNyBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VVcCgpCiB7CiAgICAg
c2V0UHJlc3NlZFBhcnQoTm9QYXJ0KTsKICAgICBtX3ByZXNzZWRQb3MgPSAwOwotICAgIHN0b3BU
aW1lcklmTmVlZGVkKCk7CisgICAgc3RvcEF1dG9zY3JvbGxUaW1lcklmTmVlZGVkKCk7CiAKICAg
ICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNl
dE1vdXNlUHJlc3NlZChmYWxzZSk7CkBAIC0zNjYsNyArNTIxLDcgQEAgYm9vbCBTY3JvbGxiYXI6
Om1vdXNlRG93bihjb25zdCBQbGF0Zm9ybQogCiAgICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+
aGl0VGVzdCh0aGlzLCBldnQpKTsKICAgICBpbnQgcHJlc3NlZFBvcyA9IChvcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvcygpKS54KCkgOiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS55KCkp
OwotICAgIAorCiAgICAgaWYgKChtX3ByZXNzZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgbV9w
cmVzc2VkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KSAmJiB0aGVtZSgpLT5zaG91bGRDZW50ZXJP
blRodW1iKHRoaXMsIGV2dCkpIHsKICAgICAgICAgc2V0SG92ZXJlZFBhcnQoVGh1bWJQYXJ0KTsK
ICAgICAgICAgc2V0UHJlc3NlZFBhcnQoVGh1bWJQYXJ0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJvcG9y
dGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0UHJlc3Nl
ZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKLSAgICBib29sIHNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7
CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciA9IDEuMGYsIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyA9IHRydWUp
OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KTsKIApAQCAtMTM1LDE0ICsxMzUsMTkgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3BvcnRpb24oKTsKIAogICAgIHZvaWQgYXV0
b3Njcm9sbFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsYmFyPiopOwotICAgIHZvaWQgc3RhcnRUaW1l
cklmTmVlZGVkKGRvdWJsZSBkZWxheSk7Ci0gICAgdm9pZCBzdG9wVGltZXJJZk5lZWRlZCgpOwor
ICAgIHZvaWQgc3RhcnRBdXRvc2Nyb2xsVGltZXJJZk5lZWRlZChkb3VibGUgZGVsYXkpOworICAg
IHZvaWQgc3RvcEF1dG9zY3JvbGxUaW1lcklmTmVlZGVkKCk7CiAgICAgdm9pZCBhdXRvc2Nyb2xs
UHJlc3NlZFBhcnQoZG91YmxlIGRlbGF5KTsKICAgICBTY3JvbGxEaXJlY3Rpb24gcHJlc3NlZFBh
cnRTY3JvbGxEaXJlY3Rpb24oKTsKICAgICBTY3JvbGxHcmFudWxhcml0eSBwcmVzc2VkUGFydFNj
cm9sbEdyYW51bGFyaXR5KCk7CiAgICAgCisgICAgdm9pZCBzbW9vdGhTY3JvbGxUaW1lckZpcmVk
KFRpbWVyPFNjcm9sbGJhcj4qKTsKKyAgICB2b2lkIHN0b3BTbW9vdGhTY3JvbGxUaW1lcklmTmVl
ZGVkKCk7CisgICAgdm9pZCBzbW9vdGhTY3JvbGwoKTsKKwogICAgIHZvaWQgbW92ZVRodW1iKGlu
dCBwb3MpOwotICAgIGJvb2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpOworICAgIGJvb2wgc2V0
Q3VycmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgcmVzZXRTbW9vdGhTY3JvbGwpOworICAgIGJvb2wg
c2V0RGVzaXJlZFBvcyhmbG9hdCBwb3MsIGZsb2F0IHN0ZXApOwogCiAgICAgU2Nyb2xsYmFyQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwpA
QCAtMTUyLDYgKzE1NywxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fdmlzaWJsZVNpemU7CiAg
ICAgaW50IG1fdG90YWxTaXplOwogICAgIGZsb2F0IG1fY3VycmVudFBvczsKKyAgICBmbG9hdCBt
X2Rlc2lyZWRQb3M7CisgICAgZmxvYXQgbV9zbW9vdGhTY3JvbGxDdXJyZW50VmVsb2NpdHk7ICAv
LyBJbiBweC9zCisgICAgZmxvYXQgbV9zbW9vdGhTY3JvbGxEZXNpcmVkVmVsb2NpdHk7ICAvLyBJ
biBweC9zCisgICAgZG91YmxlIG1fbGFzdFNtb290aFNjcm9sbFRpbWU7CiAgICAgZmxvYXQgbV9k
cmFnT3JpZ2luOwogICAgIGludCBtX2xpbmVTdGVwOwogICAgIGludCBtX3BhZ2VTdGVwOwpAQCAt
MTYzLDcgKzE3Miw4IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBib29sIG1fZW5hYmxlZDsKIAot
ICAgIFRpbWVyPFNjcm9sbGJhcj4gbV9zY3JvbGxUaW1lcjsKKyAgICBUaW1lcjxTY3JvbGxiYXI+
IG1fYXV0b3Njcm9sbFRpbWVyOworICAgIFRpbWVyPFNjcm9sbGJhcj4gbV9zbW9vdGhTY3JvbGxU
aW1lcjsKICAgICBib29sIG1fb3ZlcmxhcHNSZXNpemVyOwogICAgIAogICAgIGJvb2wgbV9zdXBw
cmVzc0ludmFsaWRhdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAkocmV2
aXNpb24gNTIwMzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDYgKzg1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGRvdWJsZSBp
bml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiAwLjI1OyB9CiAgICAgdmlydHVh
bCBkb3VibGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiAwLjA1OyB9CiAKKyAgICB2
aXJ0dWFsIGJvb2wgc21vb3RoU2Nyb2xsKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
ZG91YmxlIHNtb290aFNjcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiAwLjAxOyB9CisgICAgdmly
dHVhbCBkb3VibGUgc21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9uVGltZSgpIHsgcmV0dXJuIGF1dG9z
Y3JvbGxUaW1lckRlbGF5KCk7IH0KKwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJh
cihTY3JvbGxiYXIqKSB7fQogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNj
cm9sbGJhciopIHt9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA1
MjAzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwMiwxMCArNDAyLDEwIEBAIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQKICAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXll
cigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCi1ib29sIFJlbmRlckJv
eDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRl
ckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBib29sIGFsbG93VW5saW1pdGVkUXVldWVp
bmcsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBSZW5kZXJMYXllciogbCA9IGxheWVyKCk7Ci0g
ICAgaWYgKGwgJiYgbC0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIp
KSB7CisgICAgaWYgKGwgJiYgbC0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIsIGFsbG93VW5saW1pdGVkUXVldWVpbmcpKSB7CiAgICAgICAgIGlmIChzdG9wTm9kZSkK
ICAgICAgICAgICAgICpzdG9wTm9kZSA9IG5vZGUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC00MTYsNyArNDE2LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZAogCiAgICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoYiAm
JiAhYi0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBiLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4gYi0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIGFsbG93VW5saW1pdGVk
UXVldWVpbmcsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CiAgICAgaW50IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAx
LjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBi
b29sIGFsbG93VW5saW1pdGVkUXVldWVpbmcgPSB0cnVlLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsK
ICAgICBib29sIGNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xsKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUyLDcgKzIwNTIsNyBAQCBib29sIFJlbmRlckxh
eWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29sIFJlbmRlckxheWVy
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykK
IHsKICAgICBib29sIGRpZEhvcml6b250YWxTY3JvbGwgPSBmYWxzZTsKICAgICBib29sIGRpZFZl
cnRpY2FsU2Nyb2xsID0gZmFsc2U7CkBAIC0yMDYxLDEzICsyMDYxLDEzIEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09
IFNjcm9sbEJ5RG9jdW1lbnQpIHsKICAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSBmb3IgdGhl
IFNjcm9sbEJ5RG9jdW1lbnQgZ3JhbnVsYXJpdHkuIEEgZG9jdW1lbnQgc2Nyb2xsIGNhbiBvbmx5
IGJlIHVwIAogICAgICAgICAgICAgLy8gb3IgZG93biBhbmQgaW4gYm90aCBjYXNlcyB0aGUgaG9y
aXpvbnRhbCBiYXIgZ29lcyBhbGwgdGhlIHdheSB0byB0aGUgbGVmdC4KLSAgICAgICAgICAgIGRp
ZEhvcml6b250YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeURv
Y3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGRpZEhvcml6b250YWxTY3JvbGwgPSBt
X2hCYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyLCBh
bGxvd1VubGltaXRlZFF1ZXVlaW5nKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRI
b3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgYWxsb3dVbmxpbWl0ZWRR
dWV1ZWluZyk7CiAgICAgfQogCiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgZGlkVmVydGljYWxT
Y3JvbGwgPSBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKKyAgICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKTsKIAogICAg
IHJldHVybiAoZGlkSG9yaXpvbnRhbFNjcm9sbCB8fCBkaWRWZXJ0aWNhbFNjcm9sbCk7CiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAot
ICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgYm9vbCBhbGxvd1VubGlt
aXRlZFF1ZXVlaW5nID0gdHJ1ZSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKCk7CiAKICAgICB2b2lk
IHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBJbnRTaXplJik7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAs
OSArNTEwLDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJc1Zpc2libGUoaQogICAg
IHJldHVybiBpbmRleCA+PSBtX2luZGV4T2Zmc2V0ICYmIGluZGV4IDwgbV9pbmRleE9mZnNldCAr
IG51bVZpc2libGVJdGVtcygpOwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgTm9kZSoqKQorYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIsIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZywgTm9kZSoqKQogewotICAg
IHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKTsKIH0K
IAogdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93Q29u
dHJvbChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxLjBmLCBib29sIGFsbG93VW5saW1pdGVkUXVldWVpbmcgPSB0cnVlLCBO
b2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygp
OwogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wg
aXNSb290TGluZUJveCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3Jv
bGxiYXJUaGVtZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyVGhlbWUuaAkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBkb3VibGUgaW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmluaXRpYWxBdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpOyB9CiAgICAgdmlydHVhbCBkb3VibGUgYXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7
IHJldHVybiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKTsgfQogCisgICAgdmlydHVhbCBib29sIHNtb290aFNjcm9sbCgpIHsgcmV0dXJuIFNjcm9s
bGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zbW9vdGhTY3JvbGwoKTsgfQorICAgIHZpcnR1YWwg
ZG91YmxlIHNtb290aFNjcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVybiBTY3JvbGxiYXJUaGVtZTo6
bmF0aXZlVGhlbWUoKS0+c21vb3RoU2Nyb2xsVGltZXJEZWxheSgpOyB9CisgICAgdmlydHVhbCBk
b3VibGUgc21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9uVGltZSgpIHsgcmV0dXJuIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT5zbW9vdGhTY3JvbGxBY2NlbGVyYXRpb25UaW1lKCk7IH0KKwog
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikg
eyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnJlZ2lzdGVyU2Nyb2xsYmFy
KHNjcm9sbGJhcik7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgeyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkt
PnVucmVnaXN0ZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKTsgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24g
NTIwMzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDgsMTIgKzgwOCwxMiBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0
U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jvb2wgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgYWxs
b3dVbmxpbWl0ZWRRdWV1ZWluZywgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIFJlbmRlckxheWVy
KiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAg
aWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcikpCisgICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllciwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBhbGxvd1VubGltaXRlZFF1
ZXVlaW5nLCBzdG9wTm9kZSk7CiB9CiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVu
dCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9w
Tm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIGJvb2wgYWxsb3dVbmxpbWl0
ZWRRdWV1ZWluZyA9IHRydWUsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50IHRleHRC
bG9ja1dpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRo
KGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTIw
MzYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMDktMTItMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBz
bW9vdGggc2Nyb2xsaW5nDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzIzNTYNCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOiBEb24ndCBx
dWV1ZSBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
aDogRG9uJ3QgcXVldWUgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAg
ICogc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6IFVwZGF0ZSBjb21tZW50cyBub3cg
dGhhdCB3ZSBoYXZlIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJLaXQ6OldlYklucHV0
RXZlbnRGYWN0b3J5Ojptb3VzZVdoZWVsRXZlbnQpOgorCiAyMDA5LTEyLTExICBOYXRlIENoYXBp
biAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHANCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNTIw
MzYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMyLDExICs3MzIsMTIgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhL
ZXlib2FyZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHByb3Bh
Z2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICByZXR1
cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIGZh
bHNlKTsKIH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBzY3JvbGxEaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd1VubGltaXRlZFF1ZXVlaW5n
KQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQpAQCAtNzQ0LDExICs3NDUsMTMgQEAgYm9vbCBXZWJWaWV3SW1wbDo6cHJvcGFnYXRl
U2Nyb2xsKFNjcm9sbAogCiAgICAgYm9vbCBzY3JvbGxIYW5kbGVkID0KICAgICAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxEaXJlY3Rpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEdy
YW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFsbG93VW5saW1pdGVkUXVldWVpbmcpOwogICAgIEZyYW1lKiBjdXJyZW50RnJhbWUgPSBmcmFt
ZTsKICAgICB3aGlsZSAoIXNjcm9sbEhhbmRsZWQgJiYgY3VycmVudEZyYW1lKSB7CiAgICAgICAg
IHNjcm9sbEhhbmRsZWQgPSBjdXJyZW50RnJhbWUtPnZpZXcoKS0+c2Nyb2xsKHNjcm9sbERpcmVj
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dVbmxpbWl0ZWRRdWV1ZWlu
Zyk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KTsKICAgICB9CiAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZWQ7CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNyArMjY1LDcgQEAgcHVibGljOgog
CiAgICAgLy8gVHJpZXMgdG8gc2Nyb2xsIGEgZnJhbWUgb3IgYW55IHBhcmVudCBvZiBhIGZyYW1l
LiBSZXR1cm5zIHRydWUgaWYgdGhlIHZpZXcKICAgICAvLyB3YXMgc2Nyb2xsZWQuCi0gICAgYm9v
bCBwcm9wYWdhdGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3Jv
bGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBwcm9wYWdhdGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xs
RGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSwgYm9vbCBhbGxvd1VubGltaXRl
ZFF1ZXVlaW5nID0gdHJ1ZSk7CiAKICAgICAvLyBIQUNLOiBjdXJyZW50SW5wdXRFdmVudCgpIGlz
IGZvciBDaHJvbWVDbGllbnRJbXBsOjpzaG93KCksIHVudGlsIHdlIGNhbgogICAgIC8vIGZpeCBX
ZWJLaXQgdG8gcGFzcyBlbm91Z2ggaW5mb3JtYXRpb24gdXAgaW50byBDaHJvbWVDbGllbnQ6OnNo
b3coKSBzbyB3ZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZh
Y3RvcnkuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5w
dXRFdmVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEz
ICszOTYsMTYgQEAgV2ViTW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogCiAg
ICAgLy8gQ29udmVydCB3aGVlbCBkZWx0YSBhbW91bnQgdG8gYSBudW1iZXIgb2YgcGl4ZWxzIHRv
IHNjcm9sbC4KICAgICAvLwotICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xs
IHBlciBsaW5lPyAgR2Vja28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQotICAgIC8vIGN1cnJlbnQg
bGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91
Z2ggdGhlCi0gICAgLy8gcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMuICBJRSA3IGlzIH41
MCBweC9saW5lLCBhbHRob3VnaCB0aGUgdmFsdWUKLSAgICAvLyBzZWVtcyB0byB2YXJ5IHNsaWdo
dGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwuICBTaW5jZSBJRSA3IGhhcyBhIHNtb290aGluZwot
ICAgIC8vIGFsZ29yaXRobSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdo
dGx5IGxhcmdlciBzY3JvbGwgdmFsdWVzCi0gICAgLy8gd2l0aG91dCBmZWVsaW5nIGplcmt5LiAg
SGVyZSB3ZSB1c2UgMTAwIHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQKLSAgICAvLyBz
Y3JvbGwgYW1vdW50IGlzIHRocmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBIb3cg
bWFueSBwaXhlbHMgc2hvdWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEZpcmVmb3ggdXNlcyB0aGUg
aGVpZ2h0IG9mCisgICAgLy8gdGhlIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRp
c3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91Z2gKKyAgICAvLyB0aGUgcGFnZSBvciBnbyB0
byBkaWZmZXJlbnQgcGFnZXMuICBJRSA4IGlzIH42MCBweC9saW5lLCBhbHRob3VnaCB0aGUKKyAg
ICAvLyB2YWx1ZSBzZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwu
ICBBbHNvLCBJRSBkZWZhdWx0cworICAgIC8vIHRvIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmly
ZWZveCBkb2Vzbid0LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aAorICAgIC8vIHNvbWV3aGF0IGxh
cmdlciBzY3JvbGwgdmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNl
IDEwMAorICAgIC8vIHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3Vu
dCBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwKKyAgICAvLyB0aWNrKS4gIEV2ZW4gdGhvdWdoIHdl
IGhhdmUgc21vb3RoIHNjcm9sbGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxhcmdlCisgICAg
Ly8gYXMgSUUgYmVjYXVzZSBzdWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBzY3JvbGxzIGZh
cnRoZXIgdGhhbiB5b3Ugd2FudAorICAgIC8vIHdoaWxlIHJlYWRpbmcgYXJ0aWNsZXMuCiAgICAg
c3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAzLjBm
OwogICAgIHdoZWVsRGVsdGEgLz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Nyb2xsRGVsdGEg
PSB3aGVlbERlbHRhOwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTExICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAq
IHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDogRG9uJ3QgcXVldWUgc2Nyb2xscyBmcm9tIGtleWJv
YXJkIGF1dG9yZXBlYXQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcmVhbF9tb3ZlX2N1cnNv
cik6CisKIDIwMDktMTItMTAgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25o
YUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRl
eDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNTIwMzYpCisrKyBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUz
LDggKzk1Myw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9tb3YKICAg
ICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PnNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKQotICAgICAgICBmcmFtZS0+
dmlldygpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgaWYgKCFmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIGZh
bHNlKSkKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIGZhbHNlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViS2l0L21hYy9DaGFu
Z2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNTIw
MzYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDA5LTEyLTExICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3Ro
IHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzIzNTYKKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tOiBEb24ndCBxdWV1
ZSBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKC1bV2ViRnJhbWVW
aWV3IF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmdyYW51bGFyaXR5OmFsbG93VW5saW1pdGVk
UXVldWVpbmc6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsVG9CZWdpbm5pbmdP
ZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsVG9FbmRPZkRvY3Vt
ZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfcGFnZVZlcnRpY2FsbHk6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lVmlldyBfcGFnZUhvcml6b250YWxseTpdKToKKyAgICAgICAgKC1bV2Vi
RnJhbWVWaWV3IF9zY3JvbGxMaW5lVmVydGljYWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVW
aWV3IF9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5Ol0pOgorCiAyMDA5LTEyLTEwICBKb24gSG9uZXlj
dXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFjIGJ1aWxkIGZpeC4gVW5y
ZXZpZXdlZC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0NCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCShyZXZpc2lvbiA1
MjAzNikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTUxOSw3ICs1MTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xh
c3MoTlNNCiAgICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9XaW5kb3ddOwogfQogCi0tIChCT09MKV9z
Y3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51
bGFyaXR5OihTY3JvbGxHcmFudWxhcml0eSlncmFudWxhcml0eQorLSAoQk9PTClfc2Nyb2xsT3Zl
cmZsb3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eToo
U2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZzooQk9P
TClhbGxvd1VubGltaXRlZFF1ZXVlaW5nCiB7CiAgICAgLy8gc2Nyb2xsaW5nIG92ZXJmbG93cyBp
cyBvbmx5IGFwcGxpY2FibGUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIFdlYkhUTUxWaWV3CiAg
ICAgaWYgKCFbW3NlbGYgZG9jdW1lbnRWaWV3XSBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKQpAQCAtNTI3LDEyICs1MjcsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVz
RnJvbUNsYXNzKE5TTQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgcmV0dXJuIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cisg
ICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyk7CiB9CiAKIC0gKEJPT0wpX3Nj
cm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZs
b3dJbkRpcmVjdGlvbjpTY3JvbGxVcCBncmFudWxhcml0eTpTY3JvbGxCeURvY3VtZW50XSkKKyAg
ICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJp
dHk6U2Nyb2xsQnlEb2N1bWVudCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nOllFU10pCiAgICAgICAg
IHJldHVybiBZRVM7CiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCiAgICAgICAgIHJl
dHVybiBOTzsKQEAgLTU0Miw3ICs1NDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNG
cm9tQ2xhc3MoTlNNCiAKIC0gKEJPT0wpX3Njcm9sbFRvRW5kT2ZEb2N1bWVudAogewotICAgIGlm
IChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxEb3duIGdyYW51bGFyaXR5
OlNjcm9sbEJ5RG9jdW1lbnRdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVj
dGlvbjpTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgYWxsb3dVbmxpbWl0
ZWRRdWV1ZWluZzpZRVNdKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2hh
c1Njcm9sbEJhcnNdKQogICAgICAgICByZXR1cm4gTk87CkBAIC02MTksNyArNjE5LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9wYWdlVmVy
dGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVj
dGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2Vd
KQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVw
IDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2UgYWxsb3dVbmxpbWl0ZWRRdWV1
ZWluZzpOT10pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgaWYgKCFbc2VsZiBfaGFz
U2Nyb2xsQmFyc10pCkBAIC02MzEsNyArNjMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5
cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9wYWdlSG9yaXpvbnRhbGx5OihCT09MKWxlZnQK
IHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9s
bExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2VdKQorICAgIGlmIChb
c2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9s
bFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZSBhbGxvd1VubGltaXRlZFF1ZXVlaW5nOk5P
XSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNd
KQpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFz
cyhOU00KIAogLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wpdXAKIHsKLSAgICBp
ZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9s
bERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92
ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6
U2Nyb2xsQnlMaW5lIGFsbG93VW5saW1pdGVkUXVldWVpbmc6Tk9dKQogICAgICAgICByZXR1cm4g
WUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCkBAIC02NTUsNyArNjU1LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9z
Y3JvbGxMaW5lSG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9s
bE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFu
dWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRp
cmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9s
bEJ5TGluZSBhbGxvd1VubGltaXRlZFF1ZXVlaW5nOk5PXSkKICAgICAgICAgcmV0dXJuIFlFUzsK
IAogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKQpJbmRleDogV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAko
cmV2aXNpb24gNTIwMzYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNj
cm9sbGluZyhRSwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgZmFsc2UpOwogfQogCiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O
X0NIRUNLKDQsIDYsIDApCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJLaXQvcXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMTItMTEgIFBldGVy
IEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICog
QXBpL3F3ZWJwYWdlLmNwcDogRG9uJ3QgcXVldWUgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9y
ZXBlYXQuCisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9sbGluZyk6CisKIDIw
MDktMTItMTEgIEdpcmlzaCBSYW1ha3Jpc2huYW4gIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KSW5kZXg6IFdlYktpdC93aW4v
Q2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDUyMDM2KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAwOS0xMi0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNt
b290aCBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogRG9uJ3QgcXVldWUgc2Nyb2xs
cyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgIChXZWJWaWV3OjprZXlEb3duKToK
KwogMjAwOS0xMi0xMSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA1MjAz
NikKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MDksNyAr
MTgwOSw3IEBAIGJvb2wgV2ViVmlldzo6a2V5RG93bihXUEFSQU0gdmlydHVhbEtleUMKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBy
ZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBmYWxzZSk7CiB9CiAKIGJvb2wgV2ViVmlldzo6a2V5UHJlc3MoV1BBUkFN
IGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44721</attachid>
            <date>2009-12-11 18:48:50 -0800</date>
            <delta_ts>2009-12-15 21:37:53 -0800</delta_ts>
            <desc>patch v1.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>48949</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1NiBAQAorMjAwOS0xMi0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
IFBsdW1iIGEgd2F5IHRvIGF2b2lkIHF1ZXVlaW5nIHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRv
cmVwZWF0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KToKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOiBQbHVtYiBhIHdheSB0byBhdm9pZCBxdWV1ZWlu
ZyBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9t
IGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBhIHdheSB0byBhdm9pZCBxdWV1ZWluZyBz
Y3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpTY3JvbGxiYXIpOiBJbml0
IG5ld2x5LWFkZGVkIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6flNj
cm9sbGJhcik6IFN0b3Agc21vb3RoIHNjcm9sbCB0aW1lciBhcyB3ZWxsIGFzIGV4aXN0aW5nIGF1
dG9zY3JvbGwgdGltZXIuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVlKTog
U3RvcCBzbW9vdGggc2Nyb2xsaW5nIGlmIGEgY2FsbGVyIHNldHMgdGhlIHNjcm9sbCBwb3NpdGlv
biBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKTogU21vb3Ro
IHNjcm9sbCBpZiBkZXNpcmVkLiAgQXZvaWQgcXVldWVpbmcgZXh0cmEgc2Nyb2xscyBmb3Iga2V5
Ym9hcmQgYXV0b3JlcGVhdCB3aGVuIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnBhaW50KTogUmVtb3ZlIHdoaXRlc3BhY2Ugb24gZW1wdHkgbGluZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KTogUmVuYW1l
IGV4aXN0aW5nICJ0aW1lciIgbmFtZXMgdG8gImF1dG9zY3JvbGxUaW1lciIuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXI6OnN0YXJ0QXV0b3Njcm9sbFRpbWVySWZOZWVkZWQpOiBSZW5hbWUg
ZXhpc3RpbmcgInRpbWVyIiBuYW1lcyB0byAiYXV0b3Njcm9sbFRpbWVyIi4gIEF1dG9zY3JvbGwg
ZGVzaXJlZCBwb3MgcmF0aGVyIHRoYW4gY3VycmVudCBwb3MgaWYgc21vb3RoIHNjcm9sbGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3RvcEF1dG9zY3JvbGxUaW1lcklmTmVlZGVk
KTogUmVuYW1lIGV4aXN0aW5nICJ0aW1lciIgbmFtZXMgdG8gImF1dG9zY3JvbGxUaW1lciIuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNtb290aFNjcm9sbFRpbWVyRmlyZWQpOiBDYWxs
YmFjayB0byBwZXJmb3JtIHNtb290aCBzY3JvbGxpbmcgb24gYW4gYW5pbWF0aW9uIHRpbWVyLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdG9wU21vb3RoU2Nyb2xsVGltZXJJZk5lZWRl
ZCk6IFBhcmFsbGVsIHRvIHN0b3BBdXRvc2Nyb2xsVGltZXJJZk5lZWRlZCgpLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyOjpzbW9vdGhTY3JvbGwpOiBQZXJmb3JtIGEgc2luZ2xlIHNtb290
aCBzY3JvbGwgaW5jcmVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1
bWIpOiBTdG9wIHNtb290aCBzY3JvbGxpbmcgaWYgdGhlIHVzZXIgbW92ZXMgdGhlIHRodW1iIG1h
bnVhbGx5LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKTogQWRk
IGhvb2sgdG8gc3RvcC9yZXNldCBzbW9vdGggc2Nyb2xsaW5nIGlmIGRlc2lyZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldERlc2lyZWRQb3MpOiBTZXQgdXAgc21vb3RoIHNjcm9s
bGluZyB2YXJpYWJsZXMgYW5kIGJlZ2luIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOiBTdG9wIHNtb290aCBzY3JvbGxpbmcgaWYgdGhl
IHVzZXIgc25hcHMgdGhlIHRodW1iIGJhY2suICBSZW5hbWUgZXhpc3RpbmcgInRpbWVyIiBuYW1l
cyB0byAiYXV0b3Njcm9sbFRpbWVyIi4gIFJlbW92ZSB3aGl0ZXNwYWNlIG9uIGVtcHR5IGxpbmUu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlVXApOiBSZW5hbWUgZXhpc3Rpbmcg
InRpbWVyIiBuYW1lcyB0byAiYXV0b3Njcm9sbFRpbWVyIi4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6bW91c2VEb3duKTogUmVtb3ZlIHdoaXRlc3BhY2Ugb24gZW1wdHkgbGluZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVp
bmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuICBSZW5hbWUgZXhpc3RpbmcgInRp
bWVyIiBuYW1lcyB0byAiYXV0b3Njcm9sbFRpbWVyIi4gIEFkZCBiaXRzIGZvciBzbW9vdGggc2Ny
b2xsaW5nLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6IEFkZCBwbGF0Zm9y
bS1zcGVjaWZpYyBjb250cm9sIGhvb2tzIGZvciBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OnNtb290aFNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZTo6c21vb3RoU2Nyb2xsVGltZXJEZWxheSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZTo6c21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9uVGltZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFBsdW1iIGEgd2F5IHRvIGF2b2lkIHF1ZXVl
aW5nIHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRvcmVwZWF0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDogUGx1
bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBl
YXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogUGx1bWIgYSB3YXkgdG8g
YXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVldWVpbmcgc2Nyb2xscyBmcm9tIGtl
eWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OiBQbHVtYiBhIHdheSB0byBhdm9pZCBxdWV1ZWluZyBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0
b3JlcGVhdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDogUGx1bWIgYSB3YXkgdG8gYXZvaWQgcXVl
dWVpbmcgc2Nyb2xscyBmcm9tIGtleWJvYXJkIGF1dG9yZXBlYXQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmg6IEFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBjb250cm9s
IGhvb2tzIGZvciBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Ny
b2xsYmFyVGhlbWU6OnNtb290aFNjcm9sbFRpbWVyRGVsYXkpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOiBQbHVtYiBhIHdheSB0byBhdm9pZCBx
dWV1ZWluZyBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6IFBsdW1iIGEgd2F5IHRvIGF2b2lk
IHF1ZXVlaW5nIHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRvcmVwZWF0LgorCiAyMDA5LTEyLTEx
ICBTaGluaWNoaXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lv
biA1MjAzNikKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MDIsNyArOTAyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NOb2Rl
KFBhcwogICAgIG1fbW91c2VQcmVzc05vZGUgPSBub2RlOwogfQogCi1ib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykKIHsKICAgICBOb2RlKiBub2RlID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCkBAIC05MTAsNyArOTEw
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAg
IGlmIChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7
Ci0gICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5p
c0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIDEuMGYsIGFsbG93VW5saW1pdGVkUXVldWVpbmcpKSB7CiAgICAgICAgICAgICBzZXRG
cmFtZVdhc1Njcm9sbGVkQnlVc2VyKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtOTE5LDE0ICs5MTksMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJm
bG93KFNjcm9sbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnNj
cm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5KQorYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBi
b29sIGFsbG93VW5saW1pdGVkUXVldWVpbmcpCiB7Ci0gICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xs
T3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgYm9vbCBoYW5kbGVkID0gc2Ny
b2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWlu
Zyk7CiAgICAgaWYgKCFoYW5kbGVkKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7
CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3
KCk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdmlldyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5KSA6IGZhbHNlOworICAgICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykg
OiBmYWxzZTsKICAgICAgICAgICAgIGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAg
ICAgICAgIH0gd2hpbGUgKCFoYW5kbGVkICYmIGZyYW1lKTsKICAgICAgfQpJbmRleDogV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDkgKzEyMCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqKTsKIAotICAgIGJvb2wgc2Nyb2xs
T3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBz
Y3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBib29sIGFs
bG93VW5saW1pdGVkUXVldWVpbmcgPSB0cnVlKTsKIAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGxS
ZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBib29sIGFsbG93
VW5saW1pdGVkUXVldWVpbmcgPSB0cnVlKTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAg
ICAgYm9vbCBzaG91bGREcmFnQXV0b05vZGUoTm9kZSosIGNvbnN0IEludFBvaW50JikgY29uc3Q7
IC8vIC13ZWJraXQtdXNlci1kcmFnID09IGF1dG8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMywxNyArMzEzLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QKICAgICB1cGRhdGVTY3JvbGxiYXJzKEludFNpemUobmV3U2Ny
b2xsUG9zaXRpb24ueCgpLCBuZXdTY3JvbGxQb3NpdGlvbi55KCkpKTsKIH0KIAotYm9vbCBTY3Jv
bGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCitib29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBhbGxvd1VubGlt
aXRlZFF1ZXVlaW5nKQogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1
cm4gcGxhdGZvcm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAKICAgICBpZiAoZGly
ZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7CiAgICAgICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
MS4wZiwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCAxLjBmLCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtNjc3LDcgKzY3NywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlCiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgZGVs
dGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0
YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIHNjcm9s
bEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRlbHRhPworICAg
ICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7
CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhl
bCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlz
aW9uIDUyMDM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxSZWN0SW50b1Zp
ZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0Jik7CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2Qg
c2Nyb2xscyBieSBsaW5lcywgcGFnZXMgb3IgcGl4ZWxzLgotICAgIGJvb2wgc2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyA9
IHRydWUpOwogICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0
aGUgdmlldyAoZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgogICAg
IHZvaWQgc2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCisjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTcsNiArNTgsOSBAQCBTY3JvbGxiYXI6OlNjcm9s
bGJhcihTY3JvbGxiYXJDbGllbnQqIGNsCiAgICAgLCBtX3Zpc2libGVTaXplKDApCiAgICAgLCBt
X3RvdGFsU2l6ZSgwKQogICAgICwgbV9jdXJyZW50UG9zKDApCisgICAgLCBtX2Rlc2lyZWRQb3Mo
MCkKKyAgICAsIG1fc21vb3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX3Ntb290
aFNjcm9sbERlc2lyZWRWZWxvY2l0eSgwKQogICAgICwgbV9kcmFnT3JpZ2luKDApCiAgICAgLCBt
X2xpbmVTdGVwKDApCiAgICAgLCBtX3BhZ2VTdGVwKDApCkBAIC02NSw3ICs2OSw4IEBAIFNjcm9s
bGJhcjo6U2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2wKICAgICAsIG1fcHJlc3NlZFBhcnQo
Tm9QYXJ0KQogICAgICwgbV9wcmVzc2VkUG9zKDApCiAgICAgLCBtX2VuYWJsZWQodHJ1ZSkKLSAg
ICAsIG1fc2Nyb2xsVGltZXIodGhpcywgJlNjcm9sbGJhcjo6YXV0b3Njcm9sbFRpbWVyRmlyZWQp
CisgICAgLCBtX2F1dG9zY3JvbGxUaW1lcih0aGlzLCAmU2Nyb2xsYmFyOjphdXRvc2Nyb2xsVGlt
ZXJGaXJlZCkKKyAgICAsIG1fc21vb3RoU2Nyb2xsVGltZXIodGhpcywgJlNjcm9sbGJhcjo6c21v
b3RoU2Nyb2xsVGltZXJGaXJlZCkKICAgICAsIG1fb3ZlcmxhcHNSZXNpemVyKGZhbHNlKQogICAg
ICwgbV9zdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSkKIHsKQEAgLTgzLDggKzg4LDkgQEAgU2Ny
b2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbAogCiBTY3JvbGxiYXI6On5TY3Jv
bGxiYXIoKQogewotICAgIHN0b3BUaW1lcklmTmVlZGVkKCk7Ci0gICAgCisgICAgc3RvcEF1dG9z
Y3JvbGxUaW1lcklmTmVlZGVkKCk7CisgICAgc3RvcFNtb290aFNjcm9sbFRpbWVySWZOZWVkZWQo
KTsKKwogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3JvbGxiYXIodGhpcyk7CiB9CiAKQEAgLTkz
LDcgKzk5LDcgQEAgYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQogICAgIHYgPSBtYXgo
bWluKHYsIG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSksIDApOwogICAgIGlmICh2YWx1ZSgp
ID09IHYpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gT3VyIHZhbHVlIHN0YXllZCB0aGUgc2Ft
ZS4KLSAgICBzZXRDdXJyZW50UG9zKHYpOworICAgIHNldEN1cnJlbnRQb3ModiwgdHJ1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNSwyNiArMTIxLDQxIEBAIHZvaWQgU2Nyb2xsYmFy
OjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhl
bHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBhbGxvd1Vu
bGltaXRlZFF1ZXVlaW5nKQogewogICAgIGZsb2F0IHN0ZXAgPSAwOwogICAgIGlmICgoZGlyZWN0
aW9uID09IFNjcm9sbFVwICYmIG1fb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHx8
IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpKQotICAgICAgICBzdGVwID0gLTE7CisgICAgICAgIHN0ZXAgPSAtbXVsdGlwbGll
cjsKICAgICBlbHNlIGlmICgoZGlyZWN0aW9uID09IFNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCAmJiBt
X29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpKSAKLSAgICAgICAgc3RlcCA9IDE7
Ci0gICAgCi0gICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5TGluZSkKLSAgICAgICAgc3Rl
cCAqPSBtX2xpbmVTdGVwOwotICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGFn
ZSkKLSAgICAgICAgc3RlcCAqPSBtX3BhZ2VTdGVwOwotICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5
ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHN0ZXAgPSBtdWx0aXBsaWVyOworCisgICAg
ZmxvYXQgc21vb3RoU2Nyb2xsU3RlcCA9IDA7CisgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9s
bEJ5RG9jdW1lbnQpCiAgICAgICAgIHN0ZXAgKj0gbV90b3RhbFNpemU7CiAgICAgZWxzZSBpZiAo
Z3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKICAgICAgICAgc3RlcCAqPSBtX3BpeGVsU3Rl
cDsKLSAgICAgICAgCi0gICAgZmxvYXQgbmV3UG9zID0gbV9jdXJyZW50UG9zICsgc3RlcCAqIG11
bHRpcGxpZXI7Ci0gICAgZmxvYXQgbWF4UG9zID0gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXpl
OwotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obmV3UG9zLCBtYXhQb3MpLCAwLjBm
KSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmUp
CisgICAgICAgICAgICBzbW9vdGhTY3JvbGxTdGVwID0gbV9saW5lU3RlcDsKKyAgICAgICAgZWxz
ZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQYWdlKQorICAgICAgICAgICAgc21vb3RoU2Ny
b2xsU3RlcCA9IG1fcGFnZVN0ZXA7CisgICAgICAgIHN0ZXAgKj0gc21vb3RoU2Nyb2xsU3RlcDsK
KyAgICB9CisKKyAgICBmbG9hdCBuZXdQb3MgPSBtYXgobWluKG1fZGVzaXJlZFBvcyArIHN0ZXAs
IHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSkgLSBtX3Zpc2libGVTaXplKSwgMC4wZik7
CisgICAgLy8gRG9uJ3Qgc21vb3RoIHNjcm9sbCBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3Ig
ZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIXRoZW1lKCktPnNtb290aFNjcm9sbCgpIHx8
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHNldEN1
cnJlbnRQb3MobmV3UG9zLCB0cnVlKTsKKyAgICAvLyBGb3Iga2V5Ym9hcmQgYXV0b3JlcGVhdCBz
Y3JvbGxpbmcsIGRvbid0IHF1ZXVlIHVwIG1vcmUgdGhhbiB0d28gc2Nyb2xsCisgICAgLy8gaW5j
cmVtZW50cyBpbiBhZHZhbmNlLCBsZXN0IHdoZW4gdGhlIHVzZXIgbGlmdHMgdXAgdGhlIGtleSB3
ZSBjb250aW51ZQorICAgIC8vIHNjcm9sbGluZyBmb3IgYSB3aGlsZSB0byAiY2F0Y2ggdXAiLiAg
KFR3byBpbmNyZW1lbnRzIGlzIHRoZSBtaW5pbXVtCisgICAgLy8gY3V0b2ZmIHdlIGNhbiBoYXZl
IHdpdGhvdXQgcmlza2luZyBzY3JvbGwgdW5kZXJmbG93OyB0byBiZSBtb3JlIHByZWNpc2UsCisg
ICAgLy8gZm9yIGEga2V5IHJlcGVhdCBkZWxheSBvZiB8eHwgKiB0aGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpLCB3ZSB3aWxsCisgICAgLy8gZXZlbnR1YWxseSB1bmRlcmZsb3cgaWYgd2Ug
ZG9uJ3QgYWxsb3cgdGhlIG5ldyBwb3NpdGlvbiB0byBhZHZhbmNlIGJ5IGF0CisgICAgLy8gbGVh
c3QgKHxzdGVwfCAqIHx4fCAqIDIpKS4KKyAgICBpZiAoIWFsbG93VW5saW1pdGVkUXVldWVpbmcg
JiYgKGFicyhuZXdQb3MgLSBtX2N1cnJlbnRQb3MpID49IChhYnMoc3RlcCkgKiAyKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2V0RGVzaXJlZFBvcyhuZXdQb3MsIHNtb290
aFNjcm9sbFN0ZXApOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigp
CkBAIC0xNTMsNyArMTc0LDcgQEAgdm9pZCBTY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogYwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
ICAgIAorCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZnJhbWVSZWN0
KCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODgsMTAg
KzIwOSwxMCBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAKICAg
ICAvLyBIYW5kbGUgdGhlIGFycm93cyBhbmQgdHJhY2suCiAgICAgaWYgKHNjcm9sbChwcmVzc2Vk
UGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQot
ICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOworICAgICAgICBzdGFydEF1dG9zY3Jv
bGxUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIAotdm9pZCBTY3JvbGxiYXI6OnN0YXJ0VGltZXJJ
Zk5lZWRlZChkb3VibGUgZGVsYXkpCit2b2lkIFNjcm9sbGJhcjo6c3RhcnRBdXRvc2Nyb2xsVGlt
ZXJJZk5lZWRlZChkb3VibGUgZGVsYXkpCiB7CiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgZm9y
IHRoZSB0aHVtYi4KICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpCkBAIC0yMDgs
MjAgKzIyOSwyMCBAQCB2b2lkIFNjcm9sbGJhcjo6c3RhcnRUaW1lcklmTmVlZGVkKGRvdWJsCiAg
ICAgLy8gV2UgY2FuJ3Qgc2Nyb2xsIGlmIHdlJ3ZlIGhpdCB0aGUgYmVnaW5uaW5nIG9yIGVuZC4K
ICAgICBTY3JvbGxEaXJlY3Rpb24gZGlyID0gcHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKTsK
ICAgICBpZiAoZGlyID09IFNjcm9sbFVwIHx8IGRpciA9PSBTY3JvbGxMZWZ0KSB7Ci0gICAgICAg
IGlmIChtX2N1cnJlbnRQb3MgPT0gMCkKKyAgICAgICAgaWYgKCFtX2Rlc2lyZWRQb3MpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFBvcyA9
PSBtYXhpbXVtKCkpCisgICAgICAgIGlmIChtX2Rlc2lyZWRQb3MgPT0gbWF4aW11bSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2Nyb2xsVGltZXIuc3RhcnRPbmVTaG90
KGRlbGF5KTsKKyAgICBtX2F1dG9zY3JvbGxUaW1lci5zdGFydE9uZVNob3QoZGVsYXkpOwogfQog
Ci12b2lkIFNjcm9sbGJhcjo6c3RvcFRpbWVySWZOZWVkZWQoKQordm9pZCBTY3JvbGxiYXI6OnN0
b3BBdXRvc2Nyb2xsVGltZXJJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1fc2Nyb2xsVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgbV9zY3JvbGxUaW1lci5zdG9wKCk7CisgICAgaWYgKG1fYXV0b3Nj
cm9sbFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fYXV0b3Njcm9sbFRpbWVyLnN0b3AoKTsK
IH0KIAogU2Nyb2xsRGlyZWN0aW9uIFNjcm9sbGJhcjo6cHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rp
b24oKQpAQCAtMjQ0LDYgKzI2NSwxMDYgQEAgU2Nyb2xsR3JhbnVsYXJpdHkgU2Nyb2xsYmFyOjpw
cmVzc2VkUGFydAogICAgIHJldHVybiBTY3JvbGxCeVBhZ2U7CiB9CiAKK3ZvaWQgU2Nyb2xsYmFy
OjpzbW9vdGhTY3JvbGxUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGJhcj4qKQoreworICAgIHNtb290
aFNjcm9sbCgpOworfQorCit2b2lkIFNjcm9sbGJhcjo6c3RvcFNtb290aFNjcm9sbFRpbWVySWZO
ZWVkZWQoKQoreworICAgIGlmIChtX3Ntb290aFNjcm9sbFRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fc21vb3RoU2Nyb2xsVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbGJhcjo6c21v
b3RoU2Nyb2xsKCkKK3sKKyAgICAvLyBOb3RlIG9uIHNtb290aCBzY3JvbGxpbmcgcGVyZiB2ZXJz
dXMgbm9uLXNtb290aCBzY3JvbGxpbmcgcGVyZjoKKyAgICAvLyBUaGUgdG90YWwgdGltZSB0byBw
ZXJmb3JtIGEgY29tcGxldGUgc2Nyb2xsIGlzIGVxdWFsIHRvCisgICAgLy8gICB0MCArIDAuNXRB
IC0gdEQgKyB0UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBlcmZv
cm0gdGhlIHNjcm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0gdGhl
bWUoKS0+c21vb3RoU2Nyb2xsQWNjZWxlcmF0aW9uVGltZSgpCisgICAgLy8gICB0RCA9IHRoZW1l
KCktPnNtb290aFNjcm9sbFRpbWVyRGVsYXkoKQorICAgIC8vICAgdFMgPSBBIHZhbHVlIGxlc3Mg
dGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEKKyAgICAvLyAg
ICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9uZSBkdWUgdG8g
Y2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkgKH4wIGZvciBz
aW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBwYWdlcykuCisg
ICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxsLCB0aGUgdG90
YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyB+MCAoYWN0dWFsbHkgMTUg
bXMgYnkgZGVmYXVsdCkgZm9yIHNpbXBsZSBwYWdlcyBhbmQgcm91Z2hseSB0UyBmb3IKKyAgICAv
LyBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dCBrbm93aW5nIGluIGFkdmFuY2UgaG93IGxhcmdlIHRT
IGlzIGl0J3MgaGFyZCB0bworICAgIC8vIGRvIGJldHRlciB0aGFuIHRoaXMuICBQZXJoYXBzIHdl
IGNvdWxkIHRyeSB0byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMKKyAgICAvLyBhbmQgZm9yd2Fy
ZC1jb21wZW5zYXRlLgorCisKKyAgICAvLyBXZSB3YW50IHRvIHVwZGF0ZSB0aGUgc2Nyb2xsIHBv
c2l0aW9uIGJhc2VkIG9uIHRoZSB0aW1lIGl0J3MgYmVlbiBzaW5jZQorICAgIC8vIG91ciBsYXN0
IHVwZGF0ZS4gIFRoaXMgbWF5IGJlIGxvbmdlciB0aGFuIG91ciBpZGVhbCB0aW1lLCBlc3BlY2lh
bGx5IGlmCisgICAgLy8gdGhlIHBhZ2UgaXMgY29tcGxleCBvciB0aGUgc3lzdGVtIGlzIHNsb3cu
CisgICAgZG91YmxlIGRlc2lyZWRTY3JvbGxJbnRlcnZhbCA9IHRoZW1lKCktPnNtb290aFNjcm9s
bFRpbWVyRGVsYXkoKTsKKyAgICAvLyBUbyBhdm9pZCBmZWVsaW5nIGxhZ2d5LCBpZiB3ZSd2ZSBq
dXN0IHN0YXJ0ZWQgc21vb3RoIHNjcm9sbGluZyB3ZSBwcmV0ZW5kCisgICAgLy8gd2UndmUgYWxy
ZWFkeSBhY2NlbGVyYXRlZCBmb3Igb25lIGlkZWFsIGludGVydmFsLCBzbyB0aGF0IHdlJ2xsIHNj
cm9sbCBhdAorICAgIC8vIGxlYXN0IHNvbWUgZGlzdGFuY2UgaW1tZWRpYXRlbHkuCisgICAgZG91
YmxlIGxhc3RTY3JvbGxJbnRlcnZhbCA9IG1fc21vb3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5ID8g
KFdURjo6Y3VycmVudFRpbWUoKSAtIG1fbGFzdFNtb290aFNjcm9sbFRpbWUpIDogZGVzaXJlZFNj
cm9sbEludGVydmFsOworCisgICAgLy8gRmlndXJlIG91dCBob3cgZmFyIHdlJ3ZlIGFjdHVhbGx5
IHRyYXZlbGVkIGFuZCB1cGRhdGUgb3VyIGN1cnJlbnQKKyAgICAvLyB2ZWxvY2l0eS4KKyAgICBm
bG9hdCBkaXN0YW5jZVRyYXZlbGVkOworICAgIGlmIChtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxv
Y2l0eSA8IG1fc21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgIC8vIFdlIGFj
Y2VsZXJhdGUgYXQgYSBjb25zdGFudCByYXRlIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHZl
bG9jaXR5LgorICAgICAgICAvLyB0aGVtZSgpLT5zbW9vdGhTY3JvbGxBY2NlbGVyYXRpb25UaW1l
KCkgaXMgdGhlIHRpbWUgd2UnbGwgdGFrZSB0bworICAgICAgICAvLyBhY2NlbGVyYXRlIGZyb20g
MCB0byB0aGF0IHZlbG9jaXR5LiAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIHdpbGwKKyAgICAgICAg
Ly8gcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNlZCBhY2NlbGVyYXRpb24gZWZmZWN0LgorICAgICAg
ICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gbV9zbW9vdGhTY3JvbGxEZXNpcmVkVmVsb2NpdHkg
LyB0aGVtZSgpLT5zbW9vdGhTY3JvbGxBY2NlbGVyYXRpb25UaW1lKCk7CisKKyAgICAgICAgLy8g
RmlndXJlIG91dCB3aGV0aGVyIGNvbnRhbnQgYWNjZWxlcmF0aW9uIGhhcyBjYXVzZWQgdXMgdG8g
cmVhY2ggb3VyCisgICAgICAgIC8vIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgcG90
ZW50aWFsVmVsb2NpdHlDaGFuZ2UgPSBhY2NlbGVyYXRpb25SYXRlICogbGFzdFNjcm9sbEludGVy
dmFsOworICAgICAgICBmbG9hdCBwb3RlbnRpYWxOZXdWZWxvY2l0eSA9IG1fc21vb3RoU2Nyb2xs
Q3VycmVudFZlbG9jaXR5ICsgcG90ZW50aWFsVmVsb2NpdHlDaGFuZ2U7CisgICAgICAgIGlmIChw
b3RlbnRpYWxOZXdWZWxvY2l0eSA+IG1fc21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9jaXR5KSB7Cisg
ICAgICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHkgYXQgc29tZSBwb2lu
dCBiZXR3ZWVuIG91ciBsYXN0CisgICAgICAgICAgICAvLyB1cGRhdGUgYW5kIG5vdy4gIFRoZSBk
aXN0YW5jZSB0cmF2ZWxlZCBjYW4gYmUgY2FsY3VsYXRlZCBpbiB0d28KKyAgICAgICAgICAgIC8v
IHBpZWNlczogdGhlIGRpc3RhbmNlIHRyYXZlbGVkIHdoaWxlIGFjY2VsZXJhdGluZywgYW5kIHRo
ZQorICAgICAgICAgICAgLy8gZGlzdGFuY2UgdHJhdmVsZWQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHRh
cmdldCB2ZWxvY2l0eS4KKyAgICAgICAgICAgIGZsb2F0IGFjdHVhbFZlbG9jaXR5Q2hhbmdlID0g
bV9zbW9vdGhTY3JvbGxEZXNpcmVkVmVsb2NpdHkgLSBtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxv
Y2l0eTsKKyAgICAgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvbkludGVydmFsID0gYWN0dWFsVmVs
b2NpdHlDaGFuZ2UgLyBhY2NlbGVyYXRpb25SYXRlOworICAgICAgICAgICAgLy8gVGhlIGRpc3Rh
bmNlIHRyYXZlbGVkIHVuZGVyIGNvbnN0YW50IGFjY2VsZXJhdGlvbiBpcyB0aGUgYXJlYQorICAg
ICAgICAgICAgLy8gdW5kZXIgYSBsaW5lIHNlZ21lbnQgd2l0aCBhIGNvbnN0YW50IHJpc2luZyBz
bG9wZS4gIEJyZWFrIHRoaXMKKyAgICAgICAgICAgIC8vIGludG8gYSB0cmlhbmd1bGFyIHBvcnRp
b24gYXRvcCBhIHJlY3Rhbmd1bGFyIHBvcnRpb24gYW5kIHN1bS4KKyAgICAgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSAoKG1fc21vb3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5ICsgKGFjdHVhbFZl
bG9jaXR5Q2hhbmdlIC8gMikpICogYWNjZWxlcmF0aW9uSW50ZXJ2YWwpOworICAgICAgICAgICAg
Ly8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGF0IHRoZSB0YXJnZXQgdmVsb2NpdHkgaXMgc2ltcGx5
CisgICAgICAgICAgICAvLyAodGFyZ2V0IHZlbG9jaXR5KSAqIChyZW1haW5pbmcgdGltZSBhZnRl
ciBhY2NlbGVyYXRpbmcpLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCArPSAobV9zbW9v
dGhTY3JvbGxEZXNpcmVkVmVsb2NpdHkgKiAobGFzdFNjcm9sbEludGVydmFsIC0gYWNjZWxlcmF0
aW9uSW50ZXJ2YWwpKTsKKyAgICAgICAgICAgIG1fc21vb3RoU2Nyb2xsQ3VycmVudFZlbG9jaXR5
ID0gbV9zbW9vdGhTY3JvbGxEZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBDb25zdGFudCBhY2NlbGVyYXRpb24gdGhyb3VnaCB0aGUgZW50aXJlIHRpbWUg
aW50ZXJ2YWwuCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKG1fc21vb3RoU2Nyb2xs
Q3VycmVudFZlbG9jaXR5ICsgKHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogbGFzdFNj
cm9sbEludGVydmFsOworICAgICAgICAgICAgbV9zbW9vdGhTY3JvbGxDdXJyZW50VmVsb2NpdHkg
PSBwb3RlbnRpYWxOZXdWZWxvY2l0eTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5LCBzbyB0aGUgZGlz
dGFuY2Ugd2UndmUKKyAgICAgICAgLy8gdHJhdmVsZWQgaXMgc2ltcGx5IChjdXJyZW50IHZlbG9j
aXR5KSAqIChlbGFwc2VkIHRpbWUpLgorICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gbV9zbW9v
dGhTY3JvbGxDdXJyZW50VmVsb2NpdHkgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIC8v
IElmIG91ciBkZXNpcmVkIHZlbG9jaXR5IGhhcyBkZWNyZWFzZWQsIGRyb3AgdGhlIGN1cnJlbnQg
dmVsb2NpdHkgdG9vLgorICAgICAgICBtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxvY2l0eSA9IG1f
c21vb3RoU2Nyb2xsRGVzaXJlZFZlbG9jaXR5OworICAgIH0KKworICAgIC8vIE5vdyB1cGRhdGUg
dGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQuCisgICAg
aWYgKGRpc3RhbmNlVHJhdmVsZWQgPj0gYWJzKG1fZGVzaXJlZFBvcyAtIG1fY3VycmVudFBvcykp
IHsKKyAgICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVz
aXJlZCBwb3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAg
ICAgc2V0Q3VycmVudFBvcyhtX2Rlc2lyZWRQb3MsIGZhbHNlKTsKKyAgICAgICAgbV9zbW9vdGhT
Y3JvbGxDdXJyZW50VmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCB5
ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0IGFuZCBzZXQgdXAg
dGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAobV9jdXJyZW50UG9zID4g
bV9kZXNpcmVkUG9zKQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRy
YXZlbGVkOworICAgICAgICBzZXRDdXJyZW50UG9zKG1fY3VycmVudFBvcyArIGRpc3RhbmNlVHJh
dmVsZWQsIGZhbHNlKTsKKyAgICAgICAgbV9zbW9vdGhTY3JvbGxUaW1lci5zdGFydE9uZVNob3Qo
ZGVzaXJlZFNjcm9sbEludGVydmFsKTsKKyAgICAgICAgbV9sYXN0U21vb3RoU2Nyb2xsVGltZSA9
IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9Cit9CisKIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1
bWIoaW50IHBvcykKIHsKICAgICAvLyBEcmFnIHRoZSB0aHVtYi4KQEAgLTI1NywxMSArMzc4LDE3
IEBAIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcykKICAgICBlbHNlIGlmIChkZWx0
YSA8IDApCiAgICAgICAgIGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVsdGEpOwogICAgIGlmIChk
ZWx0YSkKLSAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3Mg
KyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbikpOworICAgICAgICBz
ZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGlt
dW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFy
OjpzZXRDdXJyZW50UG9zKGZsb2F0IHBvcykKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9z
KGZsb2F0IHBvcywgYm9vbCByZXNldFNtb290aFNjcm9sbCkKIHsKKyAgICBpZiAocmVzZXRTbW9v
dGhTY3JvbGwpIHsKKyAgICAgICAgc3RvcFNtb290aFNjcm9sbFRpbWVySWZOZWVkZWQoKTsKKyAg
ICAgICAgbV9kZXNpcmVkUG9zID0gcG9zOworICAgICAgICBtX3Ntb290aFNjcm9sbEN1cnJlbnRW
ZWxvY2l0eSA9IDA7CisgICAgfQorCiAgICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjc3LDYgKzQwNCwzNCBAQCBib29sIFNjcm9sbGJhcjo6
c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU2Ny
b2xsYmFyOjpzZXREZXNpcmVkUG9zKGZsb2F0IHBvcywgZmxvYXQgc3RlcCkKK3sKKyAgICBpZiAo
cG9zID09IG1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kZXNp
cmVkUG9zID0gcG9zOworICAgIGlmIChtX2N1cnJlbnRQb3MgPT0gbV9kZXNpcmVkUG9zKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGb3Igd2hlZWwgc2Nyb2xscywgd2Ugc2V0IHRo
ZSB0YXJnZXQgdmVsb2NpdHkgYmFzZWQgb24gaG93IGZhciBhd2F5IGZyb20KKyAgICAvLyB0aGUg
dGFyZ2V0IHBvc2l0aW9uIHdlIGFyZS4gIFRoaXMgbWFrZXMgd2hlZWwgc2Nyb2xscyBmZWVsIHNp
bWlsYXIgdG8gdGhlCisgICAgLy8gb3RoZXIgdHlwZXMgb2Ygc2Nyb2xscywgc2luY2UgaW4gYm90
aCBjYXNlcyB3ZSdyZSBzZXR0aW5nIHRoZSB2ZWxvY2l0eQorICAgIC8vIHN1Y2ggdGhhdCBpbiB0
aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIHNlY29uZHMgd2UnbGwgcmVhY2ggdGhlIG5l
dworICAgIC8vIGRlc2lyZWQgcG9zaXRpb24gKHNlZSBiZWxvdykuCisgICAgaWYgKCFzdGVwKQor
ICAgICAgICBzdGVwID0gYWJzKG1fZGVzaXJlZFBvcyAtIG1fY3VycmVudFBvcyk7CisKKyAgICAv
LyBXaGVuIGF1dG9zY3JvbGxpbmcsIHxtX2F1dG9zY3JvbGxUaW1lcnwgd2lsbCBlbmQgdXAgY2Fs
bGluZyBoZXJlIHRvCisgICAgLy8gaW5jcmVtZW50IHxtX2Rlc2lyZWRQb3N8IGJ5IHxzdGVwfCBl
dmVyeQorICAgIC8vIHRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgc2Vjb25kcy4gIElm
IHdlIHNldCB0aGUgZGVzaXJlZCB2ZWxvY2l0eQorICAgIC8vIHRvIGV4YWN0bHkgdGhpcyByYXRl
LCBzbW9vdGggc2Nyb2xsaW5nIHdpbGwgbmVpdGhlciByYWNlIGFoZWFkIChhbmQgdGhlbgorICAg
IC8vIGhhdmUgdG8gc2xvdyBkb3duKSBub3IgbGFnIGJlaGluZC4KKyAgICBtX3Ntb290aFNjcm9s
bERlc2lyZWRWZWxvY2l0eSA9IHN0ZXAgLyB0aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgp
OworICAgIGlmICghbV9zbW9vdGhTY3JvbGxUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBzbW9v
dGhTY3JvbGwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBTY3JvbGxiYXI6OnNldEhv
dmVyZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKIHsKICAgICBpZiAocGFydCA9PSBtX2hvdmVy
ZWRQYXJ0KQpAQCAtMzA2LDcgKzQ2MSw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNv
bnN0IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKICAg
ICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2dCkp
Ci0gICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAgICBz
ZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgdHJ1ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgbW92ZVRodW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9z
KCkpLngoKSA6CkBAIC0zMjQsMTYgKzQ3OSwxNiBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VNb3Zl
ZChjb25zdCBQbGF0Zm9yCiAgICAgICAgICAgICBpZiAocGFydCA9PSBtX3ByZXNzZWRQYXJ0KSB7
CiAgICAgICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGlzIG1vdmluZyBiYWNrIG92ZXIgdGhlIHBy
ZXNzZWQgcGFydC4gIFdlCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBzdGFydCB1cCB0aGUg
dGltZXIgYWN0aW9uIGFnYWluLgotICAgICAgICAgICAgICAgIHN0YXJ0VGltZXJJZk5lZWRlZCh0
aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKTsKKyAgICAgICAgICAgICAgICBzdGFydEF1
dG9zY3JvbGxUaW1lcklmTmVlZGVkKHRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkpOwog
ICAgICAgICAgICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMsIG1fcHJlc3NlZFBh
cnQpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2hvdmVyZWRQYXJ0ID09IG1fcHJlc3NlZFBh
cnQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbW91c2UgaXMgbGVhdmluZyB0aGUgcHJlc3Nl
ZCBwYXJ0LiAgS2lsbCBvdXIgdGltZXIKICAgICAgICAgICAgICAgICAvLyBpZiBuZWVkZWQuCi0g
ICAgICAgICAgICAgICAgc3RvcFRpbWVySWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAgICBzdG9w
QXV0b3Njcm9sbFRpbWVySWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICB0aGVtZSgpLT5pbnZh
bGlkYXRlUGFydCh0aGlzLCBtX3ByZXNzZWRQYXJ0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fSAKLSAgICAgICAgCisKICAgICAgICAgc2V0SG92ZXJlZFBhcnQocGFydCk7CiAgICAgfSAKIApA
QCAtMzUwLDcgKzUwNSw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZVVwKCkKIHsKICAgICBzZXRQ
cmVzc2VkUGFydChOb1BhcnQpOwogICAgIG1fcHJlc3NlZFBvcyA9IDA7Ci0gICAgc3RvcFRpbWVy
SWZOZWVkZWQoKTsKKyAgICBzdG9wQXV0b3Njcm9sbFRpbWVySWZOZWVkZWQoKTsKIAogICAgIGlm
IChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+c2V0TW91
c2VQcmVzc2VkKGZhbHNlKTsKQEAgLTM2Niw3ICs1MjEsNyBAQCBib29sIFNjcm9sbGJhcjo6bW91
c2VEb3duKGNvbnN0IFBsYXRmb3JtCiAKICAgICBzZXRQcmVzc2VkUGFydCh0aGVtZSgpLT5oaXRU
ZXN0KHRoaXMsIGV2dCkpOwogICAgIGludCBwcmVzc2VkUG9zID0gKG9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9z
KCkpLngoKSA6IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkpLnkoKSk7Ci0g
ICAgCisKICAgICBpZiAoKG1fcHJlc3NlZFBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBtX3ByZXNz
ZWRQYXJ0ID09IEZvcndhcmRUcmFja1BhcnQpICYmIHRoZW1lKCktPnNob3VsZENlbnRlck9uVGh1
bWIodGhpcywgZXZ0KSkgewogICAgICAgICBzZXRIb3ZlcmVkUGFydChUaHVtYlBhcnQpOwogICAg
ICAgICBzZXRQcmVzc2VkUGFydChUaHVtYlBhcnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJ
KHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9u
KGludCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9z
KGludCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAg
ICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyID0gMS4wZiwgYm9vbCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nID0gdHJ1ZSk7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xMzUsMTQgKzEzNSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOwogCiAgICAgdm9pZCBhdXRvc2Ny
b2xsVGltZXJGaXJlZChUaW1lcjxTY3JvbGxiYXI+Kik7Ci0gICAgdm9pZCBzdGFydFRpbWVySWZO
ZWVkZWQoZG91YmxlIGRlbGF5KTsKLSAgICB2b2lkIHN0b3BUaW1lcklmTmVlZGVkKCk7CisgICAg
dm9pZCBzdGFydEF1dG9zY3JvbGxUaW1lcklmTmVlZGVkKGRvdWJsZSBkZWxheSk7CisgICAgdm9p
ZCBzdG9wQXV0b3Njcm9sbFRpbWVySWZOZWVkZWQoKTsKICAgICB2b2lkIGF1dG9zY3JvbGxQcmVz
c2VkUGFydChkb3VibGUgZGVsYXkpOwogICAgIFNjcm9sbERpcmVjdGlvbiBwcmVzc2VkUGFydFNj
cm9sbERpcmVjdGlvbigpOwogICAgIFNjcm9sbEdyYW51bGFyaXR5IHByZXNzZWRQYXJ0U2Nyb2xs
R3JhbnVsYXJpdHkoKTsKICAgICAKKyAgICB2b2lkIHNtb290aFNjcm9sbFRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsYmFyPiopOworICAgIHZvaWQgc3RvcFNtb290aFNjcm9sbFRpbWVySWZOZWVkZWQo
KTsKKyAgICB2b2lkIHNtb290aFNjcm9sbCgpOworCiAgICAgdm9pZCBtb3ZlVGh1bWIoaW50IHBv
cyk7Ci0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CisgICAgYm9vbCBzZXRDdXJy
ZW50UG9zKGZsb2F0IHBvcywgYm9vbCByZXNldFNtb290aFNjcm9sbCk7CisgICAgYm9vbCBzZXRE
ZXNpcmVkUG9zKGZsb2F0IHBvcywgZmxvYXQgc3RlcCk7CiAKICAgICBTY3JvbGxiYXJDbGllbnQq
IG1fY2xpZW50OwogICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CkBAIC0x
NTIsNiArMTU3LDEwIEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV92aXNpYmxlU2l6ZTsKICAgICBp
bnQgbV90b3RhbFNpemU7CiAgICAgZmxvYXQgbV9jdXJyZW50UG9zOworICAgIGZsb2F0IG1fZGVz
aXJlZFBvczsKKyAgICBmbG9hdCBtX3Ntb290aFNjcm9sbEN1cnJlbnRWZWxvY2l0eTsgIC8vIElu
IHB4L3MKKyAgICBmbG9hdCBtX3Ntb290aFNjcm9sbERlc2lyZWRWZWxvY2l0eTsgIC8vIEluIHB4
L3MKKyAgICBkb3VibGUgbV9sYXN0U21vb3RoU2Nyb2xsVGltZTsKICAgICBmbG9hdCBtX2RyYWdP
cmlnaW47CiAgICAgaW50IG1fbGluZVN0ZXA7CiAgICAgaW50IG1fcGFnZVN0ZXA7CkBAIC0xNjMs
NyArMTcyLDggQEAgcHJvdGVjdGVkOgogICAgIAogICAgIGJvb2wgbV9lbmFibGVkOwogCi0gICAg
VGltZXI8U2Nyb2xsYmFyPiBtX3Njcm9sbFRpbWVyOworICAgIFRpbWVyPFNjcm9sbGJhcj4gbV9h
dXRvc2Nyb2xsVGltZXI7CisgICAgVGltZXI8U2Nyb2xsYmFyPiBtX3Ntb290aFNjcm9sbFRpbWVy
OwogICAgIGJvb2wgbV9vdmVybGFwc1Jlc2l6ZXI7CiAgICAgCiAgICAgYm9vbCBtX3N1cHByZXNz
SW52YWxpZGF0aW9uOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCShyZXZpc2lv
biA1MjAzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtODUsNiArODUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgZG91YmxlIGluaXRp
YWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMjU7IH0KICAgICB2aXJ0dWFsIGRv
dWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMDU7IH0KIAorICAgIHZpcnR1
YWwgYm9vbCBzbW9vdGhTY3JvbGwoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBkb3Vi
bGUgc21vb3RoU2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMDE7IH0KKyAgICB2aXJ0dWFs
IGRvdWJsZSBzbW9vdGhTY3JvbGxBY2NlbGVyYXRpb25UaW1lKCkgeyByZXR1cm4gYXV0b3Njcm9s
bFRpbWVyRGVsYXkoKTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNj
cm9sbGJhciopIHt9CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xs
YmFyKikge30KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDUyMDM2
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAyLDEwICs0MDIsMTAgQEAgaW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dAogICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCkt
Pmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CiB9CiAKLWJvb2wgUmVuZGVyQm94Ojpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jvb2wgUmVuZGVyQm94
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZywg
Tm9kZSoqIHN0b3BOb2RlKQogewogICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBp
ZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsK
KyAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZykpIHsKICAgICAgICAgaWYgKHN0b3BOb2RlKQogICAg
ICAgICAgICAgKnN0b3BOb2RlID0gbm9kZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQx
Niw3ICs0MTYsNyBAQCBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAK
ICAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmIChiICYmICFi
LT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CisgICAgICAgIHJldHVybiBiLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgYWxsb3dVbmxpbWl0ZWRRdWV1
ZWluZywgc3RvcE5vZGUpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdDsKICAgICBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYs
IE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIGJvb2wg
YWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyA9IHRydWUsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogICAg
IGJvb2wgY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNTIsNyArMjA1Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKQogewog
ICAgIGJvb2wgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlOwogICAgIGJvb2wgZGlkVmVydGlj
YWxTY3JvbGwgPSBmYWxzZTsKQEAgLTIwNjEsMTMgKzIwNjEsMTMgQEAgYm9vbCBSZW5kZXJMYXll
cjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Ny
b2xsQnlEb2N1bWVudCkgewogICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIGZvciB0aGUgU2Ny
b2xsQnlEb2N1bWVudCBncmFudWxhcml0eS4gQSBkb2N1bWVudCBzY3JvbGwgY2FuIG9ubHkgYmUg
dXAgCiAgICAgICAgICAgICAvLyBvciBkb3duIGFuZCBpbiBib3RoIGNhc2VzIHRoZSBob3Jpem9u
dGFsIGJhciBnb2VzIGFsbCB0aGUgd2F5IHRvIHRoZSBsZWZ0LgotICAgICAgICAgICAgZGlkSG9y
aXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1l
bnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJh
ci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIsIGFsbG93
VW5saW1pdGVkUXVldWVpbmcpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRpZEhvcml6
b250YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKTsKKyAgICAgICAgICAgIGRpZEhvcml6b250YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBhbGxvd1VubGltaXRlZFF1ZXVl
aW5nKTsKICAgICB9CiAKICAgICBpZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9s
bCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwor
ICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIsIGFsbG93VW5saW1pdGVkUXVldWVpbmcpOwogCiAgICAgcmV0
dXJuIChkaWRIb3Jpem9udGFsU2Nyb2xsIHx8IGRpZFZlcnRpY2FsU2Nyb2xsKTsKIH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogCi0gICAg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEuMGYpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBib29sIGFsbG93VW5saW1pdGVk
UXVldWVpbmcgPSB0cnVlKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoKTsKIAogICAgIHZvaWQgcmVz
aXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEludFNpemUmKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMCw5ICs1
MTAsOSBAQCBib29sIFJlbmRlckxpc3RCb3g6Omxpc3RJbmRleElzVmlzaWJsZShpCiAgICAgcmV0
dXJuIGluZGV4ID49IG1faW5kZXhPZmZzZXQgJiYgaW5kZXggPCBtX2luZGV4T2Zmc2V0ICsgbnVt
VmlzaWJsZUl0ZW1zKCk7CiB9CiAKLWJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyLCBOb2RlKiopCitib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciwgYm9vbCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nLCBOb2RlKiopCiB7Ci0gICAgcmV0
dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKTsKKyAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIGFsbG93VW5saW1pdGVkUXVldWVpbmcpOwogfQogCiB2
b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgpCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9s
KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEuMGYsIGJvb2wgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZyA9IHRydWUsIE5vZGUq
KiBzdG9wTm9kZSA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAg
ICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jv
b3RMaW5lQm94KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
clRoZW1lLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXJUaGVtZS5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSB7IHJldHVy
biBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRl
bGF5KCk7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0
dXJuIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgp
OyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc21vb3RoU2Nyb2xsKCkgeyByZXR1cm4gU2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNtb290aFNjcm9sbCgpOyB9CisgICAgdmlydHVhbCBkb3Vi
bGUgc21vb3RoU2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIFNjcm9sbGJhclRoZW1lOjpuYXRp
dmVUaGVtZSgpLT5zbW9vdGhTY3JvbGxUaW1lckRlbGF5KCk7IH0KKyAgICB2aXJ0dWFsIGRvdWJs
ZSBzbW9vdGhTY3JvbGxBY2NlbGVyYXRpb25UaW1lKCkgeyByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6
Om5hdGl2ZVRoZW1lKCktPnNtb290aFNjcm9sbEFjY2VsZXJhdGlvblRpbWUoKTsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7IHJl
dHVybiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+cmVnaXN0ZXJTY3JvbGxiYXIoc2Ny
b2xsYmFyKTsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKSB7IHJldHVybiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+dW5y
ZWdpc3RlclNjcm9sbGJhcihzY3JvbGxiYXIpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA1MjAz
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwOCwxMiArODA4LDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzZXRTY3IKICAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRTY3Jv
bGxUb3AobmV3VG9wKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBhbGxvd1Vu
bGltaXRlZFF1ZXVlaW5nLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAo
bGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KSkKKyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyLCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIGFsbG93VW5saW1pdGVkUXVldWVp
bmcsIHN0b3BOb2RlKTsKIH0KIAogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29u
dHJvbFNpemUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsVG9wKGludCk7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgTm9kZSoqIHN0b3BOb2Rl
ID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgYm9vbCBhbGxvd1VubGltaXRlZFF1
ZXVlaW5nID0gdHJ1ZSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CiAKICAgICBpbnQgdGV4dEJsb2Nr
V2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxv
YXQgY2hhcldpZHRoKSBjb25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjAzNikK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAwOS0xMi0xMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290
aCBzY3JvbGxpbmcNCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1Ng0KKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6IERvbid0IHF1ZXVl
IHNjcm9sbHMgZnJvbSBrZXlib2FyZCBhdXRvcmVwZWF0LgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXlib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOiBE
b24ndCBxdWV1ZSBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKiBz
cmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcDogVXBkYXRlIGNvbW1lbnRzIG5vdyB0aGF0
IHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFdmVu
dEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudCk6CisKIDIwMDktMTItMTEgIE5hdGUgQ2hhcGluICA8
amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIu
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA1MjAzNikK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MzIsMTEgKzczMiwxMiBAQCBib29sIFdlYlZpZXdJbXBsOjpzY3JvbGxWaWV3V2l0aEtleWJv
YXJkCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gcHJvcGFnYXRl
U2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIHJldHVybiBw
cm9wYWdhdGVTY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgZmFsc2Up
OwogfQogCiBib29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3Jv
bGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93VW5saW1pdGVkUXVldWVpbmcpCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCkBAIC03NDQsMTEgKzc0NSwxMyBAQCBib29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3Jv
bGwoU2Nyb2xsCiAKICAgICBib29sIHNjcm9sbEhhbmRsZWQgPQogICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxHcmFudWxhcml0eSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVs
YXJpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
b3dVbmxpbWl0ZWRRdWV1ZWluZyk7CiAgICAgRnJhbWUqIGN1cnJlbnRGcmFtZSA9IGZyYW1lOwog
ICAgIHdoaWxlICghc2Nyb2xsSGFuZGxlZCAmJiBjdXJyZW50RnJhbWUpIHsKICAgICAgICAgc2Ny
b2xsSGFuZGxlZCA9IGN1cnJlbnRGcmFtZS0+dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbEdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKTsK
ICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLT50cmVlKCktPnBhcmVudCgpOwog
ICAgIH0KICAgICByZXR1cm4gc2Nyb2xsSGFuZGxlZDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAkocmV2aXNpb24gNTIwMzYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBUcmllcyB0byBzY3JvbGwgYSBmcmFtZSBvciBhbnkgcGFyZW50IG9mIGEgZnJhbWUuIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgdmlldwogICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAgICBib29sIHBy
b3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdy
YW51bGFyaXR5KTsKKyAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5LCBib29sIGFsbG93VW5saW1pdGVkUXVl
dWVpbmcgPSB0cnVlKTsKIAogICAgIC8vIEhBQ0s6IGN1cnJlbnRJbnB1dEV2ZW50KCkgaXMgZm9y
IENocm9tZUNsaWVudEltcGw6OnNob3coKSwgdW50aWwgd2UgY2FuCiAgICAgLy8gZml4IFdlYktp
dCB0byBwYXNzIGVub3VnaCBpbmZvcm1hdGlvbiB1cCBpbnRvIENocm9tZUNsaWVudDo6c2hvdygp
IHNvIHdlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9y
eS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2
ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDUyMDM2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93
aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTMgKzM5
NiwxNiBAQCBXZWJNb3VzZVdoZWVsRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6CiAKICAgICAv
LyBDb252ZXJ0IHdoZWVsIGRlbHRhIGFtb3VudCB0byBhIG51bWJlciBvZiBwaXhlbHMgdG8gc2Ny
b2xsLgogICAgIC8vCi0gICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVy
IGxpbmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2YgdGhlCi0gICAgLy8gY3VycmVudCBsaW5l
LCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaCB0
aGUKLSAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVudCBwYWdlcy4gIElFIDcgaXMgfjUwIHB4
L2xpbmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQotICAgIC8vIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkg
YnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIFNpbmNlIElFIDcgaGFzIGEgc21vb3RoaW5nCi0gICAg
Ly8gYWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xpZ2h0bHkg
bGFyZ2VyIHNjcm9sbCB2YWx1ZXMKLSAgICAvLyB3aXRob3V0IGZlZWxpbmcgamVya3kuICBIZXJl
IHdlIHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdAotICAgIC8vIHNjcm9s
bCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgorICAgIC8vIEhvdyBtYW55
IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgRmlyZWZveCB1c2VzIHRoZSBoZWln
aHQgb2YKKyAgICAvLyB0aGUgY3VycmVudCBsaW5lLCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFu
Y2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaAorICAgIC8vIHRoZSBwYWdlIG9yIGdvIHRvIGRp
ZmZlcmVudCBwYWdlcy4gIElFIDggaXMgfjYwIHB4L2xpbmUsIGFsdGhvdWdoIHRoZQorICAgIC8v
IHZhbHVlIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkgYnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIEFs
c28sIElFIGRlZmF1bHRzCisgICAgLy8gdG8gc21vb3RoIHNjcm9sbGluZyB3aGlsZSBGaXJlZm94
IGRvZXNuJ3QsIHNvIGl0IGNhbiBnZXQgYXdheSB3aXRoCisgICAgLy8gc29tZXdoYXQgbGFyZ2Vy
IHNjcm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGFzIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAw
CisgICAgLy8gcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdCBzY3JvbGwgYW1vdW50IGlz
IHRocmVlIGxpbmVzIHBlciB3aGVlbAorICAgIC8vIHRpY2spLiAgRXZlbiB0aG91Z2ggd2UgaGF2
ZSBzbW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UKKyAgICAvLyBh
cyBJRSBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhl
ciB0aGFuIHlvdSB3YW50CisgICAgLy8gd2hpbGUgcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAg
ICAgd2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdo
ZWVsRGVsdGE7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYktpdC9ndGsvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMTItMTEgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwOiBEb24ndCBxdWV1ZSBzY3JvbGxzIGZyb20ga2V5Ym9hcmQg
YXV0b3JlcGVhdC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21vdmVfY3Vyc29yKToK
KwogMjAwOS0xMi0xMCAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNv
bGxhYm9yYS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTMsOCAr
OTUzLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX21vdgogICAgIH0K
IAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Ny
b2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSkpCi0gICAgICAgIGZyYW1lLT52aWV3
KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBpZiAoIWZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgZmFsc2Up
KQorICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
ZmFsc2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxv
Zw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjAzNikK
KysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMDktMTItMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Ny
b2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MjM1NgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVZpZXcubW06IERvbid0IHF1ZXVlIHNj
cm9sbHMgZnJvbSBrZXlib2FyZCBhdXRvcmVwZWF0LgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcg
X3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246Z3JhbnVsYXJpdHk6YWxsb3dVbmxpbWl0ZWRRdWV1
ZWluZzpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0JlZ2lubmluZ09mRG9j
dW1lbnRdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0VuZE9mRG9jdW1lbnRd
KToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9wYWdlVmVydGljYWxseTpdKToKKyAgICAgICAg
KC1bV2ViRnJhbWVWaWV3IF9wYWdlSG9yaXpvbnRhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFt
ZVZpZXcgX3Njcm9sbExpbmVWZXJ0aWNhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcg
X3Njcm9sbExpbmVIb3Jpem9udGFsbHk6XSk6CisKIDIwMDktMTItMTAgIEpvbiBIb25leWN1dHQg
IDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWMgYnVpbGQgZml4LiBVbnJldmll
d2VkLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQ0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0JKHJldmlzaW9uIDUyMDM2
KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTE5LDcgKzUxOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhO
U00KICAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1dpbmRvd107CiB9CiAKLS0gKEJPT0wpX3Njcm9s
bE92ZXJmbG93SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJp
dHk6KFNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CistIChCT09MKV9zY3JvbGxPdmVyZmxv
d0luRGlyZWN0aW9uOihTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihTY3Jv
bGxHcmFudWxhcml0eSlncmFudWxhcml0eSBhbGxvd1VubGltaXRlZFF1ZXVlaW5nOihCT09MKWFs
bG93VW5saW1pdGVkUXVldWVpbmcKIHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9u
bHkgYXBwbGljYWJsZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBp
ZiAoIVtbc2VsZiBkb2N1bWVudFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNz
XV0pCkBAIC01MjcsMTIgKzUyNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9t
Q2xhc3MoTlNNCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBy
ZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBhbGxvd1VubGltaXRlZFF1ZXVlaW5nKTsKIH0KIAogLSAoQk9PTClfc2Nyb2xs
VG9CZWdpbm5pbmdPZkRvY3VtZW50CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0lu
RGlyZWN0aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnRdKQorICAgIGlm
IChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxVcCBncmFudWxhcml0eTpT
Y3JvbGxCeURvY3VtZW50IGFsbG93VW5saW1pdGVkUXVldWVpbmc6WUVTXSkKICAgICAgICAgcmV0
dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkKICAgICAgICAgcmV0dXJu
IE5POwpAQCAtNTQyLDcgKzU0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21D
bGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRvY3VtZW50CiB7Ci0gICAgaWYgKFtz
ZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Ny
b2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9u
OlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBhbGxvd1VubGltaXRlZFF1
ZXVlaW5nOllFU10pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgaWYgKCFbc2VsZiBfaGFzU2Ny
b2xsQmFyc10pCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTYxOSw3ICs2MTksNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAKIC0gKEJPT0wpX3BhZ2VWZXJ0aWNh
bGx5OihCT09MKXVwCiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9u
OnVwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZV0pCisg
ICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBT
Y3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZSBhbGxvd1VubGltaXRlZFF1ZXVlaW5n
Ok5PXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKICAgICBpZiAoIVtzZWxmIF9oYXNTY3Jv
bGxCYXJzXSkKQEAgLTYzMSw3ICs2MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNG
cm9tQ2xhc3MoTlNNCiAKIC0gKEJPT0wpX3BhZ2VIb3Jpem9udGFsbHk6KEJPT0wpbGVmdAogewot
ICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVm
dCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZV0pCisgICAgaWYgKFtzZWxm
IF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmln
aHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlIGFsbG93VW5saW1pdGVkUXVldWVpbmc6Tk9dKQog
ICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCkBA
IC02NDMsNyArNjQzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TQogCiAtIChCT09MKV9zY3JvbGxMaW5lVmVydGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChb
c2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93
biBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZs
b3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3Jv
bGxCeUxpbmUgYWxsb3dVbmxpbWl0ZWRRdWV1ZWluZzpOT10pCiAgICAgICAgIHJldHVybiBZRVM7
CiAKICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkKQEAgLTY1NSw3ICs2NTUsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAKIC0gKEJPT0wpX3Njcm9s
bExpbmVIb3Jpem9udGFsbHk6KEJPT0wpbGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3Zl
cmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFy
aXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0
aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlM
aW5lIGFsbG93VW5saW1pdGVkUXVldWVpbmc6Tk9dKQogICAgICAgICByZXR1cm4gWUVTOwogCiAg
ICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZp
c2lvbiA1MjAzNikKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzM2LDcgKzEzMzYsNyBAQCBib29sIFFXZWJQYWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xs
aW5nKFFLCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1
cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBmYWxzZSk7CiB9CiAKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hF
Q0soNCwgNiwgMCkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjAzNikKKysrIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0xMSAgUGV0ZXIgS2Fz
dGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBBcGkv
cXdlYnBhZ2UuY3BwOiBEb24ndCBxdWV1ZSBzY3JvbGxzIGZyb20ga2V5Ym9hcmQgYXV0b3JlcGVh
dC4KKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xsaW5nKToKKwogMjAwOS0x
Mi0xMSAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViS2l0L3dpbi9DaGFu
Z2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNTIw
MzYpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDA5LTEyLTExICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3Ro
IHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzIzNTYKKworICAgICAgICAqIFdlYlZpZXcuY3BwOiBEb24ndCBxdWV1ZSBzY3JvbGxzIGZy
b20ga2V5Ym9hcmQgYXV0b3JlcGVhdC4KKyAgICAgICAgKFdlYlZpZXc6OmtleURvd24pOgorCiAy
MDA5LTEyLTExICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDUyMDM2KQor
KysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwOSw3ICsxODA5
LDcgQEAgYm9vbCBXZWJWaWV3OjprZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5QwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVy
biBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIGZhbHNlKTsKIH0KIAogYm9vbCBXZWJWaWV3OjprZXlQcmVzcyhXUEFSQU0gY2hh
ckNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>44938</attachid>
            <date>2009-12-15 21:37:53 -0800</date>
            <delta_ts>2009-12-15 21:38:34 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>patch</filename>
            <type>application/octet-stream</type>
            <size>70970</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4NCBAQAorMjAwOS0xMi0xNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBDaHJvbWl1bS9XaW4gaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1NgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBzdHViIFNjcm9sbEFu
aW1hdG9yW0NsaWVudF0uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGQgQ2hyb21pdW0vV2lu
IFNjcm9sbEFuaW1hdG9yW0NsaWVudF0uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6IEFkZCBzdHViIFNjcm9sbEFuaW1hdG9yW0NsaWVudF0uCisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOiBNYXJrIHdoaWNoIHNjcm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dlcmVkIGJ5
IGtleXByZXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxCeVVuaXRzKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1h
bmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEFuZEFjY2VwdEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xs
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNp
dmVseSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50
SGFuZGxlcik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogTWFyayB3aGljaCBzY3Jv
bGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAqIHBsYXRm
b3JtL1BvcHVwTWVudS5oOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBT
Y3JvbGxiYXIuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNsaWVudDo6U2Nyb2xs
QW5pbWF0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDbGllbnQ6
On5TY3JvbGxBbmltYXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcDogUGx1bWIgU2Nyb2xsQW5pbWF0b3JDbGllbnQgY2FsbGJhY2sgdG8gU2Nyb2xsYmFy
cy4gTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2Vz
LiBBbGxvdyB3aGVlbCBzY3JvbGxzIHRvIGJlIGFuaW1hdGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxF
dmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBTY3JvbGxBbmlt
YXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNjcm9sbCBjb21t
YW5kcyBhcmUgdHJpZ2dlcmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDogQWxsb3cgU2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgZGVz
aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
OjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpt
b3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmg6IEFsbG93IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxz
IGlmIGRlc2lyZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50Lmg6IEFsbG93
IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxzIGlmIGRlc2lyZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnBvc3NpYmx5QW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnBvc3Np
Ymx5Q3JlYXRlV2l0aENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtV2luOjp+U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
V2luOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bVdpbjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW46OmFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVdpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JvbGxiYXJRdC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmln
Z2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udGV4
dE1lbnUpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwOiBQbHVtYiBT
Y3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNj
cm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dlcmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwTWVudTo6d25kUHJvYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5
cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0
cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuY3BwOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldHNGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogUGx1bWIg
U2Nyb2xsQW5pbWF0b3JDbGllbnQgY2FsbGJhY2sgdG8gU2Nyb2xsYmFycy4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxs
YmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNjcm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dl
cmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dHNGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6IFBsdW1iIFNjcm9sbEFu
aW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRvIFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Nyb2xsIGNv
bW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6IFBsdW1iIFNjcm9sbEFuaW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRv
IFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkg
a2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2
ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRzRnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6IFBsdW1iIFNj
cm9sbEFuaW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRvIFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Ny
b2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogTWFyayB3aGljaCBzY3JvbGwg
Y29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFu
ZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorCiAyMDA5LTEyLTEzICBSb2xhbmQgU3Rl
aW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY4LDYgKzE0NjgsNyBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xL
ZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTE4OTgsNiArMTg5OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBN
ZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51
UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0
b3JDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1XaW4uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtV2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAnLApAQCAtMjc5Niw2ICsy
Nzk4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU1NMS2V5R2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvag0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjE2OTMsNiArMjE2OTMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0
b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXFNjcm9sbGJhci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
V2ViQ29yZS9kb20vRWxlbWVudC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRWxlbWVudDo6c2Nyb2xsQnlVbml0
cyhpbnQgdW5pdHMsIFMKICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBTY3JvbGxVcDsKICAg
ICAgICAgICAgICAgICB1bml0cyA9IC11bml0czsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRvUmVuZGVyQm94KHJlbmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgdW5pdHMpOworICAgICAgICAgICAgdG9SZW5kZXJCb3gocmVuZCktPmxheWVyKCktPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCB1bml0cywgZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHANCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEzICsxMTUs
MTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbEFuZEFjY2VwdEV2ZW50KAogICAgIFJlbmRl
ckJveCogZW5jbG9zaW5nQm94ID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nQm94KCk7CiAK
ICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKLSAg
ICAgICAgaWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0
aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgMSwgc3RvcE5vZGUpKQorICAg
ICAgICBpZiAoZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rp
b24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCAxLCBmYWxzZSwgc3RvcE5vZGUp
KQogICAgICAgICAgICAgZS5hY2NlcHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGZsb2F0IHBpeGVsc1RvU2Nyb2xsID0gZGVsdGEgPiAwID8gZGVsdGEgOiAtZGVsdGE7Ci0gICAg
aWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIHBpeGVsc1RvU2Nyb2xsLCBzdG9wTm9k
ZSkpCisgICAgaWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGly
ZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIHBpeGVsc1RvU2Nyb2xs
LCBmYWxzZSwgc3RvcE5vZGUpKQogICAgICAgICBlLmFjY2VwdCgpOwogfQogCkBAIC05MDIsNyAr
OTAyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NOb2RlKFBhcwogICAgIG1f
bW91c2VQcmVzc05vZGUgPSBub2RlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3Zl
cmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgZnJvbUtleXBy
ZXNzKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTkxMCw3ICs5MTAsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgCiAgICAgaWYgKG5vZGUpIHsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHIgJiYgIXIt
PmlzTGlzdEJveCgpICYmIHItPmVuY2xvc2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSkpIHsKKyAgICAgICAgaWYgKHIgJiYgIXItPmlzTGlzdEJveCgpICYmIHItPmVuY2xv
c2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgMSwgZnJvbUtleXByZXNz
KSkgewogICAgICAgICAgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTkxOSwxNCArOTE5LDE0IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7Ci0gICAgYm9vbCBoYW5k
bGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgYm9vbCBo
YW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgZnJvbUtleXBy
ZXNzKTsKICAgICBpZiAoIWhhbmRsZWQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFt
ZTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpIDogZmFsc2U7CisgICAgICAgICAgICBoYW5kbGVkID0gdmlldyA/IHZp
ZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBmcm9tS2V5cHJlc3MpIDogZmFsc2U7
CiAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgICAgICB9
IHdoaWxlICghaGFuZGxlZCAmJiBmcmFtZSk7CiAgICAgIH0KQEAgLTI0NDYsNyArMjQ0Niw3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmQKIHZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAg
ICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGV2ZW50LT5zaGlmdEtleSgpID8gU2Nyb2xs
VXAgOiBTY3JvbGxEb3duOwotICAgIGlmIChzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIFNjcm9s
bEJ5UGFnZSkpIHsKKyAgICBpZiAoc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBh
Z2UsIHRydWUpKSB7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjQ1NSw3ICsyNDU1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRTcGFjZUV2ZW50SGFuZAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSkpCisgICAgaWYg
KHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgdHJ1ZSkpCiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsOSArMTIwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZyYW1lKiBzdWJm
cmFtZUZvclRhcmdldE5vZGUoTm9kZSopOwogCi0gICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbE92ZXJmbG93
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGJvb2wgZnJvbUtleXByZXNzKTsK
IAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBib29sIGZyb21LZXlwcmVzcyk7CiAKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQogICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2RlKE5vZGUqLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OyAvLyAtd2Via2l0LXVzZXItZHJhZyA9PSBhdXRvCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnUuaAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKFFUKQogICAgIFFXZWJQb3B1cCogbV9wb3B1cDsKICNlbGlmIFBMQVRGT1JNKFdJTikKKyAg
ICAvLyBTY3JvbGxBbmltYXRvckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRzRnJvbUFuaW1hdGlvbihpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKTsKKwogICAgIC8v
IFNjcm9sbEJhckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yX2gKKyNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNj
cm9sbFR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yQ2xpZW50OworCitjbGFzcyBTY3JvbGxBbmltYXRv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBwb3NzaWJseUNyZWF0ZVdp
dGhDbGllbnQoU2Nyb2xsQW5pbWF0b3JDbGllbnQqKTsKKworICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCkge30KKworICAgIHZpcnR1YWwgYm9vbCBwb3NzaWJseUFuaW1hdGVTY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlw
bGllZFN0ZXAsIGJvb2wgZnJvbUtleXByZXNzLCBmbG9hdCBtYXhQb3MsIGJvb2wqIGNoYW5nZWRT
b21ldGhpbmcpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpIHt9Cit9
OworCitjbGFzcyBTY3JvbGxBbmltYXRvckNsaWVudCB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5p
bWF0b3JDbGllbnQoKSA6IG1fc2Nyb2xsQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5
Q3JlYXRlV2l0aENsaWVudCh0aGlzKSkge30KKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNs
aWVudCgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRp
b24oaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
T3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOworfTsKKworI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6cG9zc2libHlD
cmVhdGVXaXRoQ2xpZW50KFNjcm9sbEFuaW1hdG9yQ2xpZW50KikKK3sKKyAgICByZXR1cm4gTlVM
TDsKK30KKyNlbmRpZgorCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
CShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsMTQgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4
aW11bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRo
KCksIG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldFNj
cm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7
CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShob3Jpem9udGFsLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbGJhcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUodmVydGljYWws
IHRydWUpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTMx
MywxNyArMzIxLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QK
ICAgICB1cGRhdGVTY3JvbGxiYXJzKEludFNpemUobmV3U2Nyb2xsUG9zaXRpb24ueCgpLCBuZXdT
Y3JvbGxQb3NpdGlvbi55KCkpKTsKIH0KIAotYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29s
IFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7CiAgICAgaWYgKHBsYXRm
b3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKIAogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9u
ID09IFNjcm9sbERvd24pIHsKICAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAg
ICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCAxLCBmcm9tS2V5cHJlc3MpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgMSwgZnJvbUtleXByZXNzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtNDQxLDcgKzQ0OSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdCAKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJ
bnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3Rl
cHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0
aCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lk
dGgoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndp
ZHRoKCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAg
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZh
bHNlKTsgCiAgICAgfSAKQEAgLTQ2NSw3ICs0NzMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRT
dXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50
c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xs
LmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xs
LmhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQog
ICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
ZmFsc2UpOwogICAgIH0KQEAgLTY3Nyw3ICs2ODUsMTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAg
ICAgICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50
U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFj
ayBvbiBzY3JvbGxCeSgpIGlmIHRoZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVybyBk
ZWx0YT8KKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVs
LCBkZWx0YVksIGZhbHNlKTsKKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxM
ZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAgY2xhc3MgU2Nyb2xs
VmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGljOgogICAgIH5TY3JvbGxWaWV3KCk7
CiAKKyAgICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVy
dGljYWwpOworCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZC4gIEZyYW1lVmlldyBvdmVy
cmlkZXMgdGhlIG90aGVyIHR3by4KICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9s
bGJhciopOwogICAgIApAQCAtMTQ2LDcgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9s
bFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICAvLyBU
aGlzIG1ldGhvZCBzY3JvbGxzIGJ5IGxpbmVzLCBwYWdlcyBvciBwaXhlbHMuCi0gICAgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3Mp
OwogICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgdmll
dyAoZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgogICAgIHZvaWQg
c2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDEyIEBAIFNjcm9sbGJhcjo6
flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsKIH0K
IAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6OnNldFZh
bHVlKGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9IG1heChtaW4o
diwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVlKCkgPT0g
dikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgot
ICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJvbVNjcm9sbEFu
aW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNSwyNiArMTE1LDMwIEBAIHZv
aWQgU2Nyb2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9
IDEuMGYgLyBwaXhlbHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyKQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
Ym9vbCBmcm9tS2V5cHJlc3MpCiB7Ci0gICAgZmxvYXQgc3RlcCA9IDA7Ci0gICAgaWYgKChkaXJl
Y3Rpb24gPT0gU2Nyb2xsVXAgJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikg
fHwgKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikpCi0gICAgICAgIHN0ZXAgPSAtMTsKLSAgICBlbHNlIGlmICgoZGlyZWN0aW9u
ID09IFNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwg
KGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpKSAKLSAgICAgICAgc3RlcCA9IDE7Ci0gICAgCisgICAgLy8gSWdub3JlIHBlcnBl
bmRpY3VsYXIgc2Nyb2xscy4KKyAgICBpZiAoKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxE
b3duKSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmln
aHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBzdGVwOwogICAgIGlmIChn
cmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmUpCi0gICAgICAgIHN0ZXAgKj0gbV9saW5lU3RlcDsK
KyAgICAgICAgc3RlcCA9IG1fbGluZVN0ZXA7CiAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0g
U2Nyb2xsQnlQYWdlKQotICAgICAgICBzdGVwICo9IG1fcGFnZVN0ZXA7CisgICAgICAgIHN0ZXAg
PSBtX3BhZ2VTdGVwOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1l
bnQpCi0gICAgICAgIHN0ZXAgKj0gbV90b3RhbFNpemU7CisgICAgICAgIHN0ZXAgPSBtX3RvdGFs
U2l6ZTsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBpeGVsKQotICAgICAg
ICBzdGVwICo9IG1fcGl4ZWxTdGVwOwotICAgICAgICAKLSAgICBmbG9hdCBuZXdQb3MgPSBtX2N1
cnJlbnRQb3MgKyBzdGVwICogbXVsdGlwbGllcjsKKyAgICAgICAgc3RlcCA9IG1fcGl4ZWxTdGVw
OworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExl
ZnQpCisgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBmbG9hdCBtdWx0aXBs
aWVkU3RlcCA9IHN0ZXAgKiBtdWx0aXBsaWVyOwogICAgIGZsb2F0IG1heFBvcyA9IG1fdG90YWxT
aXplIC0gbV92aXNpYmxlU2l6ZTsKLSAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG5l
d1BvcywgbWF4UG9zKSwgMC4wZikpOworICAgIGJvb2wgY2hhbmdlZFNvbWV0aGluZzsKKyAgICBp
ZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgZnJvbUtleXByZXNzLCBtYXhQb3Ms
ICZjaGFuZ2VkU29tZXRoaW5nKSkKKyAgICAgICAgcmV0dXJuIGNoYW5nZWRTb21ldGhpbmc7CisK
KyAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIG11bHRpcGxp
ZWRTdGVwLCBtYXhQb3MpLCAwLjBmKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlBvc2l0aW9uKCkKQEAgLTE4Nyw3ICsxOTEsNyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0
b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBhcnJvd3Mg
YW5kIHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwg
cHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAoc2Nyb2xsKHByZXNzZWRQ
YXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSwgMSwg
ZmFsc2UpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yNTcs
MTEgKzI2MSwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxz
ZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsK
ICAgICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsK
KyAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0
YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29s
IFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAg
aWYgKG5vdGlmeVNjcm9sbEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisK
ICAgICBpZiAocG9zID09IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMDYsNyArMzEzLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cgogewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAo
dGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAg
ICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3Zl
VGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAg
ICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDExICs3OCwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAg
ICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1Bl
clN0ZXAgPSAxKTsKLSAgICBib29sIHNldFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1ZShp
bnQsIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGlu
dCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGlu
dCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyLCBib29sIGZyb21LZXlwcmVzcyk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xNDIs
NyArMTQyLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9sbEdyYW51bGFyaXR5IHByZXNzZWRQYXJ0
U2Nyb2xsR3JhbnVsYXJpdHkoKTsKICAgICAKICAgICB2b2lkIG1vdmVUaHVtYihpbnQgcG9zKTsK
LSAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBib29sIHNldEN1cnJlbnRQ
b3MoZmxvYXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKTsKIAogICAgIFNjcm9sbGJh
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlv
bjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA1MjE4NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDE2ICsyNywyOCBAQAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFNjcm9sbGJhckNsaWVudCB7CitjbGFzcyBTY3JvbGxiYXJDbGllbnQgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGJhckNs
aWVudCgpIHt9CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7
CiAKKyAgICBib29sIHBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllZFN0ZXAsIGJvb2wgZnJvbUtleXByZXNzLCBmbG9hdCBtYXhQb3MsIGJvb2wqIGNoYW5n
ZWRTb21ldGhpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvciA/IG1f
c2Nyb2xsQW5pbWF0b3ItPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgZnJvbUtleXByZXNzLCBtYXhQb3MsIGNoYW5nZWRT
b21ldGhpbmcpIDogZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFu
ZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBv
cykKKyAgICB7CisgICAgICAgIGlmIChtX3Njcm9sbEFuaW1hdG9yKQorICAgICAgICAgICAgbV9z
Y3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0
aW9uLCBwb3MpOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtV2luLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oIgorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPg0KKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworU2Nyb2xsQW5p
bWF0b3IqIFNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUNyZWF0ZVdpdGhDbGllbnQoU2Nyb2xsQW5p
bWF0b3JDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1XaW4oY2xpZW50KTsKK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6UGVyQXhp
c0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4qIHBhcmVudCkKKyAg
ICA6IG1fY3VycmVudFBvcygwKQorICAgICwgbV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJl
bnRWZWxvY2l0eSgwKQorICAgICwgbV9kZXNpcmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFu
aW1hdGlvblRpbWUoMCkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bVdpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworCitTY3JvbGxB
bmltYXRvckNocm9taXVtV2luOjpTY3JvbGxBbmltYXRvckNocm9taXVtV2luKFNjcm9sbEFuaW1h
dG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2hvcml6
b250YWxEYXRhKHRoaXMpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSh0aGlzKQoreworfQorCitTY3Jv
bGxBbmltYXRvckNocm9taXVtV2luOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbigpCit7Cisg
ICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgYm9vbCBmcm9tS2V5cHJlc3MsIGZsb2F0IG1heFBvcywg
Ym9vbCogY2hhbmdlZFNvbWV0aGluZykKK3sKKyAgICAvLyBEb24ndCBhbmltYXRlIGp1bXBpbmcg
dG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGlmIChncmFudWxh
cml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBUaGlzIGlzIGFuIGFuaW1hdGlibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVs
dGEuCisgICAgKmNoYW5nZWRTb21ldGhpbmcgPSBmYWxzZTsKKyAgICBQZXJBeGlzRGF0YSogZGF0
YSA9IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pID8g
Jm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisgICAgZmxvYXQgbmV3UG9zID0g
c3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsgbXVsdGlwbGllZFN0ZXAsIG1h
eFBvcyksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkYXRhLT5tX2Rlc2lyZWRQb3MgPSBuZXdQb3M7CisKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIGFuaW1hdGlvbiB2ZWxvY2l0eS4KKyAgICBpZiAoZGF0YS0+bV9j
dXJyZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZmxvYXQgYW5pbWF0aW9uU3RlcDsKKyAgICBib29sIGFscmVhZHlBbmltYXRpbmcgPSBkYXRh
LT5tX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCk7CisgICAgaWYgKCFmcm9tS2V5cHJlc3MgJiYg
KGdyYW51bGFyaXR5ICE9IFNjcm9sbEJ5UGl4ZWwpKSB7CisgICAgICAgIC8vIFdoZW4gYXV0b3Nj
cm9sbGluZywgdGhlIHNjcm9sbGJhcidzIGF1dG9zY3JvbGwgdGltZXIgd2lsbCBjYWxsIHVzIHRv
CisgICAgICAgIC8vIGluY3JlbWVudCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBieSB8c3RlcHwgZXZl
cnkKKyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxU
aW1lckRlbGF5KCkgc2Vjb25kcy4gIElmIHdlCisgICAgICAgIC8vIHNldCB0aGUgZGVzaXJlZCB2
ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsCisgICAg
ICAgIC8vIG5laXRoZXIgcmFjZSBhaGVhZCAoYW5kIHRoZW4gaGF2ZSB0byBzbG93IGRvd24pIG5v
ciBpbmNyZWFzaW5nbHkgbGFnCisgICAgICAgIC8vIGJlaGluZCwgYnV0IHdpbGwgYmUgc21vb3Ro
IGFuZCBzeW5jaHJvbml6ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBiZWNh
dXNlIG9mIHRoZSBhY2NlbGVyYXRpb24gcGVyaW9kLCB0aGUgY3VycmVudCBwb3NpdGlvbgorICAg
ICAgICAvLyB3aWxsIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1v
dW50IChzZWUgY29tbWVudHMgb24KKyAgICAgICAgLy8gYW5pbWF0ZVNjcm9sbCgpKTsgdGhlIGV4
YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9IHxzdGVwfCAtIHYoMC41
dEEgKyB0RCkKKyAgICAgICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICB2ID0gVGhlIHN0ZWFkeS1z
dGF0ZSB2ZWxvY2l0eSwKKyAgICAgICAgLy8gICAgICAgfHN0ZXB8IC8gU2Nyb2xsYmFyVGhlbWU6
Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKKyAgICAgICAgLy8gICB0QSA9
IFRoZSBhY2NlbGVyYXRpb24gdGltZSwKKyAgICAgICAgLy8gICAgICAgIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8vICAgdEQg
PSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5nIHRv
CisgICAgICAgIC8vICAgICAgICBzY3JvbGwsIDAuMDFzCisgICAgICAgIC8vIFdoaWNoLCBmb3IK
KyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1l
ckRlbGF5KCkgPT0gMC4wNXMsIGdpdmVzCisgICAgICAgIC8vIGEgbGFnIG9mICgwLjMgKiB8c3Rl
cHwpLgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21lIGJ1ZmZl
ciBhZ2FpbnN0IHRpbWVyIGppdHRlciBzbyB3ZSdyZSBsZXNzCisgICAgICAgIC8vIGxpa2VseSB0
byBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYW5kIHN0b3AgKGFuZCB0aHVzIGhhdmUgdG8KKyAg
ICAgICAgLy8gcmUtYWNjZWxlcmF0ZSwgY2F1c2luZyBhIHZpc2libGUgaGl0Y2gpIHdoaWxlIHdh
aXRpbmcgZm9yIHRoZSBuZXh0CisgICAgICAgIC8vIGF1dG9zY3JvbGwgaW5jcmVtZW50LgorICAg
ICAgICBhbmltYXRpb25TdGVwID0gc3RlcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3Ig
a2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdlIGRvbid0IGtub3cgd2hlbiB0aGUgbmV4dCBp
bmNyZW1lbnQKKyAgICAgICAgLy8gd2lsbCBiZSByZXF1ZXN0ZWQuICBJZiB3ZSBzZXQgdGhlIHRh
cmdldCB2ZWxvY2l0eSBiYXNlZCBvbiBob3cgZmFyCisgICAgICAgIC8vIGF3YXkgZnJvbSB0aGUg
dGFyZ2V0IHBvc2l0aW9uIHdlIGFyZSwgdGhlbiBmb3Iga2V5Ym9hcmQvd2hlZWwgZXZlbnRzCisg
ICAgICAgIC8vIHRoYXQgY29tZSBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Njcm9sbCBkZWxheSwgd2Un
bGwgYXN5bXB0b3RpY2FsbHkKKyAgICAgICAgLy8gYXBwcm9hY2ggdGhlIHZlbG9jaXR5IG5lZWRl
ZCB0byBzdGF5IHNtb290aGx5IGluIHN5bmMgd2l0aCB0aGUgdXNlcidzCisgICAgICAgIC8vIGFj
dGlvbnM7IGZvciBldmVudHMgdGhhdCBjb21lIHNsb3dlciwgd2UnbGwgc2Nyb2xsIG9uZSBpbmNy
ZW1lbnQgYW5kCisgICAgICAgIC8vIHRoZW4gcGF1c2UgdW50aWwgdGhlIG5leHQgZXZlbnQgZmly
ZXMuICBUaGlzIGxhdHRlciBiZWhhdmlvciBtZWFucworICAgICAgICAvLyB0aGF0IHNpbmdsZSBr
ZXlwcmVzc2VzIG9yIHdoZWVsIGZsaWNrcyB3aWxsIGhhdmUgdGhlIHNhbWUgYXBwZWFyYW5jZQor
ICAgICAgICAvLyBhcyBzaW5nbGUgcHJlc3NlcyBvZiBhIHNjcm9sbGJhciBwYXJ0LgorICAgICAg
ICBhbmltYXRpb25TdGVwID0gYWJzKG5ld1BvcyAtIGRhdGEtPm1fY3VycmVudFBvcyk7CisgICAg
ICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdoZWVsIGNvbnRpbnVhbGx5IHNw
dW4pLCB0aGVuIG9uY2Ugd2UKKyAgICAgICAgLy8gaGF2ZSByZWFjaGVkIGEgdmVsb2NpdHkgY2xv
c2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUKKyAgICAgICAgLy8gbGlrZWx5
IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhdCBhcm91bmQgdGhlIHNhbWUgdGltZSB3ZSdk
CisgICAgICAgIC8vIGV4cGVjdCB0aGUgbmV4dCBpbmNyZW1lbnQgdG8gb2NjdXIgLS0gYmFkIGJl
Y2F1c2UgaXQgbGVhZHMgdG8KKyAgICAgICAgLy8gaGl0Y2hpbmcgYXMgZGVzY3JpYmVkIGFib3Zl
LiAgU28gd2UgdHJpbSB0aGUgdmVsb2NpdHkgc2xpZ2h0bHkgc28KKyAgICAgICAgLy8gdGhhdCB3
ZSBoYXZlIGEgc21hbGwgYnVmZmVyLCB0byBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiB0aGlz
CisgICAgICAgIC8vIG9jY3VycmluZy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBmYWxsIHN0ZWFkaWx5
IGZ1cnRoZXIgYmVoaW5kIGhlcmUsCisgICAgICAgIC8vIGJlY2F1c2UgaW4gc3Vic2VxdWVudCB1
cGRhdGVzIHdlJ2xsIGJlIGNhbGN1bGF0aW5nIG91ciB2ZWxvY2l0eSBiYXNlZAorICAgICAgICAv
LyBvbiBhIGxhcmdlciBkZXNpcmVkIHN0ZXAgLS0gc28gdGhlIHByYWN0aWNhbCBlZmZlY3QgaXMg
dGhhdCB3ZSBsYWcgYnkKKyAgICAgICAgLy8gYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IGRlcGVu
ZGluZyBvbiB0aGUgdHJpbSB2YWx1ZSBhbmQgdGhlIHJhdGUgYXQKKyAgICAgICAgLy8gd2hpY2gg
aW5jcmVtZW50cyBvY2N1ciBjb21wYXJlZCB0byB0aGUgYXV0b3Njcm9sbCB0aW1lciBkZWxheS4g
IFRoZQorICAgICAgICAvLyBleGFjdCBhbW91bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAgLy8gICBs
YWcgPSB8c3RlcHwgKiAoKHIgLyBrKSAtIDEpCisgICAgICAgIC8vIFdoZXJlCisgICAgICAgIC8v
ICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBlYXQgZGVsYXksCisgICAgICAg
IC8vICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJE
ZWxheSgpLCB0byB0aGUKKyAgICAgICAgLy8gICAgICAga2V5L3doZWVsIHJlcGVhdCBkZWxheSAo
aS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBmYXN0ZXIpCisgICAgICAgIC8vICAgayA9IFRoZSB2
ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAgICAgIC8vCisgICAgICAgIC8v
IElmIHdlIHdhbnQgdG8gYWN0IGFzIG11Y2ggbGlrZSBhdXRvc2Nyb2xsaW5nIGFzIHBvc3NpYmxl
LCB0aGVuIHdlCisgICAgICAgIC8vIGNob29zZSBrIHN1Y2ggdGhhdCBsYWcgPSAoMC4zICogfHN0
ZXB8KSAoaS5lLiB0aGUgc2FtZSBhcyBhYm92ZSkgd2hlbgorICAgICAgICAvLyByID0gMS4gIFRo
aXMgZ2l2ZXMgayA9IDEwLzEzLgorICAgICAgICBpZiAoYWxyZWFkeUFuaW1hdGluZykKKyAgICAg
ICAgICAgIGFuaW1hdGlvblN0ZXAgKj0gKDEwLjAgLyAxMy4wKTsKKyAgICB9CisgICAgZGF0YS0+
bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2
ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisgICAgKmNoYW5nZWRTb21ldGhpbmcg
PSB0cnVlOworCisgICAgLy8gSWYgd2UncmUgbm90IGFscmVhZHkgc2Nyb2xsaW5nLCBzdGFydC4K
KyAgICBpZiAoIWFscmVhZHlBbmltYXRpbmcpCisgICAgICAgIGFuaW1hdGVTY3JvbGwoZGF0YSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3Zl
cnRpY2FsRGF0YTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICBk
YXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9zOwor
ICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6YW5pbWF0aW9u
VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtV2luPiogdGltZXIpCit7Cisg
ICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9yaXpvbnRhbERhdGEubV9hbmltYXRpb25U
aW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVy
QXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6YW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0YSogZGF0
YSkKK3sKKyAgICAvLyBOb3RlIG9uIHNtb290aCBzY3JvbGxpbmcgcGVyZiB2ZXJzdXMgbm9uLXNt
b290aCBzY3JvbGxpbmcgcGVyZjoKKyAgICAvLyBUaGUgdG90YWwgdGltZSB0byBwZXJmb3JtIGEg
Y29tcGxldGUgc2Nyb2xsIGlzIGdpdmVuIGJ5CisgICAgLy8gICB0ID0gdDAgKyAwLjV0QSAtIHRE
ICsgdFMKKyAgICAvLyBXaGVyZQorICAgIC8vICAgdDAgPSBUaGUgdGltZSB0byBwZXJmb3JtIHRo
ZSBzY3JvbGwgd2l0aG91dCBzbW9vdGggc2Nyb2xsaW5nCisgICAgLy8gICB0QSA9IFRoZSBhY2Nl
bGVyYXRpb24gdGltZSwKKyAgICAvLyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1l
KCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgKHNlZSBiZWxvdykKKyAgICAvLyAgIHREID0gfGRl
c2lyZWRTY3JvbGxJbnRlcnZhbHwgKHNlZSBiZWxvdykKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAg
Ly8gICAgICAgIHNpbmdsZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVl
IHRvIGNhbGxpbmcKKyAgICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBm
b3Igc2ltcGxlIHBhZ2VzLCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMp
LgorICAgIC8vCisgICAgLy8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhl
IHRvdGFsIGxhZyAoYXMgdXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgfjAgKGFjdHVhbGx5
IDE1IG1zIGJ5IGRlZmF1bHQpIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yCisg
ICAgLy8gY29tcGxleCBwYWdlcy4gIFdpdGhvdXQga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJn
ZSB0UyBpcyBpdCdzIGhhcmQgdG8KKyAgICAvLyBkbyBiZXR0ZXIgdGhhbiB0aGlzLiAgUGVyaGFw
cyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMgdmFsdWVzCisgICAgLy8gYW5kIGZv
cndhcmQtY29tcGVuc2F0ZS4KKworCisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9s
bCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIg
bGFzdCB1cGRhdGUuICBUaGlzIG1heSBiZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNw
ZWNpYWxseSBpZgorICAgIC8vIHRoZSBwYWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBz
bG93LgorICAgIGRvdWJsZSBkZXNpcmVkU2Nyb2xsSW50ZXJ2YWwgPSAwLjAxOworICAgIC8vIFRv
IGF2b2lkIGZlZWxpbmcgbGFnZ3ksIGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xs
aW5nIHdlIHByZXRlbmQKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUg
aWRlYWwgaW50ZXJ2YWwsIHNvIHRoYXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29t
ZSBkaXN0YW5jZSBpbW1lZGlhdGVseS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0g
ZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9s
YXN0QW5pbWF0aW9uVGltZSkgOiBkZXNpcmVkU2Nyb2xsSW50ZXJ2YWw7CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3Vy
cmVudAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAg
aWYgKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsK
KyAgICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVh
Y2ggdGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIC8vIFdlIGVsZWN0IHRvIHVzZSBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQorICAgICAg
ICAvLyBhcyB0aGUgbGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20g
MCB0byB0aGF0CisgICAgICAgIC8vIHZlbG9jaXR5LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUg
d291bGQgcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNlZAorICAgICAgICAvLyBhY2NlbGVyYXRpb24g
ZWZmZWN0LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNpcmVk
VmVsb2NpdHkgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKTsKKworICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVy
YXRpb24gaGFzIGNhdXNlZCB1cyB0byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9j
aXR5LgorICAgICAgICBmbG9hdCBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlv
blJhdGUgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1Zl
bG9jaXR5ID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5n
ZTsKKyAgICAgICAgaWYgKHBvdGVudGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVs
b2NpdHkpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBh
dCBzb21lIHBvaW50IGJldHdlZW4gb3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQg
bm93LiAgVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAg
ICAgICAgICAgLy8gcGllY2VzOiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0
aW5nLCBhbmQgdGhlCisgICAgICAgICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFj
aGluZyB0aGUgdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2Np
dHlDaGFuZ2UgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5OworICAgICAgICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxv
Y2l0eUNoYW5nZSAvIGFjY2VsZXJhdGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFu
Y2UgdHJhdmVsZWQgdW5kZXIgY29uc3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAg
ICAgICAgICAvLyB1bmRlciBhIGxpbmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNs
b3BlLiAgQnJlYWsgdGhpcworICAgICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlv
biBhdG9wIGEgcmVjdGFuZ3VsYXIgcG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFu
Y2VUcmF2ZWxlZCA9ICgoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlD
aGFuZ2UgLyAyKSkgKiBhY2NlbGVyYXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUg
ZGlzdGFuY2UgdHJhdmVsZWQgYXQgdGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAg
ICAgICAgIC8vICh0YXJnZXQgdmVsb2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2Vs
ZXJhdGluZykuCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2ly
ZWRWZWxvY2l0eSAqIChsYXN0U2Nyb2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkp
OworICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2Vs
ZXJhdGlvbiB0aHJvdWdoIHRoZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRp
c3RhbmNlVHJhdmVsZWQgPSAoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVs
b2NpdHlDaGFuZ2UgLyAyKSkgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQg
dmVsb2NpdHksIHNvIHRoZSBkaXN0YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBz
aW1wbHkgKGN1cnJlbnQgdmVsb2NpdHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZh
bDsKKyAgICAgICAgLy8gSWYgb3VyIGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJv
cCB0aGUgY3VycmVudCB2ZWxvY2l0eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5ID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0
ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAg
ICBpZiAoZGlzdGFuY2VUcmF2ZWxlZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gZGF0YS0+
bV9jdXJyZW50UG9zKSkgeworICAgICAgICAvLyBXZSd2ZSB0cmF2ZWxlZCBmYXIgZW5vdWdoIHRv
IHJlYWNoIHRoZSBkZXNpcmVkIHBvc2l0aW9uLiAgU3RvcCBzbW9vdGgKKyAgICAgICAgLy8gc2Ny
b2xsaW5nLgorICAgICAgICBkYXRhLT5tX2N1cnJlbnRQb3MgPSBkYXRhLT5tX2Rlc2lyZWRQb3M7
CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICAgICAgZGF0YS0+bV9k
ZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCB5ZXQgYXQg
dGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0IGFuZCBzZXQgdXAgdGhlCisg
ICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoZGF0YS0+bV9jdXJyZW50UG9zID4g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0
YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2N1cnJlbnRQb3MgKz0gZGlzdGFuY2VUcmF2
ZWxlZDsKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoZGVzaXJl
ZFNjcm9sbEludGVydmFsKTsKKyAgICAgICAgZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSA9IFdU
Rjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldHNG
cm9tQW5pbWF0aW9uKG1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50UG9zLCBtX3ZlcnRpY2FsRGF0
YS5tX2N1cnJlbnRQb3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4uaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVdpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxB
bmltYXRvckNocm9taXVtV2luLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JvbGxBbmltYXRvckNocm9taXVtV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bVdpbl9oCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTY3JvbGxBbmltYXRvckNocm9taXVtV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9y
IHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvckNocm9taXVtV2luKFNjcm9sbEFuaW1hdG9y
Q2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbigpOworCisg
ICAgdmlydHVhbCBib29sIHBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgYm9vbCBm
cm9tS2V5cHJlc3MsIGZsb2F0IG1heFBvcywgYm9vbCogY2hhbmdlZFNvbWV0aGluZyk7CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7
CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4qIHBhcmVudCk7
CisKKyAgICAgICAgZmxvYXQgbV9jdXJyZW50UG9zOworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRQ
b3M7CisgICAgICAgIGZsb2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAgICBmbG9hdCBtX2Rl
c2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblRpbWU7CisgICAg
ICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4+IG1fYW5pbWF0aW9uVGltZXI7Cisg
ICAgfTsKKworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRv
ckNocm9taXVtV2luPiopOworICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVy
QXhpc0RhdGEqKTsKKyAgICB2b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAg
IFNjcm9sbEFuaW1hdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6
b250YWxEYXRhOworICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfQorI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA1MjE4
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMyArODIsMTMgQEAgYm9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBs
YXRmbwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEJvdHRvbSkKICAg
ICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9
PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdDogU2Ny
b2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYg
KGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlLCAxKTsKKyAgICAgICAg
c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFn
ZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVw
KQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Ny
b2xsQnlMaW5lLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDog
U2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNl
bGVjdGVkID09IGFjdFNjcm9sbERvd24pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIDEpOworICAgICAgICBzY3JvbGwo
aG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCAxLCBm
YWxzZSk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHANCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA1MjE4
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2Miw2ICs2NjIsMTIgQEAgdm9pZCBQb3B1cE1lbnU6OnBhaW50KGNvbnN0IEludFJl
Y3QmIGRhbQogICAgICAgICA6OlJlbGVhc2VEQyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAordm9p
ZCBQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFs
LCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9s
bGJhci0+c2V0VmFsdWUodmVydGljYWwsIHRydWUpOworfQorCiB2b2lkIFBvcHVwTWVudTo6dmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJh
cik7CkBAIC05NzYsNyArOTgyLDcgQEAgTFJFU1VMVCBQb3B1cE1lbnU6OnduZFByb2MoSFdORCBo
V25kLCBVSQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgLS1pOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNj
cm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOworICAgICAgICAgICAg
c2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xs
QnlMaW5lLCBhYnMoaSksIGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMCArNDAy
LDEwIEBAIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQKICAgICByZXR1
cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCi1ib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlckJveDo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyLCBib29sIGZyb21LZXlwcmVzcywgTm9kZSoqIHN0b3BOb2RlKQogewog
ICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAobCAmJiBsLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzKSkgewog
ICAgICAgICBpZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDE2LDcgKzQxNiw3IEBAIGJvb2wgUmVuZGVyQm94Ojpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1
cm4gYi0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2Rl
KTsKKyAgICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBmcm9tS2V5cHJlc3MsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7
CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIGJvb2wgZnJvbUtleXByZXNzLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNh
bkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBhdXRvc2Nyb2xsKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3Jp
ZC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5j
cHAJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDEyIEBAIHZvaWQgUmVuZGVyRGF0YUdy
aWQ6OnBhaW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9u
IGZ1bmN0aW9ucwordm9pZCBSZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zmc2V0c0Zyb21Bbmlt
YXRpb24oaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAobV92QmFyKQor
ICAgICAgICBtX3ZCYXItPnNldFZhbHVlKHZlcnRpY2FsLCB0cnVlKTsKK30KKwogdm9pZCBSZW5k
ZXJEYXRhR3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA1
MjE4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDkgQEAgcHJpdmF0ZToKIAogICAgIEhUTUxEYXRhR3JpZEVsZW1lbnQq
IGdyaWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFHcmlkRWxl
bWVudCo+KG5vZGUoKSk7IH0KIAorICAgIC8vIFNjcm9sbEFuaW1hdG9yQ2xpZW50IGludGVyZmFj
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24oaW50IGhv
cml6b250YWwsIGludCB2ZXJ0aWNhbCk7CisKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJm
YWNlLgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNTIxODYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMDYsOSArMTIwNiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4
LCAKICAgICAKICAgICBpZiAodXBkYXRlU2Nyb2xsYmFycykgewogICAgICAgICBpZiAobV9oQmFy
KQotICAgICAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAg
ICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCksIGZhbHNlKTsKICAgICAgICAg
aWYgKG1fdkJhcikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZKTsKKyAg
ICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBmYWxzZSk7CiAgICAgfQogCiAg
ICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0xNDU1LDYgKzE0NTUsMTQg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1F
IChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFz
IG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9
CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBo
b3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9o
QmFyLT5zZXRWYWx1ZShob3Jpem9udGFsLCB0cnVlKTsKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKHZlcnRpY2FsLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJMYXll
cjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9sbCBwb3Np
dGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0xODkwLDcgKzE4OTgsNyBAQCBSZW5kZXJMYXllcjo6
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBh
Z2VTdGVwID0gY2xpZW50V2lkdGg7CiAgICAgICAgIG1faEJhci0+c2V0U3RlcHMoY1Njcm9sbGJh
clBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faEJhci0+c2V0UHJvcG9y
dGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0VmFs
dWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zm
c2V0KCksIGZhbHNlKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikgewogICAgICAgICBpbnQgY2xp
ZW50SGVpZ2h0ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKQEAgLTIwNTIsNyArMjA2MCw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2wKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wg
UmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBmcm9tS2V5cHJlc3Mp
CiB7CiAgICAgYm9vbCBkaWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7CiAgICAgYm9vbCBkaWRW
ZXJ0aWNhbFNjcm9sbCA9IGZhbHNlOwpAQCAtMjA2MSwxMyArMjA2OSwxMyBAQCBib29sIFJlbmRl
ckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9
PSBTY3JvbGxCeURvY3VtZW50KSB7CiAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgZm9yIHRo
ZSBTY3JvbGxCeURvY3VtZW50IGdyYW51bGFyaXR5LiBBIGRvY3VtZW50IHNjcm9sbCBjYW4gb25s
eSBiZSB1cCAKICAgICAgICAgICAgIC8vIG9yIGRvd24gYW5kIGluIGJvdGggY2FzZXMgdGhlIGhv
cml6b250YWwgYmFyIGdvZXMgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQuCi0gICAgICAgICAgICBk
aWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlE
b2N1bWVudCwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0g
bV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllciwg
ZnJvbUtleXByZXNzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRIb3Jpem9udGFs
U2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzKTsKICAgICB9CiAK
ICAgICBpZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAgICBkaWRWZXJ0
aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIsIGZyb21LZXlwcmVzcyk7CiAKICAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3JvbGwg
fHwgZGlkVmVydGljYWxTY3JvbGwpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJ
KHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7CisgICAgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgYm9vbCBmcm9tS2V5cHJlc3MpOwogICAgIHZvaWQgYXV0b3Njcm9sbCgpOwogCiAgICAg
dm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50U2l6ZSYpOwpA
QCAtNDkwLDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxv
d09ubHkoKSBjb25zdDsgCiAKKyAgICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2Uu
CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jp
em9udGFsLCBpbnQgdmVydGljYWwpOworCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFj
ZQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDUyMTg2
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxl
bWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAgICAgIG1fdkJhci0+
c2V0VmFsdWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC01MTAsOSArNTEwLDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJc1Zpc2libGUo
aQogICAgIHJldHVybiBpbmRleCA+PSBtX2luZGV4T2Zmc2V0ICYmIGluZGV4IDwgbV9pbmRleE9m
ZnNldCArIG51bVZpc2libGVJdGVtcygpOwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQorYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgZnJvbUtleXByZXNzLCBOb2RlKiopCiB7Ci0gICAgcmV0
dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKTsKKyAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIGZyb21LZXlwcmVzcyk7CiB9CiAKIHZvaWQgUmVuZGVy
TGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKQEAgLTUyMyw2ICs1MjMs
MTIgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZQogICAgIGVsZW1l
bnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCit2b2lkIFJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQg
dmVydGljYWwpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZSh2
ZXJ0aWNhbCwgdHJ1ZSk7Cit9CisKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopCiB7CiAgICAgaW50IG5ld09mZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKQEAgLTU3
OCw3ICs1ODQsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAg
ICAgICAgIHJldHVybjsKICAgICBtX2luZGV4T2Zmc2V0ID0gaW5kZXg7CiAgICAgaWYgKG1fdkJh
cikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCk7CisgICAgICAgIG1fdkJhci0+c2V0
VmFsdWUoaW5kZXgsIGZhbHNlKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDUyMTg2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3
ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dD
b250cm9sKEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgYm9vbCBmcm9tS2V5cHJlc3MsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwog
CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsK
QEAgLTk1LDYgKzk1LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAg
ICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwp
OworCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KICAgICB2aXJ0dWFsIHZvaWQg
dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDgsMTIgKzgwOCwxMiBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+
c2V0U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wg
ZnJvbUtleXByZXNzLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkK
KyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyLCBmcm9tS2V5cHJlc3MpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
LCBzdG9wTm9kZSk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzLCBzdG9wTm9kZSk7CiB9CiAKIFBh
c3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxM
ZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgYm9vbCBmcm9tS2V5cHJlc3MsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50
IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVu
dFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTItMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgQ2hyb21pdW0vV2luIGltcGxl
bWVudGF0aW9uLg0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyMzU2DQorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6IE1hcmsgd2hpY2gg
c2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRo
S2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xs
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFu
ZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAqIHNyYy93aW4vV2ViSW5w
dXRFdmVudEZhY3RvcnkuY3BwOiBVcGRhdGUgY29tbWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9v
dGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91
c2VXaGVlbEV2ZW50KToKKwogMjAwOS0xMi0xNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkzLDEwICs5
OTMsMTAgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IAogICAgIC8v
IG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQgYW5kIG1vdmVUb0VuZGZEb2N1bWVudCBhcmUgb25s
eSBoYW5kbGVkIGJ5IFdlYktpdAogICAgIC8vIGZvciBlZGl0YWJsZSBub2Rlcy4KICAgICBpZiAo
IWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvQmVnaW5u
aW5nT2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3Jv
bGwoU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICByZXR1cm4gdmlld0ltcGwo
KS0+cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50LCBmYWxzZSk7CiAK
ICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92
ZVRvRW5kT2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVT
Y3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3
SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgZmFs
c2UpOwogCiAgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKHdlYk5hbWUpLmV4
ZWN1dGUodmFsdWUpOwogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAko
cmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzM4LDIzICs3MzgsMjEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Ny
b2xsVmlld1dpdGhLZXlib2FyZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
cmV0dXJuIHByb3BhZ2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5
KTsKKyAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3Jh
bnVsYXJpdHksIHRydWUpOwogfQogCiBib29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxh
cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZyb21LZXlwcmVz
cykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBzY3JvbGxIYW5kbGVk
ID0KLSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxE
aXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9IGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxh
cml0eSwgZnJvbUtleXByZXNzKTsKICAgICBGcmFtZSogY3VycmVudEZyYW1lID0gZnJhbWU7CiAg
ICAgd2hpbGUgKCFzY3JvbGxIYW5kbGVkICYmIGN1cnJlbnRGcmFtZSkgewotICAgICAgICBzY3Jv
bGxIYW5kbGVkID0gY3VycmVudEZyYW1lLT52aWV3KCktPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbEdyYW51bGFyaXR5KTsKKyAgICAgICAgc2Nyb2xsSGFuZGxlZCA9IGN1cnJlbnRGcmFtZS0+
dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgZnJvbUtl
eXByZXNzKTsKICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLT50cmVlKCktPnBh
cmVudCgpOwogICAgIH0KICAgICByZXR1cm4gc2Nyb2xsSGFuZGxlZDsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBUcmllcyB0byBzY3JvbGwgYSBmcmFtZSBvciBhbnkgcGFyZW50IG9mIGEg
ZnJhbWUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldwogICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAg
ICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6
OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5LCBib29sIGZyb21LZXlw
cmVzcyk7CiAKICAgICAvLyBIQUNLOiBjdXJyZW50SW5wdXRFdmVudCgpIGlzIGZvciBDaHJvbWVD
bGllbnRJbXBsOjpzaG93KCksIHVudGlsIHdlIGNhbgogICAgIC8vIGZpeCBXZWJLaXQgdG8gcGFz
cyBlbm91Z2ggaW5mb3JtYXRpb24gdXAgaW50byBDaHJvbWVDbGllbnQ6OnNob3coKSBzbyB3ZQpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3Rv
cnkuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklu
cHV0RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEzICszOTYsMTYgQEAg
V2ViTW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogCiAgICAgLy8gQ29udmVy
dCB3aGVlbCBkZWx0YSBhbW91bnQgdG8gYSBudW1iZXIgb2YgcGl4ZWxzIHRvIHNjcm9sbC4KICAg
ICAvLwotICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAg
R2Vja28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQotICAgIC8vIGN1cnJlbnQgbGluZSwgd2hpY2gg
bWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91Z2ggdGhlCi0gICAg
Ly8gcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMuICBJRSA3IGlzIH41MCBweC9saW5lLCBh
bHRob3VnaCB0aGUgdmFsdWUKLSAgICAvLyBzZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2Ug
YW5kIHpvb20gbGV2ZWwuICBTaW5jZSBJRSA3IGhhcyBhIHNtb290aGluZwotICAgIC8vIGFsZ29y
aXRobSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdodGx5IGxhcmdlciBz
Y3JvbGwgdmFsdWVzCi0gICAgLy8gd2l0aG91dCBmZWVsaW5nIGplcmt5LiAgSGVyZSB3ZSB1c2Ug
MTAwIHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQKLSAgICAvLyBzY3JvbGwgYW1vdW50
IGlzIHRocmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBIb3cgbWFueSBwaXhlbHMg
c2hvdWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEZpcmVmb3ggdXNlcyB0aGUgaGVpZ2h0IG9mCisg
ICAgLy8gdGhlIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5n
ZXMgYXMgeW91IGdvIHRocm91Z2gKKyAgICAvLyB0aGUgcGFnZSBvciBnbyB0byBkaWZmZXJlbnQg
cGFnZXMuICBJRSA4IGlzIH42MCBweC9saW5lLCBhbHRob3VnaCB0aGUKKyAgICAvLyB2YWx1ZSBz
ZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwuICBBbHNvLCBJRSBk
ZWZhdWx0cworICAgIC8vIHRvIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0
LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aAorICAgIC8vIHNvbWV3aGF0IGxhcmdlciBzY3JvbGwg
dmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMAorICAgIC8v
IHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBs
aW5lcyBwZXIgd2hlZWwKKyAgICAvLyB0aWNrKS4gIEV2ZW4gdGhvdWdoIHdlIGhhdmUgc21vb3Ro
IHNjcm9sbGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxhcmdlCisgICAgLy8gYXMgSUUgYmVj
YXVzZSBzdWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBzY3JvbGxzIGZhcnRoZXIgdGhhbiB5
b3Ugd2FudAorICAgIC8vIHdoaWxlIHJlYWRpbmcgYXJ0aWNsZXMuCiAgICAgc3RhdGljIGNvbnN0
IGZsb2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAzLjBmOwogICAgIHdoZWVs
RGVsdGEgLz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRh
OwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvZ3Rr
L0NoYW5nZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8
cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9t
aXVtL1dpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5j
cHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nl
cy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21vdmVfY3Vyc29yKToKKwogMjAwOS0x
Mi0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShy
ZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzMsOCArOTczLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93
ZWJfdmlld19yZWFsX21vdgogICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmll
dyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSkpCi0gICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
KTsKKyAgICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgdHJ1ZSkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCAxLCB0cnVlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVt
L1dpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbTog
TWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgor
ICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246Z3JhbnVs
YXJpdHk6ZnJvbUtleXByZXNzOl0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRv
QmVnaW5uaW5nT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRv
RW5kT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VWZXJ0aWNhbGx5
Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VIb3Jpem9udGFsbHk6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgt
W1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZUhvcml6b250YWxseTpdKToKKwogMjAwOS0xMi0xMyAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBC
ZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkocmV2aXNpb24g
NTIxODYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01MTksNyArNTE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNs
YXNzKE5TTQogICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKIH0KIAotLSAoQk9PTClf
c2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFu
dWxhcml0eTooU2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0gKEJPT0wpX3Njcm9sbE92
ZXJmbG93SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6
KFNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGZyb21LZXlwcmVzczooQk9PTClmcm9tS2V5
cHJlc3MKIHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBp
ZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1
bWVudFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCkBAIC01MjcsMTIg
KzUyNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBmcm9t
S2V5cHJlc3MpOwogfQogCiAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQKIHsK
LSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVs
YXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0lu
RGlyZWN0aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgZnJvbUtleXBy
ZXNzOk5PXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxC
YXJzXSkKICAgICAgICAgcmV0dXJuIE5POwpAQCAtNTQyLDcgKzU0Miw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRv
Y3VtZW50CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9s
bERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3Jv
bGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1
bWVudCBmcm9tS2V5cHJlc3M6Tk9dKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3Nl
bGYgX2hhc1Njcm9sbEJhcnNdKQogICAgICAgICByZXR1cm4gTk87CkBAIC02MTksNyArNjE5LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9w
YWdlVmVydGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJ
bkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxC
eVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNj
cm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2UgZnJvbUtleXByZXNz
OllFU10pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Ny
b2xsQmFyc10pCkBAIC02MzUsNyArNjM1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVz
RnJvbUNsYXNzKE5TTQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFz
U2Nyb2xsQmFyc10pCi0gICAgICAgIHJldHVybiBbW3NlbGYgX2xhcmdlc3RDaGlsZFdpdGhTY3Jv
bGxCYXJzXSBfcGFnZUhvcml6b250YWxseTpsZWZ0XTsKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBf
bGFyZ2VzdENoaWxkV2l0aFNjcm9sbEJhcnNdIF9wYWdlSG9yaXpvbnRhbGx5OmxlZnQgZnJvbUtl
eXByZXNzOllFU107CiAgICAgCiAgICAgZmxvYXQgZGVsdGEgPSBbc2VsZiBfaG9yaXpvbnRhbFBh
Z2VTY3JvbGxEaXN0YW5jZV07CiAgICAgcmV0dXJuIFtzZWxmIF9zY3JvbGxIb3Jpem9udGFsbHlC
eTpsZWZ0ID8gLWRlbHRhIDogZGVsdGFdOwpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRp
Y2FsbHk6KEJPT0wpdXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rp
b246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkK
KyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6
IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lIGZyb21LZXlwcmVzczpZRVNdKQog
ICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCkBA
IC02NTUsNyArNjU1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TQogCiAtIChCT09MKV9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBp
ZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBT
Y3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Ny
b2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdy
YW51bGFyaXR5OlNjcm9sbEJ5TGluZSBmcm9tS2V5cHJlc3M6WUVTXSkKICAgICAgICAgcmV0dXJu
IFlFUzsKIAogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKQpJbmRleDogV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6Omhh
bmRsZVNjcm9sbGluZyhRSwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7
CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZF
UlNJT05fQ0hFQ0soNCwgNiwgMCkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9x
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0xNSAg
UGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3
b3JrLCBhbmQgYSBDaHJvbWl1bS9XaW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBr
ZXlwcmVzc2VzLgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTY3JvbGxpbmcpOgor
CiAyMDA5LTEyLTE0ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJ
bmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL0No
YW5nZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVt
L1dpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogTWFyayB3aGljaCBz
Y3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAoV2Vi
Vmlldzo6a2V5RG93bik6CisKIDIwMDktMTItMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJL
aXQvd2luL1dlYlZpZXcuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODA5LDcgKzE4MDksNyBAQCBib29sIFdlYlZpZXc6OmtleURvd24oV1BBUkFNIHZp
cnR1YWxLZXlDCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJu
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJz
aXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIGJvb2wgV2ViVmlldzo6
a2V5UHJlc3MoV1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlE
b3duKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44939</attachid>
            <date>2009-12-15 21:38:34 -0800</date>
            <delta_ts>2009-12-15 21:44:45 -0800</delta_ts>
            <desc>patch v2, for reals</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>70970</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4NCBAQAorMjAwOS0xMi0xNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBDaHJvbWl1bS9XaW4gaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1NgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBzdHViIFNjcm9sbEFu
aW1hdG9yW0NsaWVudF0uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGQgQ2hyb21pdW0vV2lu
IFNjcm9sbEFuaW1hdG9yW0NsaWVudF0uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6IEFkZCBzdHViIFNjcm9sbEFuaW1hdG9yW0NsaWVudF0uCisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOiBNYXJrIHdoaWNoIHNjcm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dlcmVkIGJ5
IGtleXByZXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxCeVVuaXRzKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1h
bmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEFuZEFjY2VwdEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xs
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNp
dmVseSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50
SGFuZGxlcik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogTWFyayB3aGljaCBzY3Jv
bGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAqIHBsYXRm
b3JtL1BvcHVwTWVudS5oOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBT
Y3JvbGxiYXIuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNsaWVudDo6U2Nyb2xs
QW5pbWF0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDbGllbnQ6
On5TY3JvbGxBbmltYXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcDogUGx1bWIgU2Nyb2xsQW5pbWF0b3JDbGllbnQgY2FsbGJhY2sgdG8gU2Nyb2xsYmFy
cy4gTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2Vz
LiBBbGxvdyB3aGVlbCBzY3JvbGxzIHRvIGJlIGFuaW1hdGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxF
dmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBTY3JvbGxBbmlt
YXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNjcm9sbCBjb21t
YW5kcyBhcmUgdHJpZ2dlcmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDogQWxsb3cgU2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgZGVz
aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
OjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpt
b3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmg6IEFsbG93IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxz
IGlmIGRlc2lyZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50Lmg6IEFsbG93
IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxzIGlmIGRlc2lyZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnBvc3NpYmx5QW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnBvc3Np
Ymx5Q3JlYXRlV2l0aENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtV2luOjp+U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
V2luOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bVdpbjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW46OmFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVdpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JvbGxiYXJRdC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmln
Z2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udGV4
dE1lbnUpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwOiBQbHVtYiBT
Y3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNj
cm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dlcmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwTWVudTo6d25kUHJvYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5
cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0
cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuY3BwOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldHNGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogUGx1bWIg
U2Nyb2xsQW5pbWF0b3JDbGllbnQgY2FsbGJhY2sgdG8gU2Nyb2xsYmFycy4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxs
YmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNjcm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dl
cmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dHNGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6IFBsdW1iIFNjcm9sbEFu
aW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRvIFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Nyb2xsIGNv
bW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6IFBsdW1iIFNjcm9sbEFuaW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRv
IFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkg
a2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2
ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRzRnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6IFBsdW1iIFNj
cm9sbEFuaW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRvIFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Ny
b2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogTWFyayB3aGljaCBzY3JvbGwg
Y29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFu
ZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorCiAyMDA5LTEyLTEzICBSb2xhbmQgU3Rl
aW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY4LDYgKzE0NjgsNyBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xL
ZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTE4OTgsNiArMTg5OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBN
ZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51
UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0
b3JDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1XaW4uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtV2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAnLApAQCAtMjc5Niw2ICsy
Nzk4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU1NMS2V5R2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvag0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjE2OTMsNiArMjE2OTMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0
b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXFNjcm9sbGJhci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
V2ViQ29yZS9kb20vRWxlbWVudC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRWxlbWVudDo6c2Nyb2xsQnlVbml0
cyhpbnQgdW5pdHMsIFMKICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBTY3JvbGxVcDsKICAg
ICAgICAgICAgICAgICB1bml0cyA9IC11bml0czsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRvUmVuZGVyQm94KHJlbmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgdW5pdHMpOworICAgICAgICAgICAgdG9SZW5kZXJCb3gocmVuZCktPmxheWVyKCktPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCB1bml0cywgZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHANCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEzICsxMTUs
MTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbEFuZEFjY2VwdEV2ZW50KAogICAgIFJlbmRl
ckJveCogZW5jbG9zaW5nQm94ID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nQm94KCk7CiAK
ICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKLSAg
ICAgICAgaWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0
aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgMSwgc3RvcE5vZGUpKQorICAg
ICAgICBpZiAoZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rp
b24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCAxLCBmYWxzZSwgc3RvcE5vZGUp
KQogICAgICAgICAgICAgZS5hY2NlcHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGZsb2F0IHBpeGVsc1RvU2Nyb2xsID0gZGVsdGEgPiAwID8gZGVsdGEgOiAtZGVsdGE7Ci0gICAg
aWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIHBpeGVsc1RvU2Nyb2xsLCBzdG9wTm9k
ZSkpCisgICAgaWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGly
ZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIHBpeGVsc1RvU2Nyb2xs
LCBmYWxzZSwgc3RvcE5vZGUpKQogICAgICAgICBlLmFjY2VwdCgpOwogfQogCkBAIC05MDIsNyAr
OTAyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NOb2RlKFBhcwogICAgIG1f
bW91c2VQcmVzc05vZGUgPSBub2RlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3Zl
cmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgZnJvbUtleXBy
ZXNzKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTkxMCw3ICs5MTAsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgCiAgICAgaWYgKG5vZGUpIHsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHIgJiYgIXIt
PmlzTGlzdEJveCgpICYmIHItPmVuY2xvc2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSkpIHsKKyAgICAgICAgaWYgKHIgJiYgIXItPmlzTGlzdEJveCgpICYmIHItPmVuY2xv
c2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgMSwgZnJvbUtleXByZXNz
KSkgewogICAgICAgICAgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTkxOSwxNCArOTE5LDE0IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7Ci0gICAgYm9vbCBoYW5k
bGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgYm9vbCBo
YW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgZnJvbUtleXBy
ZXNzKTsKICAgICBpZiAoIWhhbmRsZWQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFt
ZTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpIDogZmFsc2U7CisgICAgICAgICAgICBoYW5kbGVkID0gdmlldyA/IHZp
ZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBmcm9tS2V5cHJlc3MpIDogZmFsc2U7
CiAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgICAgICB9
IHdoaWxlICghaGFuZGxlZCAmJiBmcmFtZSk7CiAgICAgIH0KQEAgLTI0NDYsNyArMjQ0Niw3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmQKIHZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAg
ICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGV2ZW50LT5zaGlmdEtleSgpID8gU2Nyb2xs
VXAgOiBTY3JvbGxEb3duOwotICAgIGlmIChzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIFNjcm9s
bEJ5UGFnZSkpIHsKKyAgICBpZiAoc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBh
Z2UsIHRydWUpKSB7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjQ1NSw3ICsyNDU1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRTcGFjZUV2ZW50SGFuZAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSkpCisgICAgaWYg
KHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgdHJ1ZSkpCiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsOSArMTIwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZyYW1lKiBzdWJm
cmFtZUZvclRhcmdldE5vZGUoTm9kZSopOwogCi0gICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbE92ZXJmbG93
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGJvb2wgZnJvbUtleXByZXNzKTsK
IAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBib29sIGZyb21LZXlwcmVzcyk7CiAKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQogICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2RlKE5vZGUqLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OyAvLyAtd2Via2l0LXVzZXItZHJhZyA9PSBhdXRvCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnUuaAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKFFUKQogICAgIFFXZWJQb3B1cCogbV9wb3B1cDsKICNlbGlmIFBMQVRGT1JNKFdJTikKKyAg
ICAvLyBTY3JvbGxBbmltYXRvckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRzRnJvbUFuaW1hdGlvbihpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKTsKKwogICAgIC8v
IFNjcm9sbEJhckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yX2gKKyNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNj
cm9sbFR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yQ2xpZW50OworCitjbGFzcyBTY3JvbGxBbmltYXRv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBwb3NzaWJseUNyZWF0ZVdp
dGhDbGllbnQoU2Nyb2xsQW5pbWF0b3JDbGllbnQqKTsKKworICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCkge30KKworICAgIHZpcnR1YWwgYm9vbCBwb3NzaWJseUFuaW1hdGVTY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlw
bGllZFN0ZXAsIGJvb2wgZnJvbUtleXByZXNzLCBmbG9hdCBtYXhQb3MsIGJvb2wqIGNoYW5nZWRT
b21ldGhpbmcpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpIHt9Cit9
OworCitjbGFzcyBTY3JvbGxBbmltYXRvckNsaWVudCB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5p
bWF0b3JDbGllbnQoKSA6IG1fc2Nyb2xsQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5
Q3JlYXRlV2l0aENsaWVudCh0aGlzKSkge30KKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNs
aWVudCgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRp
b24oaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
T3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOworfTsKKworI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6cG9zc2libHlD
cmVhdGVXaXRoQ2xpZW50KFNjcm9sbEFuaW1hdG9yQ2xpZW50KikKK3sKKyAgICByZXR1cm4gTlVM
TDsKK30KKyNlbmRpZgorCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
CShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsMTQgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4
aW11bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRo
KCksIG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldFNj
cm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7
CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShob3Jpem9udGFsLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbGJhcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUodmVydGljYWws
IHRydWUpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTMx
MywxNyArMzIxLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QK
ICAgICB1cGRhdGVTY3JvbGxiYXJzKEludFNpemUobmV3U2Nyb2xsUG9zaXRpb24ueCgpLCBuZXdT
Y3JvbGxQb3NpdGlvbi55KCkpKTsKIH0KIAotYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29s
IFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7CiAgICAgaWYgKHBsYXRm
b3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKIAogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9u
ID09IFNjcm9sbERvd24pIHsKICAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAg
ICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCAxLCBmcm9tS2V5cHJlc3MpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgMSwgZnJvbUtleXByZXNzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtNDQxLDcgKzQ0OSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdCAKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJ
bnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3Rl
cHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0
aCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lk
dGgoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndp
ZHRoKCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAg
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZh
bHNlKTsgCiAgICAgfSAKQEAgLTQ2NSw3ICs0NzMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRT
dXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50
c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xs
LmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xs
LmhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQog
ICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
ZmFsc2UpOwogICAgIH0KQEAgLTY3Nyw3ICs2ODUsMTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAg
ICAgICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50
U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFj
ayBvbiBzY3JvbGxCeSgpIGlmIHRoZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVybyBk
ZWx0YT8KKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVs
LCBkZWx0YVksIGZhbHNlKTsKKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxM
ZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAgY2xhc3MgU2Nyb2xs
VmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGljOgogICAgIH5TY3JvbGxWaWV3KCk7
CiAKKyAgICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVy
dGljYWwpOworCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZC4gIEZyYW1lVmlldyBvdmVy
cmlkZXMgdGhlIG90aGVyIHR3by4KICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9s
bGJhciopOwogICAgIApAQCAtMTQ2LDcgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9s
bFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICAvLyBU
aGlzIG1ldGhvZCBzY3JvbGxzIGJ5IGxpbmVzLCBwYWdlcyBvciBwaXhlbHMuCi0gICAgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3Mp
OwogICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgdmll
dyAoZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgogICAgIHZvaWQg
c2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDEyIEBAIFNjcm9sbGJhcjo6
flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsKIH0K
IAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6OnNldFZh
bHVlKGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9IG1heChtaW4o
diwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVlKCkgPT0g
dikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgot
ICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJvbVNjcm9sbEFu
aW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNSwyNiArMTE1LDMwIEBAIHZv
aWQgU2Nyb2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9
IDEuMGYgLyBwaXhlbHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyKQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
Ym9vbCBmcm9tS2V5cHJlc3MpCiB7Ci0gICAgZmxvYXQgc3RlcCA9IDA7Ci0gICAgaWYgKChkaXJl
Y3Rpb24gPT0gU2Nyb2xsVXAgJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikg
fHwgKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikpCi0gICAgICAgIHN0ZXAgPSAtMTsKLSAgICBlbHNlIGlmICgoZGlyZWN0aW9u
ID09IFNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwg
KGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpKSAKLSAgICAgICAgc3RlcCA9IDE7Ci0gICAgCisgICAgLy8gSWdub3JlIHBlcnBl
bmRpY3VsYXIgc2Nyb2xscy4KKyAgICBpZiAoKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxE
b3duKSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmln
aHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBzdGVwOwogICAgIGlmIChn
cmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmUpCi0gICAgICAgIHN0ZXAgKj0gbV9saW5lU3RlcDsK
KyAgICAgICAgc3RlcCA9IG1fbGluZVN0ZXA7CiAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0g
U2Nyb2xsQnlQYWdlKQotICAgICAgICBzdGVwICo9IG1fcGFnZVN0ZXA7CisgICAgICAgIHN0ZXAg
PSBtX3BhZ2VTdGVwOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1l
bnQpCi0gICAgICAgIHN0ZXAgKj0gbV90b3RhbFNpemU7CisgICAgICAgIHN0ZXAgPSBtX3RvdGFs
U2l6ZTsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBpeGVsKQotICAgICAg
ICBzdGVwICo9IG1fcGl4ZWxTdGVwOwotICAgICAgICAKLSAgICBmbG9hdCBuZXdQb3MgPSBtX2N1
cnJlbnRQb3MgKyBzdGVwICogbXVsdGlwbGllcjsKKyAgICAgICAgc3RlcCA9IG1fcGl4ZWxTdGVw
OworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExl
ZnQpCisgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBmbG9hdCBtdWx0aXBs
aWVkU3RlcCA9IHN0ZXAgKiBtdWx0aXBsaWVyOwogICAgIGZsb2F0IG1heFBvcyA9IG1fdG90YWxT
aXplIC0gbV92aXNpYmxlU2l6ZTsKLSAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG5l
d1BvcywgbWF4UG9zKSwgMC4wZikpOworICAgIGJvb2wgY2hhbmdlZFNvbWV0aGluZzsKKyAgICBp
ZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgZnJvbUtleXByZXNzLCBtYXhQb3Ms
ICZjaGFuZ2VkU29tZXRoaW5nKSkKKyAgICAgICAgcmV0dXJuIGNoYW5nZWRTb21ldGhpbmc7CisK
KyAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIG11bHRpcGxp
ZWRTdGVwLCBtYXhQb3MpLCAwLjBmKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlBvc2l0aW9uKCkKQEAgLTE4Nyw3ICsxOTEsNyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0
b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBhcnJvd3Mg
YW5kIHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwg
cHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAoc2Nyb2xsKHByZXNzZWRQ
YXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSwgMSwg
ZmFsc2UpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yNTcs
MTEgKzI2MSwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxz
ZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsK
ICAgICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsK
KyAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0
YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29s
IFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAg
aWYgKG5vdGlmeVNjcm9sbEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisK
ICAgICBpZiAocG9zID09IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMDYsNyArMzEzLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cgogewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAo
dGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAg
ICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3Zl
VGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAg
ICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDExICs3OCwxMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAg
ICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1Bl
clN0ZXAgPSAxKTsKLSAgICBib29sIHNldFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1ZShp
bnQsIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGlu
dCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGlu
dCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyLCBib29sIGZyb21LZXlwcmVzcyk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xNDIs
NyArMTQyLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9sbEdyYW51bGFyaXR5IHByZXNzZWRQYXJ0
U2Nyb2xsR3JhbnVsYXJpdHkoKTsKICAgICAKICAgICB2b2lkIG1vdmVUaHVtYihpbnQgcG9zKTsK
LSAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBib29sIHNldEN1cnJlbnRQ
b3MoZmxvYXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKTsKIAogICAgIFNjcm9sbGJh
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlv
bjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA1MjE4NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDE2ICsyNywyOCBAQAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFNjcm9sbGJhckNsaWVudCB7CitjbGFzcyBTY3JvbGxiYXJDbGllbnQgOiBwdWJsaWMg
U2Nyb2xsQW5pbWF0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGJhckNs
aWVudCgpIHt9CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7
CiAKKyAgICBib29sIHBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllZFN0ZXAsIGJvb2wgZnJvbUtleXByZXNzLCBmbG9hdCBtYXhQb3MsIGJvb2wqIGNoYW5n
ZWRTb21ldGhpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvciA/IG1f
c2Nyb2xsQW5pbWF0b3ItPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgZnJvbUtleXByZXNzLCBtYXhQb3MsIGNoYW5nZWRT
b21ldGhpbmcpIDogZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFu
ZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBv
cykKKyAgICB7CisgICAgICAgIGlmIChtX3Njcm9sbEFuaW1hdG9yKQorICAgICAgICAgICAgbV9z
Y3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0
aW9uLCBwb3MpOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtV2luLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oIgorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPg0KKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworU2Nyb2xsQW5p
bWF0b3IqIFNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUNyZWF0ZVdpdGhDbGllbnQoU2Nyb2xsQW5p
bWF0b3JDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1XaW4oY2xpZW50KTsKK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6UGVyQXhp
c0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4qIHBhcmVudCkKKyAg
ICA6IG1fY3VycmVudFBvcygwKQorICAgICwgbV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJl
bnRWZWxvY2l0eSgwKQorICAgICwgbV9kZXNpcmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFu
aW1hdGlvblRpbWUoMCkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bVdpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworCitTY3JvbGxB
bmltYXRvckNocm9taXVtV2luOjpTY3JvbGxBbmltYXRvckNocm9taXVtV2luKFNjcm9sbEFuaW1h
dG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2hvcml6
b250YWxEYXRhKHRoaXMpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSh0aGlzKQoreworfQorCitTY3Jv
bGxBbmltYXRvckNocm9taXVtV2luOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbigpCit7Cisg
ICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgYm9vbCBmcm9tS2V5cHJlc3MsIGZsb2F0IG1heFBvcywg
Ym9vbCogY2hhbmdlZFNvbWV0aGluZykKK3sKKyAgICAvLyBEb24ndCBhbmltYXRlIGp1bXBpbmcg
dG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGlmIChncmFudWxh
cml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBUaGlzIGlzIGFuIGFuaW1hdGlibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVs
dGEuCisgICAgKmNoYW5nZWRTb21ldGhpbmcgPSBmYWxzZTsKKyAgICBQZXJBeGlzRGF0YSogZGF0
YSA9IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pID8g
Jm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisgICAgZmxvYXQgbmV3UG9zID0g
c3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsgbXVsdGlwbGllZFN0ZXAsIG1h
eFBvcyksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkYXRhLT5tX2Rlc2lyZWRQb3MgPSBuZXdQb3M7CisKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIGFuaW1hdGlvbiB2ZWxvY2l0eS4KKyAgICBpZiAoZGF0YS0+bV9j
dXJyZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZmxvYXQgYW5pbWF0aW9uU3RlcDsKKyAgICBib29sIGFscmVhZHlBbmltYXRpbmcgPSBkYXRh
LT5tX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCk7CisgICAgaWYgKCFmcm9tS2V5cHJlc3MgJiYg
KGdyYW51bGFyaXR5ICE9IFNjcm9sbEJ5UGl4ZWwpKSB7CisgICAgICAgIC8vIFdoZW4gYXV0b3Nj
cm9sbGluZywgdGhlIHNjcm9sbGJhcidzIGF1dG9zY3JvbGwgdGltZXIgd2lsbCBjYWxsIHVzIHRv
CisgICAgICAgIC8vIGluY3JlbWVudCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBieSB8c3RlcHwgZXZl
cnkKKyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxU
aW1lckRlbGF5KCkgc2Vjb25kcy4gIElmIHdlCisgICAgICAgIC8vIHNldCB0aGUgZGVzaXJlZCB2
ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsCisgICAg
ICAgIC8vIG5laXRoZXIgcmFjZSBhaGVhZCAoYW5kIHRoZW4gaGF2ZSB0byBzbG93IGRvd24pIG5v
ciBpbmNyZWFzaW5nbHkgbGFnCisgICAgICAgIC8vIGJlaGluZCwgYnV0IHdpbGwgYmUgc21vb3Ro
IGFuZCBzeW5jaHJvbml6ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBiZWNh
dXNlIG9mIHRoZSBhY2NlbGVyYXRpb24gcGVyaW9kLCB0aGUgY3VycmVudCBwb3NpdGlvbgorICAg
ICAgICAvLyB3aWxsIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1v
dW50IChzZWUgY29tbWVudHMgb24KKyAgICAgICAgLy8gYW5pbWF0ZVNjcm9sbCgpKTsgdGhlIGV4
YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9IHxzdGVwfCAtIHYoMC41
dEEgKyB0RCkKKyAgICAgICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICB2ID0gVGhlIHN0ZWFkeS1z
dGF0ZSB2ZWxvY2l0eSwKKyAgICAgICAgLy8gICAgICAgfHN0ZXB8IC8gU2Nyb2xsYmFyVGhlbWU6
Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKKyAgICAgICAgLy8gICB0QSA9
IFRoZSBhY2NlbGVyYXRpb24gdGltZSwKKyAgICAgICAgLy8gICAgICAgIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8vICAgdEQg
PSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5nIHRv
CisgICAgICAgIC8vICAgICAgICBzY3JvbGwsIDAuMDFzCisgICAgICAgIC8vIFdoaWNoLCBmb3IK
KyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1l
ckRlbGF5KCkgPT0gMC4wNXMsIGdpdmVzCisgICAgICAgIC8vIGEgbGFnIG9mICgwLjMgKiB8c3Rl
cHwpLgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21lIGJ1ZmZl
ciBhZ2FpbnN0IHRpbWVyIGppdHRlciBzbyB3ZSdyZSBsZXNzCisgICAgICAgIC8vIGxpa2VseSB0
byBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYW5kIHN0b3AgKGFuZCB0aHVzIGhhdmUgdG8KKyAg
ICAgICAgLy8gcmUtYWNjZWxlcmF0ZSwgY2F1c2luZyBhIHZpc2libGUgaGl0Y2gpIHdoaWxlIHdh
aXRpbmcgZm9yIHRoZSBuZXh0CisgICAgICAgIC8vIGF1dG9zY3JvbGwgaW5jcmVtZW50LgorICAg
ICAgICBhbmltYXRpb25TdGVwID0gc3RlcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3Ig
a2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdlIGRvbid0IGtub3cgd2hlbiB0aGUgbmV4dCBp
bmNyZW1lbnQKKyAgICAgICAgLy8gd2lsbCBiZSByZXF1ZXN0ZWQuICBJZiB3ZSBzZXQgdGhlIHRh
cmdldCB2ZWxvY2l0eSBiYXNlZCBvbiBob3cgZmFyCisgICAgICAgIC8vIGF3YXkgZnJvbSB0aGUg
dGFyZ2V0IHBvc2l0aW9uIHdlIGFyZSwgdGhlbiBmb3Iga2V5Ym9hcmQvd2hlZWwgZXZlbnRzCisg
ICAgICAgIC8vIHRoYXQgY29tZSBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Njcm9sbCBkZWxheSwgd2Un
bGwgYXN5bXB0b3RpY2FsbHkKKyAgICAgICAgLy8gYXBwcm9hY2ggdGhlIHZlbG9jaXR5IG5lZWRl
ZCB0byBzdGF5IHNtb290aGx5IGluIHN5bmMgd2l0aCB0aGUgdXNlcidzCisgICAgICAgIC8vIGFj
dGlvbnM7IGZvciBldmVudHMgdGhhdCBjb21lIHNsb3dlciwgd2UnbGwgc2Nyb2xsIG9uZSBpbmNy
ZW1lbnQgYW5kCisgICAgICAgIC8vIHRoZW4gcGF1c2UgdW50aWwgdGhlIG5leHQgZXZlbnQgZmly
ZXMuICBUaGlzIGxhdHRlciBiZWhhdmlvciBtZWFucworICAgICAgICAvLyB0aGF0IHNpbmdsZSBr
ZXlwcmVzc2VzIG9yIHdoZWVsIGZsaWNrcyB3aWxsIGhhdmUgdGhlIHNhbWUgYXBwZWFyYW5jZQor
ICAgICAgICAvLyBhcyBzaW5nbGUgcHJlc3NlcyBvZiBhIHNjcm9sbGJhciBwYXJ0LgorICAgICAg
ICBhbmltYXRpb25TdGVwID0gYWJzKG5ld1BvcyAtIGRhdGEtPm1fY3VycmVudFBvcyk7CisgICAg
ICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdoZWVsIGNvbnRpbnVhbGx5IHNw
dW4pLCB0aGVuIG9uY2Ugd2UKKyAgICAgICAgLy8gaGF2ZSByZWFjaGVkIGEgdmVsb2NpdHkgY2xv
c2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUKKyAgICAgICAgLy8gbGlrZWx5
IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhdCBhcm91bmQgdGhlIHNhbWUgdGltZSB3ZSdk
CisgICAgICAgIC8vIGV4cGVjdCB0aGUgbmV4dCBpbmNyZW1lbnQgdG8gb2NjdXIgLS0gYmFkIGJl
Y2F1c2UgaXQgbGVhZHMgdG8KKyAgICAgICAgLy8gaGl0Y2hpbmcgYXMgZGVzY3JpYmVkIGFib3Zl
LiAgU28gd2UgdHJpbSB0aGUgdmVsb2NpdHkgc2xpZ2h0bHkgc28KKyAgICAgICAgLy8gdGhhdCB3
ZSBoYXZlIGEgc21hbGwgYnVmZmVyLCB0byBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiB0aGlz
CisgICAgICAgIC8vIG9jY3VycmluZy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBmYWxsIHN0ZWFkaWx5
IGZ1cnRoZXIgYmVoaW5kIGhlcmUsCisgICAgICAgIC8vIGJlY2F1c2UgaW4gc3Vic2VxdWVudCB1
cGRhdGVzIHdlJ2xsIGJlIGNhbGN1bGF0aW5nIG91ciB2ZWxvY2l0eSBiYXNlZAorICAgICAgICAv
LyBvbiBhIGxhcmdlciBkZXNpcmVkIHN0ZXAgLS0gc28gdGhlIHByYWN0aWNhbCBlZmZlY3QgaXMg
dGhhdCB3ZSBsYWcgYnkKKyAgICAgICAgLy8gYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IGRlcGVu
ZGluZyBvbiB0aGUgdHJpbSB2YWx1ZSBhbmQgdGhlIHJhdGUgYXQKKyAgICAgICAgLy8gd2hpY2gg
aW5jcmVtZW50cyBvY2N1ciBjb21wYXJlZCB0byB0aGUgYXV0b3Njcm9sbCB0aW1lciBkZWxheS4g
IFRoZQorICAgICAgICAvLyBleGFjdCBhbW91bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAgLy8gICBs
YWcgPSB8c3RlcHwgKiAoKHIgLyBrKSAtIDEpCisgICAgICAgIC8vIFdoZXJlCisgICAgICAgIC8v
ICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBlYXQgZGVsYXksCisgICAgICAg
IC8vICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJE
ZWxheSgpLCB0byB0aGUKKyAgICAgICAgLy8gICAgICAga2V5L3doZWVsIHJlcGVhdCBkZWxheSAo
aS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBmYXN0ZXIpCisgICAgICAgIC8vICAgayA9IFRoZSB2
ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAgICAgIC8vCisgICAgICAgIC8v
IElmIHdlIHdhbnQgdG8gYWN0IGFzIG11Y2ggbGlrZSBhdXRvc2Nyb2xsaW5nIGFzIHBvc3NpYmxl
LCB0aGVuIHdlCisgICAgICAgIC8vIGNob29zZSBrIHN1Y2ggdGhhdCBsYWcgPSAoMC4zICogfHN0
ZXB8KSAoaS5lLiB0aGUgc2FtZSBhcyBhYm92ZSkgd2hlbgorICAgICAgICAvLyByID0gMS4gIFRo
aXMgZ2l2ZXMgayA9IDEwLzEzLgorICAgICAgICBpZiAoYWxyZWFkeUFuaW1hdGluZykKKyAgICAg
ICAgICAgIGFuaW1hdGlvblN0ZXAgKj0gKDEwLjAgLyAxMy4wKTsKKyAgICB9CisgICAgZGF0YS0+
bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2
ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisgICAgKmNoYW5nZWRTb21ldGhpbmcg
PSB0cnVlOworCisgICAgLy8gSWYgd2UncmUgbm90IGFscmVhZHkgc2Nyb2xsaW5nLCBzdGFydC4K
KyAgICBpZiAoIWFscmVhZHlBbmltYXRpbmcpCisgICAgICAgIGFuaW1hdGVTY3JvbGwoZGF0YSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3Zl
cnRpY2FsRGF0YTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICBk
YXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9zOwor
ICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSA9IDA7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6YW5pbWF0aW9u
VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtV2luPiogdGltZXIpCit7Cisg
ICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9yaXpvbnRhbERhdGEubV9hbmltYXRpb25U
aW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVy
QXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6YW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0YSogZGF0
YSkKK3sKKyAgICAvLyBOb3RlIG9uIHNtb290aCBzY3JvbGxpbmcgcGVyZiB2ZXJzdXMgbm9uLXNt
b290aCBzY3JvbGxpbmcgcGVyZjoKKyAgICAvLyBUaGUgdG90YWwgdGltZSB0byBwZXJmb3JtIGEg
Y29tcGxldGUgc2Nyb2xsIGlzIGdpdmVuIGJ5CisgICAgLy8gICB0ID0gdDAgKyAwLjV0QSAtIHRE
ICsgdFMKKyAgICAvLyBXaGVyZQorICAgIC8vICAgdDAgPSBUaGUgdGltZSB0byBwZXJmb3JtIHRo
ZSBzY3JvbGwgd2l0aG91dCBzbW9vdGggc2Nyb2xsaW5nCisgICAgLy8gICB0QSA9IFRoZSBhY2Nl
bGVyYXRpb24gdGltZSwKKyAgICAvLyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1l
KCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgKHNlZSBiZWxvdykKKyAgICAvLyAgIHREID0gfGRl
c2lyZWRTY3JvbGxJbnRlcnZhbHwgKHNlZSBiZWxvdykKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAg
Ly8gICAgICAgIHNpbmdsZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVl
IHRvIGNhbGxpbmcKKyAgICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBm
b3Igc2ltcGxlIHBhZ2VzLCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMp
LgorICAgIC8vCisgICAgLy8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhl
IHRvdGFsIGxhZyAoYXMgdXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgfjAgKGFjdHVhbGx5
IDE1IG1zIGJ5IGRlZmF1bHQpIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yCisg
ICAgLy8gY29tcGxleCBwYWdlcy4gIFdpdGhvdXQga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJn
ZSB0UyBpcyBpdCdzIGhhcmQgdG8KKyAgICAvLyBkbyBiZXR0ZXIgdGhhbiB0aGlzLiAgUGVyaGFw
cyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMgdmFsdWVzCisgICAgLy8gYW5kIGZv
cndhcmQtY29tcGVuc2F0ZS4KKworCisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9s
bCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIg
bGFzdCB1cGRhdGUuICBUaGlzIG1heSBiZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNw
ZWNpYWxseSBpZgorICAgIC8vIHRoZSBwYWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBz
bG93LgorICAgIGRvdWJsZSBkZXNpcmVkU2Nyb2xsSW50ZXJ2YWwgPSAwLjAxOworICAgIC8vIFRv
IGF2b2lkIGZlZWxpbmcgbGFnZ3ksIGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xs
aW5nIHdlIHByZXRlbmQKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUg
aWRlYWwgaW50ZXJ2YWwsIHNvIHRoYXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29t
ZSBkaXN0YW5jZSBpbW1lZGlhdGVseS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0g
ZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9s
YXN0QW5pbWF0aW9uVGltZSkgOiBkZXNpcmVkU2Nyb2xsSW50ZXJ2YWw7CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3Vy
cmVudAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAg
aWYgKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsK
KyAgICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVh
Y2ggdGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIC8vIFdlIGVsZWN0IHRvIHVzZSBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQorICAgICAg
ICAvLyBhcyB0aGUgbGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20g
MCB0byB0aGF0CisgICAgICAgIC8vIHZlbG9jaXR5LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUg
d291bGQgcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNlZAorICAgICAgICAvLyBhY2NlbGVyYXRpb24g
ZWZmZWN0LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNpcmVk
VmVsb2NpdHkgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKTsKKworICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVy
YXRpb24gaGFzIGNhdXNlZCB1cyB0byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9j
aXR5LgorICAgICAgICBmbG9hdCBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlv
blJhdGUgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1Zl
bG9jaXR5ID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5n
ZTsKKyAgICAgICAgaWYgKHBvdGVudGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVs
b2NpdHkpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBh
dCBzb21lIHBvaW50IGJldHdlZW4gb3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQg
bm93LiAgVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAg
ICAgICAgICAgLy8gcGllY2VzOiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0
aW5nLCBhbmQgdGhlCisgICAgICAgICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFj
aGluZyB0aGUgdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2Np
dHlDaGFuZ2UgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5OworICAgICAgICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxv
Y2l0eUNoYW5nZSAvIGFjY2VsZXJhdGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFu
Y2UgdHJhdmVsZWQgdW5kZXIgY29uc3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAg
ICAgICAgICAvLyB1bmRlciBhIGxpbmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNs
b3BlLiAgQnJlYWsgdGhpcworICAgICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlv
biBhdG9wIGEgcmVjdGFuZ3VsYXIgcG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFu
Y2VUcmF2ZWxlZCA9ICgoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlD
aGFuZ2UgLyAyKSkgKiBhY2NlbGVyYXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUg
ZGlzdGFuY2UgdHJhdmVsZWQgYXQgdGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAg
ICAgICAgIC8vICh0YXJnZXQgdmVsb2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2Vs
ZXJhdGluZykuCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2ly
ZWRWZWxvY2l0eSAqIChsYXN0U2Nyb2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkp
OworICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2Vs
ZXJhdGlvbiB0aHJvdWdoIHRoZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRp
c3RhbmNlVHJhdmVsZWQgPSAoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVs
b2NpdHlDaGFuZ2UgLyAyKSkgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQg
dmVsb2NpdHksIHNvIHRoZSBkaXN0YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBz
aW1wbHkgKGN1cnJlbnQgdmVsb2NpdHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZh
bDsKKyAgICAgICAgLy8gSWYgb3VyIGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJv
cCB0aGUgY3VycmVudCB2ZWxvY2l0eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5ID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0
ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAg
ICBpZiAoZGlzdGFuY2VUcmF2ZWxlZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gZGF0YS0+
bV9jdXJyZW50UG9zKSkgeworICAgICAgICAvLyBXZSd2ZSB0cmF2ZWxlZCBmYXIgZW5vdWdoIHRv
IHJlYWNoIHRoZSBkZXNpcmVkIHBvc2l0aW9uLiAgU3RvcCBzbW9vdGgKKyAgICAgICAgLy8gc2Ny
b2xsaW5nLgorICAgICAgICBkYXRhLT5tX2N1cnJlbnRQb3MgPSBkYXRhLT5tX2Rlc2lyZWRQb3M7
CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICAgICAgZGF0YS0+bV9k
ZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCB5ZXQgYXQg
dGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0IGFuZCBzZXQgdXAgdGhlCisg
ICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoZGF0YS0+bV9jdXJyZW50UG9zID4g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0
YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2N1cnJlbnRQb3MgKz0gZGlzdGFuY2VUcmF2
ZWxlZDsKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoZGVzaXJl
ZFNjcm9sbEludGVydmFsKTsKKyAgICAgICAgZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSA9IFdU
Rjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldHNG
cm9tQW5pbWF0aW9uKG1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50UG9zLCBtX3ZlcnRpY2FsRGF0
YS5tX2N1cnJlbnRQb3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4uaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVdpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxB
bmltYXRvckNocm9taXVtV2luLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JvbGxBbmltYXRvckNocm9taXVtV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bVdpbl9oCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTY3JvbGxBbmltYXRvckNocm9taXVtV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9y
IHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvckNocm9taXVtV2luKFNjcm9sbEFuaW1hdG9y
Q2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbigpOworCisg
ICAgdmlydHVhbCBib29sIHBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgYm9vbCBm
cm9tS2V5cHJlc3MsIGZsb2F0IG1heFBvcywgYm9vbCogY2hhbmdlZFNvbWV0aGluZyk7CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7
CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4qIHBhcmVudCk7
CisKKyAgICAgICAgZmxvYXQgbV9jdXJyZW50UG9zOworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRQ
b3M7CisgICAgICAgIGZsb2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAgICBmbG9hdCBtX2Rl
c2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblRpbWU7CisgICAg
ICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4+IG1fYW5pbWF0aW9uVGltZXI7Cisg
ICAgfTsKKworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRv
ckNocm9taXVtV2luPiopOworICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVy
QXhpc0RhdGEqKTsKKyAgICB2b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAg
IFNjcm9sbEFuaW1hdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6
b250YWxEYXRhOworICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfQorI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA1MjE4
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMyArODIsMTMgQEAgYm9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBs
YXRmbwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEJvdHRvbSkKICAg
ICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9
PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdDogU2Ny
b2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYg
KGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlLCAxKTsKKyAgICAgICAg
c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFn
ZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVw
KQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Ny
b2xsQnlMaW5lLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDog
U2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNl
bGVjdGVkID09IGFjdFNjcm9sbERvd24pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIDEpOworICAgICAgICBzY3JvbGwo
aG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCAxLCBm
YWxzZSk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHANCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA1MjE4
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2Miw2ICs2NjIsMTIgQEAgdm9pZCBQb3B1cE1lbnU6OnBhaW50KGNvbnN0IEludFJl
Y3QmIGRhbQogICAgICAgICA6OlJlbGVhc2VEQyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAordm9p
ZCBQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFs
LCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9s
bGJhci0+c2V0VmFsdWUodmVydGljYWwsIHRydWUpOworfQorCiB2b2lkIFBvcHVwTWVudTo6dmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJh
cik7CkBAIC05NzYsNyArOTgyLDcgQEAgTFJFU1VMVCBQb3B1cE1lbnU6OnduZFByb2MoSFdORCBo
V25kLCBVSQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgLS1pOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNj
cm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOworICAgICAgICAgICAg
c2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xs
QnlMaW5lLCBhYnMoaSksIGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMCArNDAy
LDEwIEBAIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQKICAgICByZXR1
cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCi1ib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlckJveDo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyLCBib29sIGZyb21LZXlwcmVzcywgTm9kZSoqIHN0b3BOb2RlKQogewog
ICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAobCAmJiBsLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzKSkgewog
ICAgICAgICBpZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDE2LDcgKzQxNiw3IEBAIGJvb2wgUmVuZGVyQm94Ojpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1
cm4gYi0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2Rl
KTsKKyAgICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBmcm9tS2V5cHJlc3MsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7
CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIGJvb2wgZnJvbUtleXByZXNzLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNh
bkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBhdXRvc2Nyb2xsKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3Jp
ZC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5j
cHAJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDEyIEBAIHZvaWQgUmVuZGVyRGF0YUdy
aWQ6OnBhaW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9u
IGZ1bmN0aW9ucwordm9pZCBSZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zmc2V0c0Zyb21Bbmlt
YXRpb24oaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAobV92QmFyKQor
ICAgICAgICBtX3ZCYXItPnNldFZhbHVlKHZlcnRpY2FsLCB0cnVlKTsKK30KKwogdm9pZCBSZW5k
ZXJEYXRhR3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA1
MjE4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDkgQEAgcHJpdmF0ZToKIAogICAgIEhUTUxEYXRhR3JpZEVsZW1lbnQq
IGdyaWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFHcmlkRWxl
bWVudCo+KG5vZGUoKSk7IH0KIAorICAgIC8vIFNjcm9sbEFuaW1hdG9yQ2xpZW50IGludGVyZmFj
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24oaW50IGhv
cml6b250YWwsIGludCB2ZXJ0aWNhbCk7CisKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJm
YWNlLgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNTIxODYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMDYsOSArMTIwNiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4
LCAKICAgICAKICAgICBpZiAodXBkYXRlU2Nyb2xsYmFycykgewogICAgICAgICBpZiAobV9oQmFy
KQotICAgICAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAg
ICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCksIGZhbHNlKTsKICAgICAgICAg
aWYgKG1fdkJhcikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZKTsKKyAg
ICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBmYWxzZSk7CiAgICAgfQogCiAg
ICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0xNDU1LDYgKzE0NTUsMTQg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1F
IChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFz
IG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9
CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBo
b3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9o
QmFyLT5zZXRWYWx1ZShob3Jpem9udGFsLCB0cnVlKTsKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKHZlcnRpY2FsLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJMYXll
cjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9sbCBwb3Np
dGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0xODkwLDcgKzE4OTgsNyBAQCBSZW5kZXJMYXllcjo6
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBh
Z2VTdGVwID0gY2xpZW50V2lkdGg7CiAgICAgICAgIG1faEJhci0+c2V0U3RlcHMoY1Njcm9sbGJh
clBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faEJhci0+c2V0UHJvcG9y
dGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0VmFs
dWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zm
c2V0KCksIGZhbHNlKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikgewogICAgICAgICBpbnQgY2xp
ZW50SGVpZ2h0ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKQEAgLTIwNTIsNyArMjA2MCw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2wKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wg
UmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBmcm9tS2V5cHJlc3Mp
CiB7CiAgICAgYm9vbCBkaWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7CiAgICAgYm9vbCBkaWRW
ZXJ0aWNhbFNjcm9sbCA9IGZhbHNlOwpAQCAtMjA2MSwxMyArMjA2OSwxMyBAQCBib29sIFJlbmRl
ckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9
PSBTY3JvbGxCeURvY3VtZW50KSB7CiAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgZm9yIHRo
ZSBTY3JvbGxCeURvY3VtZW50IGdyYW51bGFyaXR5LiBBIGRvY3VtZW50IHNjcm9sbCBjYW4gb25s
eSBiZSB1cCAKICAgICAgICAgICAgIC8vIG9yIGRvd24gYW5kIGluIGJvdGggY2FzZXMgdGhlIGhv
cml6b250YWwgYmFyIGdvZXMgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQuCi0gICAgICAgICAgICBk
aWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlE
b2N1bWVudCwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0g
bV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllciwg
ZnJvbUtleXByZXNzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRIb3Jpem9udGFs
U2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzKTsKICAgICB9CiAK
ICAgICBpZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAgICBkaWRWZXJ0
aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIsIGZyb21LZXlwcmVzcyk7CiAKICAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3JvbGwg
fHwgZGlkVmVydGljYWxTY3JvbGwpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJ
KHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7CisgICAgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgYm9vbCBmcm9tS2V5cHJlc3MpOwogICAgIHZvaWQgYXV0b3Njcm9sbCgpOwogCiAgICAg
dm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50U2l6ZSYpOwpA
QCAtNDkwLDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxv
d09ubHkoKSBjb25zdDsgCiAKKyAgICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2Uu
CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jp
em9udGFsLCBpbnQgdmVydGljYWwpOworCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFj
ZQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDUyMTg2
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxl
bWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAgICAgIG1fdkJhci0+
c2V0VmFsdWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC01MTAsOSArNTEwLDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJc1Zpc2libGUo
aQogICAgIHJldHVybiBpbmRleCA+PSBtX2luZGV4T2Zmc2V0ICYmIGluZGV4IDwgbV9pbmRleE9m
ZnNldCArIG51bVZpc2libGVJdGVtcygpOwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQorYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgZnJvbUtleXByZXNzLCBOb2RlKiopCiB7Ci0gICAgcmV0
dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKTsKKyAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIGZyb21LZXlwcmVzcyk7CiB9CiAKIHZvaWQgUmVuZGVy
TGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKQEAgLTUyMyw2ICs1MjMs
MTIgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZQogICAgIGVsZW1l
bnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCit2b2lkIFJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQg
dmVydGljYWwpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZSh2
ZXJ0aWNhbCwgdHJ1ZSk7Cit9CisKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopCiB7CiAgICAgaW50IG5ld09mZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKQEAgLTU3
OCw3ICs1ODQsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAg
ICAgICAgIHJldHVybjsKICAgICBtX2luZGV4T2Zmc2V0ID0gaW5kZXg7CiAgICAgaWYgKG1fdkJh
cikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCk7CisgICAgICAgIG1fdkJhci0+c2V0
VmFsdWUoaW5kZXgsIGZhbHNlKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDUyMTg2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3
ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dD
b250cm9sKEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgYm9vbCBmcm9tS2V5cHJlc3MsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwog
CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsK
QEAgLTk1LDYgKzk1LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAg
ICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwp
OworCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KICAgICB2aXJ0dWFsIHZvaWQg
dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDgsMTIgKzgwOCwxMiBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+
c2V0U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wg
ZnJvbUtleXByZXNzLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkK
KyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyLCBmcm9tS2V5cHJlc3MpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
LCBzdG9wTm9kZSk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzLCBzdG9wTm9kZSk7CiB9CiAKIFBh
c3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxM
ZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgYm9vbCBmcm9tS2V5cHJlc3MsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50
IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVu
dFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTItMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgQ2hyb21pdW0vV2luIGltcGxl
bWVudGF0aW9uLg0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyMzU2DQorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6IE1hcmsgd2hpY2gg
c2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRo
S2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xs
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFu
ZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAqIHNyYy93aW4vV2ViSW5w
dXRFdmVudEZhY3RvcnkuY3BwOiBVcGRhdGUgY29tbWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9v
dGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91
c2VXaGVlbEV2ZW50KToKKwogMjAwOS0xMi0xNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkzLDEwICs5
OTMsMTAgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IAogICAgIC8v
IG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQgYW5kIG1vdmVUb0VuZGZEb2N1bWVudCBhcmUgb25s
eSBoYW5kbGVkIGJ5IFdlYktpdAogICAgIC8vIGZvciBlZGl0YWJsZSBub2Rlcy4KICAgICBpZiAo
IWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvQmVnaW5u
aW5nT2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3Jv
bGwoU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICByZXR1cm4gdmlld0ltcGwo
KS0+cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50LCBmYWxzZSk7CiAK
ICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92
ZVRvRW5kT2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVT
Y3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3
SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgZmFs
c2UpOwogCiAgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKHdlYk5hbWUpLmV4
ZWN1dGUodmFsdWUpOwogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAko
cmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzM4LDIzICs3MzgsMjEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Ny
b2xsVmlld1dpdGhLZXlib2FyZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
cmV0dXJuIHByb3BhZ2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5
KTsKKyAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3Jh
bnVsYXJpdHksIHRydWUpOwogfQogCiBib29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxh
cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZyb21LZXlwcmVz
cykKIHsKICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBzY3JvbGxIYW5kbGVk
ID0KLSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxE
aXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9IGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxh
cml0eSwgZnJvbUtleXByZXNzKTsKICAgICBGcmFtZSogY3VycmVudEZyYW1lID0gZnJhbWU7CiAg
ICAgd2hpbGUgKCFzY3JvbGxIYW5kbGVkICYmIGN1cnJlbnRGcmFtZSkgewotICAgICAgICBzY3Jv
bGxIYW5kbGVkID0gY3VycmVudEZyYW1lLT52aWV3KCktPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbEdyYW51bGFyaXR5KTsKKyAgICAgICAgc2Nyb2xsSGFuZGxlZCA9IGN1cnJlbnRGcmFtZS0+
dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgZnJvbUtl
eXByZXNzKTsKICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLT50cmVlKCktPnBh
cmVudCgpOwogICAgIH0KICAgICByZXR1cm4gc2Nyb2xsSGFuZGxlZDsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBUcmllcyB0byBzY3JvbGwgYSBmcmFtZSBvciBhbnkgcGFyZW50IG9mIGEg
ZnJhbWUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldwogICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAg
ICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6
OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5LCBib29sIGZyb21LZXlw
cmVzcyk7CiAKICAgICAvLyBIQUNLOiBjdXJyZW50SW5wdXRFdmVudCgpIGlzIGZvciBDaHJvbWVD
bGllbnRJbXBsOjpzaG93KCksIHVudGlsIHdlIGNhbgogICAgIC8vIGZpeCBXZWJLaXQgdG8gcGFz
cyBlbm91Z2ggaW5mb3JtYXRpb24gdXAgaW50byBDaHJvbWVDbGllbnQ6OnNob3coKSBzbyB3ZQpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3Rv
cnkuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklu
cHV0RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEzICszOTYsMTYgQEAg
V2ViTW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogCiAgICAgLy8gQ29udmVy
dCB3aGVlbCBkZWx0YSBhbW91bnQgdG8gYSBudW1iZXIgb2YgcGl4ZWxzIHRvIHNjcm9sbC4KICAg
ICAvLwotICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAg
R2Vja28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQotICAgIC8vIGN1cnJlbnQgbGluZSwgd2hpY2gg
bWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91Z2ggdGhlCi0gICAg
Ly8gcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMuICBJRSA3IGlzIH41MCBweC9saW5lLCBh
bHRob3VnaCB0aGUgdmFsdWUKLSAgICAvLyBzZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2Ug
YW5kIHpvb20gbGV2ZWwuICBTaW5jZSBJRSA3IGhhcyBhIHNtb290aGluZwotICAgIC8vIGFsZ29y
aXRobSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdodGx5IGxhcmdlciBz
Y3JvbGwgdmFsdWVzCi0gICAgLy8gd2l0aG91dCBmZWVsaW5nIGplcmt5LiAgSGVyZSB3ZSB1c2Ug
MTAwIHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQKLSAgICAvLyBzY3JvbGwgYW1vdW50
IGlzIHRocmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBIb3cgbWFueSBwaXhlbHMg
c2hvdWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEZpcmVmb3ggdXNlcyB0aGUgaGVpZ2h0IG9mCisg
ICAgLy8gdGhlIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5n
ZXMgYXMgeW91IGdvIHRocm91Z2gKKyAgICAvLyB0aGUgcGFnZSBvciBnbyB0byBkaWZmZXJlbnQg
cGFnZXMuICBJRSA4IGlzIH42MCBweC9saW5lLCBhbHRob3VnaCB0aGUKKyAgICAvLyB2YWx1ZSBz
ZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwuICBBbHNvLCBJRSBk
ZWZhdWx0cworICAgIC8vIHRvIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0
LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aAorICAgIC8vIHNvbWV3aGF0IGxhcmdlciBzY3JvbGwg
dmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMAorICAgIC8v
IHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBs
aW5lcyBwZXIgd2hlZWwKKyAgICAvLyB0aWNrKS4gIEV2ZW4gdGhvdWdoIHdlIGhhdmUgc21vb3Ro
IHNjcm9sbGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxhcmdlCisgICAgLy8gYXMgSUUgYmVj
YXVzZSBzdWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBzY3JvbGxzIGZhcnRoZXIgdGhhbiB5
b3Ugd2FudAorICAgIC8vIHdoaWxlIHJlYWRpbmcgYXJ0aWNsZXMuCiAgICAgc3RhdGljIGNvbnN0
IGZsb2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAzLjBmOwogICAgIHdoZWVs
RGVsdGEgLz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRh
OwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvZ3Rr
L0NoYW5nZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8
cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9t
aXVtL1dpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5j
cHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nl
cy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21vdmVfY3Vyc29yKToKKwogMjAwOS0x
Mi0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShy
ZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzMsOCArOTczLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93
ZWJfdmlld19yZWFsX21vdgogICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmll
dyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSkpCi0gICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
KTsKKyAgICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgdHJ1ZSkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCAxLCB0cnVlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVt
L1dpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbTog
TWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgor
ICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246Z3JhbnVs
YXJpdHk6ZnJvbUtleXByZXNzOl0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRv
QmVnaW5uaW5nT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRv
RW5kT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VWZXJ0aWNhbGx5
Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VIb3Jpem9udGFsbHk6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgt
W1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZUhvcml6b250YWxseTpdKToKKwogMjAwOS0xMi0xMyAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBC
ZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkocmV2aXNpb24g
NTIxODYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01MTksNyArNTE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNs
YXNzKE5TTQogICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKIH0KIAotLSAoQk9PTClf
c2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFu
dWxhcml0eTooU2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0gKEJPT0wpX3Njcm9sbE92
ZXJmbG93SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6
KFNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGZyb21LZXlwcmVzczooQk9PTClmcm9tS2V5
cHJlc3MKIHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBp
ZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1
bWVudFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCkBAIC01MjcsMTIg
KzUyNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBmcm9t
S2V5cHJlc3MpOwogfQogCiAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQKIHsK
LSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVs
YXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0lu
RGlyZWN0aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgZnJvbUtleXBy
ZXNzOk5PXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxC
YXJzXSkKICAgICAgICAgcmV0dXJuIE5POwpAQCAtNTQyLDcgKzU0Miw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRv
Y3VtZW50CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9s
bERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3Jv
bGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1
bWVudCBmcm9tS2V5cHJlc3M6Tk9dKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3Nl
bGYgX2hhc1Njcm9sbEJhcnNdKQogICAgICAgICByZXR1cm4gTk87CkBAIC02MTksNyArNjE5LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9w
YWdlVmVydGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJ
bkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxC
eVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNj
cm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2UgZnJvbUtleXByZXNz
OllFU10pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Ny
b2xsQmFyc10pCkBAIC02MzUsNyArNjM1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVz
RnJvbUNsYXNzKE5TTQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFz
U2Nyb2xsQmFyc10pCi0gICAgICAgIHJldHVybiBbW3NlbGYgX2xhcmdlc3RDaGlsZFdpdGhTY3Jv
bGxCYXJzXSBfcGFnZUhvcml6b250YWxseTpsZWZ0XTsKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBf
bGFyZ2VzdENoaWxkV2l0aFNjcm9sbEJhcnNdIF9wYWdlSG9yaXpvbnRhbGx5OmxlZnQgZnJvbUtl
eXByZXNzOllFU107CiAgICAgCiAgICAgZmxvYXQgZGVsdGEgPSBbc2VsZiBfaG9yaXpvbnRhbFBh
Z2VTY3JvbGxEaXN0YW5jZV07CiAgICAgcmV0dXJuIFtzZWxmIF9zY3JvbGxIb3Jpem9udGFsbHlC
eTpsZWZ0ID8gLWRlbHRhIDogZGVsdGFdOwpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRp
Y2FsbHk6KEJPT0wpdXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rp
b246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkK
KyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6
IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lIGZyb21LZXlwcmVzczpZRVNdKQog
ICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCkBA
IC02NTUsNyArNjU1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TQogCiAtIChCT09MKV9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBp
ZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBT
Y3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Ny
b2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdy
YW51bGFyaXR5OlNjcm9sbEJ5TGluZSBmcm9tS2V5cHJlc3M6WUVTXSkKICAgICAgICAgcmV0dXJu
IFlFUzsKIAogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKQpJbmRleDogV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6Omhh
bmRsZVNjcm9sbGluZyhRSwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7
CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZF
UlNJT05fQ0hFQ0soNCwgNiwgMCkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9x
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0xNSAg
UGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3
b3JrLCBhbmQgYSBDaHJvbWl1bS9XaW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBr
ZXlwcmVzc2VzLgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTY3JvbGxpbmcpOgor
CiAyMDA5LTEyLTE0ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJ
bmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL0No
YW5nZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVt
L1dpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogTWFyayB3aGljaCBz
Y3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAoV2Vi
Vmlldzo6a2V5RG93bik6CisKIDIwMDktMTItMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJL
aXQvd2luL1dlYlZpZXcuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODA5LDcgKzE4MDksNyBAQCBib29sIFdlYlZpZXc6OmtleURvd24oV1BBUkFNIHZp
cnR1YWxLZXlDCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJu
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJz
aXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIGJvb2wgV2ViVmlldzo6
a2V5UHJlc3MoV1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlE
b3duKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44940</attachid>
            <date>2009-12-15 21:44:45 -0800</date>
            <delta_ts>2009-12-16 16:57:26 -0800</delta_ts>
            <desc>patch v2.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>70964</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4NCBAQAorMjAwOS0xMi0xNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBDaHJvbWl1bS9XaW4gaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1NgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBzdHViIFNjcm9sbEFu
aW1hdG9yW0NsaWVudF0uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGQgQ2hyb21pdW0vV2lu
IFNjcm9sbEFuaW1hdG9yW0NsaWVudF0uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6IEFkZCBzdHViIFNjcm9sbEFuaW1hdG9yW0NsaWVudF0uCisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOiBNYXJrIHdoaWNoIHNjcm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dlcmVkIGJ5
IGtleXByZXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxCeVVuaXRzKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1h
bmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEFuZEFjY2VwdEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xs
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNp
dmVseSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50
SGFuZGxlcik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogTWFyayB3aGljaCBzY3Jv
bGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAqIHBsYXRm
b3JtL1BvcHVwTWVudS5oOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBT
Y3JvbGxiYXIuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNsaWVudDo6U2Nyb2xs
QW5pbWF0b3JDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDbGllbnQ6
On5TY3JvbGxBbmltYXRvckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcDogUGx1bWIgU2Nyb2xsQW5pbWF0b3JDbGllbnQgY2FsbGJhY2sgdG8gU2Nyb2xsYmFy
cy4gTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2Vz
LiBBbGxvdyB3aGVlbCBzY3JvbGxzIHRvIGJlIGFuaW1hdGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxF
dmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBTY3JvbGxBbmlt
YXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNjcm9sbCBjb21t
YW5kcyBhcmUgdHJpZ2dlcmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDogQWxsb3cgU2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgZGVz
aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
OjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpt
b3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsYmFyLmg6IEFsbG93IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxz
IGlmIGRlc2lyZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50Lmg6IEFsbG93
IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxzIGlmIGRlc2lyZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnBvc3NpYmx5QW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnBvc3Np
Ymx5Q3JlYXRlV2l0aENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtV2luOjp+U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
V2luOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bVdpbjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW46OmFuaW1hdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bVdpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JvbGxiYXJRdC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmln
Z2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udGV4
dE1lbnUpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwOiBQbHVtYiBT
Y3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNj
cm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dlcmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwTWVudTo6d25kUHJvYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5
cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0
cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuY3BwOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxsYmFjayB0byBTY3JvbGxiYXJz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldHNGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogUGx1bWIg
U2Nyb2xsQW5pbWF0b3JDbGllbnQgY2FsbGJhY2sgdG8gU2Nyb2xsYmFycy4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBQbHVtYiBTY3JvbGxBbmltYXRvckNsaWVudCBjYWxs
YmFjayB0byBTY3JvbGxiYXJzLiBNYXJrIHdoaWNoIHNjcm9sbCBjb21tYW5kcyBhcmUgdHJpZ2dl
cmVkIGJ5IGtleXByZXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dHNGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6IFBsdW1iIFNjcm9sbEFu
aW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRvIFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Nyb2xsIGNv
bW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6IFBsdW1iIFNjcm9sbEFuaW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRv
IFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkg
a2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2
ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRzRnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6IFBsdW1iIFNj
cm9sbEFuaW1hdG9yQ2xpZW50IGNhbGxiYWNrIHRvIFNjcm9sbGJhcnMuIE1hcmsgd2hpY2ggc2Ny
b2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogTWFyayB3aGljaCBzY3JvbGwg
Y29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFu
ZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorCiAyMDA5LTEyLTEzICBSb2xhbmQgU3Rl
aW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY4LDYgKzE0NjgsNyBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xL
ZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTE4OTgsNiArMTg5OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBN
ZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51
UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0
b3JDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1XaW4uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxBbmltYXRvckNocm9taXVtV2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAnLApAQCAtMjc5Niw2ICsy
Nzk4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU1NMS2V5R2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvag0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjE2OTMsNiArMjE2OTMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0
b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXFNjcm9sbGJhci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
V2ViQ29yZS9kb20vRWxlbWVudC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRWxlbWVudDo6c2Nyb2xsQnlVbml0
cyhpbnQgdW5pdHMsIFMKICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBTY3JvbGxVcDsKICAg
ICAgICAgICAgICAgICB1bml0cyA9IC11bml0czsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRvUmVuZGVyQm94KHJlbmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgdW5pdHMpOworICAgICAgICAgICAgdG9SZW5kZXJCb3gocmVuZCktPmxheWVyKCktPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCB1bml0cywgZmFsc2UpOwogICAgICAgICB9CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHANCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEzICsxMTUs
MTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbEFuZEFjY2VwdEV2ZW50KAogICAgIFJlbmRl
ckJveCogZW5jbG9zaW5nQm94ID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nQm94KCk7CiAK
ICAgICBpZiAoZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKLSAg
ICAgICAgaWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0
aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgMSwgc3RvcE5vZGUpKQorICAg
ICAgICBpZiAoZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rp
b24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCAxLCBmYWxzZSwgc3RvcE5vZGUp
KQogICAgICAgICAgICAgZS5hY2NlcHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGZsb2F0IHBpeGVsc1RvU2Nyb2xsID0gZGVsdGEgPiAwID8gZGVsdGEgOiAtZGVsdGE7Ci0gICAg
aWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIHBpeGVsc1RvU2Nyb2xsLCBzdG9wTm9k
ZSkpCisgICAgaWYgKGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGly
ZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIHBpeGVsc1RvU2Nyb2xs
LCBmYWxzZSwgc3RvcE5vZGUpKQogICAgICAgICBlLmFjY2VwdCgpOwogfQogCkBAIC05MDIsNyAr
OTAyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNldE1vdXNlUHJlc3NOb2RlKFBhcwogICAgIG1f
bW91c2VQcmVzc05vZGUgPSBub2RlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3Zl
cmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgZnJvbUtleXBy
ZXNzKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTkxMCw3ICs5MTAsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgCiAgICAgaWYgKG5vZGUpIHsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHIgJiYgIXIt
PmlzTGlzdEJveCgpICYmIHItPmVuY2xvc2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSkpIHsKKyAgICAgICAgaWYgKHIgJiYgIXItPmlzTGlzdEJveCgpICYmIHItPmVuY2xv
c2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgMSwgZnJvbUtleXByZXNz
KSkgewogICAgICAgICAgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTkxOSwxNCArOTE5LDE0IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7Ci0gICAgYm9vbCBoYW5k
bGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgYm9vbCBo
YW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgZnJvbUtleXBy
ZXNzKTsKICAgICBpZiAoIWhhbmRsZWQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9mcmFt
ZTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpIDogZmFsc2U7CisgICAgICAgICAgICBoYW5kbGVkID0gdmlldyA/IHZp
ZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBmcm9tS2V5cHJlc3MpIDogZmFsc2U7
CiAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgICAgICB9
IHdoaWxlICghaGFuZGxlZCAmJiBmcmFtZSk7CiAgICAgIH0KQEAgLTI0NDYsNyArMjQ0Niw3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmQKIHZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAg
ICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGV2ZW50LT5zaGlmdEtleSgpID8gU2Nyb2xs
VXAgOiBTY3JvbGxEb3duOwotICAgIGlmIChzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIFNjcm9s
bEJ5UGFnZSkpIHsKKyAgICBpZiAoc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBh
Z2UsIHRydWUpKSB7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjQ1NSw3ICsyNDU1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmRlZmF1bHRTcGFjZUV2ZW50SGFuZAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSkpCisgICAgaWYg
KHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgdHJ1ZSkpCiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsOSArMTIwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZyYW1lKiBzdWJm
cmFtZUZvclRhcmdldE5vZGUoTm9kZSopOwogCi0gICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbE92ZXJmbG93
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGJvb2wgZnJvbUtleXByZXNzKTsK
IAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBib29sIGZyb21LZXlwcmVzcyk7CiAKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQogICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2RlKE5vZGUqLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OyAvLyAtd2Via2l0LXVzZXItZHJhZyA9PSBhdXRvCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnUuaAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDkgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKFFUKQogICAgIFFXZWJQb3B1cCogbV9wb3B1cDsKICNlbGlmIFBMQVRGT1JNKFdJTikKKyAg
ICAvLyBTY3JvbGxBbmltYXRvckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRzRnJvbUFuaW1hdGlvbihpbnQgaG9yaXpvbnRhbCwgaW50IHZlcnRpY2FsKTsKKwogICAgIC8v
IFNjcm9sbEJhckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yX2gKKyNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlNj
cm9sbFR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yQ2xpZW50OworCitjbGFzcyBTY3JvbGxBbmltYXRv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBwb3NzaWJseUNyZWF0ZVdp
dGhDbGllbnQoU2Nyb2xsQW5pbWF0b3JDbGllbnQqKTsKKworICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yKCkge30KKworICAgIHZpcnR1YWwgYm9vbCBwb3NzaWJseUFuaW1hdGVTY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlw
bGllZFN0ZXAsIGJvb2wgZnJvbUtleXByZXNzLCBmbG9hdCBtYXhQb3MsIGJvb2wqIGNoYW5nZWRT
b21ldGhpbmcpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpIHt9Cit9
OworCitjbGFzcyBTY3JvbGxBbmltYXRvckNsaWVudCB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5p
bWF0b3JDbGllbnQoKSA6IG1fc2Nyb2xsQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5
Q3JlYXRlV2l0aENsaWVudCh0aGlzKSkge30KKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNs
aWVudCgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRp
b24oaW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
T3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOworfTsKKworI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6cG9zc2libHlD
cmVhdGVXaXRoQ2xpZW50KFNjcm9sbEFuaW1hdG9yQ2xpZW50KikKK3sKKyAgICByZXR1cm4gMDsK
K30KKyNlbmRpZgorCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShy
ZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0Niw2ICsyNDYsMTQgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11
bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRoKCks
IG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9s
bE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpCit7Cisg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShob3Jpem9udGFsLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bGJhcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUodmVydGljYWwsIHRy
dWUpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9s
bGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTMxMywx
NyArMzIxLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QKICAg
ICB1cGRhdGVTY3JvbGxiYXJzKEludFNpemUobmV3U2Nyb2xsUG9zaXRpb24ueCgpLCBuZXdTY3Jv
bGxQb3NpdGlvbi55KCkpKTsKIH0KIAotYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIFNj
cm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7CiAgICAgaWYgKHBsYXRmb3Jt
V2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKIAogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09
IFNjcm9sbERvd24pIHsKICAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAg
ICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCAxLCBmcm9tS2V5cHJlc3MpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgMSwgZnJvbUtleXByZXNzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtNDQxLDcgKzQ0OSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhj
b25zdCAKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMo
Y1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgp
KTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgo
KSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRo
KCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNl
KTsgCiAgICAgfSAKQEAgLTQ2NSw3ICs0NzMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBw
cmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hl
aWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhl
aWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhl
aWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAg
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFs
c2UpOwogICAgIH0KQEAgLTY3Nyw3ICs2ODUsMTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2
ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAg
ICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6
ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFjayBv
biBzY3JvbGxCeSgpIGlmIHRoZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVybyBkZWx0
YT8KKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBk
ZWx0YVksIGZhbHNlKTsKKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0
LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAgY2xhc3MgU2Nyb2xsVmll
dyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGljOgogICAgIH5TY3JvbGxWaWV3KCk7CiAK
KyAgICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGlj
YWwpOworCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZC4gIEZyYW1lVmlldyBvdmVycmlk
ZXMgdGhlIG90aGVyIHR3by4KICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopOwogICAgIApAQCAtMTQ2LDcgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFJl
Y3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICAvLyBUaGlz
IG1ldGhvZCBzY3JvbGxzIGJ5IGxpbmVzLCBwYWdlcyBvciBwaXhlbHMuCi0gICAgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgYm9vbCBmcm9tS2V5cHJlc3MpOwog
ICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgdmlldyAo
ZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgogICAgIHZvaWQgc2Ny
b2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTIgKzg4LDEyIEBAIFNjcm9sbGJhcjo6flNj
cm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsKIH0KIAot
Ym9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVl
KGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9IG1heChtaW4odiwg
bV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVlKCkgPT0gdikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgotICAg
IHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJvbVNjcm9sbEFuaW1h
dGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNSwyNiArMTE1LDMwIEBAIHZvaWQg
U2Nyb2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEu
MGYgLyBwaXhlbHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyKQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9v
bCBmcm9tS2V5cHJlc3MpCiB7Ci0gICAgZmxvYXQgc3RlcCA9IDA7Ci0gICAgaWYgKChkaXJlY3Rp
b24gPT0gU2Nyb2xsVXAgJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwg
KGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikpCi0gICAgICAgIHN0ZXAgPSAtMTsKLSAgICBlbHNlIGlmICgoZGlyZWN0aW9uID09
IFNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGRp
cmVjdGlvbiA9PSBTY3JvbGxSaWdodCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpKSAKLSAgICAgICAgc3RlcCA9IDE7Ci0gICAgCisgICAgLy8gSWdub3JlIHBlcnBlbmRp
Y3VsYXIgc2Nyb2xscy4KKyAgICBpZiAoKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3du
KSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBzdGVwOwogICAgIGlmIChncmFu
dWxhcml0eSA9PSBTY3JvbGxCeUxpbmUpCi0gICAgICAgIHN0ZXAgKj0gbV9saW5lU3RlcDsKKyAg
ICAgICAgc3RlcCA9IG1fbGluZVN0ZXA7CiAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Ny
b2xsQnlQYWdlKQotICAgICAgICBzdGVwICo9IG1fcGFnZVN0ZXA7CisgICAgICAgIHN0ZXAgPSBt
X3BhZ2VTdGVwOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQp
Ci0gICAgICAgIHN0ZXAgKj0gbV90b3RhbFNpemU7CisgICAgICAgIHN0ZXAgPSBtX3RvdGFsU2l6
ZTsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBpeGVsKQotICAgICAgICBz
dGVwICo9IG1fcGl4ZWxTdGVwOwotICAgICAgICAKLSAgICBmbG9hdCBuZXdQb3MgPSBtX2N1cnJl
bnRQb3MgKyBzdGVwICogbXVsdGlwbGllcjsKKyAgICAgICAgc3RlcCA9IG1fcGl4ZWxTdGVwOwor
ICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQp
CisgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBmbG9hdCBtdWx0aXBsaWVk
U3RlcCA9IHN0ZXAgKiBtdWx0aXBsaWVyOwogICAgIGZsb2F0IG1heFBvcyA9IG1fdG90YWxTaXpl
IC0gbV92aXNpYmxlU2l6ZTsKLSAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG5ld1Bv
cywgbWF4UG9zKSwgMC4wZikpOworICAgIGJvb2wgY2hhbmdlZFNvbWV0aGluZzsKKyAgICBpZiAo
Y2xpZW50KCkgJiYgY2xpZW50KCktPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgZnJvbUtleXByZXNzLCBtYXhQb3MsICZj
aGFuZ2VkU29tZXRoaW5nKSkKKyAgICAgICAgcmV0dXJuIGNoYW5nZWRTb21ldGhpbmc7CisKKyAg
ICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIG11bHRpcGxpZWRT
dGVwLCBtYXhQb3MpLCAwLjBmKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjp1cGRhdGVU
aHVtYlBvc2l0aW9uKCkKQEAgLTE4Nyw3ICsxOTEsNyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Nj
cm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5k
IHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJl
c3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkKKyAgICBpZiAoc2Nyb2xsKHByZXNzZWRQYXJ0
U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSwgMSwgZmFs
c2UpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yNTcsMTEg
KzI2MSwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBp
ZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAg
ICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRo
dW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAg
ICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkg
KiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29sIFNj
cm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3Vy
cmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAgaWYg
KG5vdGlmeVNjcm9sbEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisKICAg
ICBpZiAocG9zID09IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0z
MDYsNyArMzEzLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcgog
ewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAodGhl
bWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAgICAg
IHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQb3Mo
bV9kcmFnT3JpZ2luLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1
bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAg
ICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5oCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDExICs3OCwxMSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAgICAg
dm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1BlclN0
ZXAgPSAxKTsKLSAgICBib29sIHNldFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1ZShpbnQs
IGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2
aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBw
KSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29s
IHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBib29sIGZyb21LZXlwcmVzcyk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xNDIsNyAr
MTQyLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9sbEdyYW51bGFyaXR5IHByZXNzZWRQYXJ0U2Ny
b2xsR3JhbnVsYXJpdHkoKTsKICAgICAKICAgICB2b2lkIG1vdmVUaHVtYihpbnQgcG9zKTsKLSAg
ICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBib29sIHNldEN1cnJlbnRQb3Mo
ZmxvYXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKTsKIAogICAgIFNjcm9sbGJhckNs
aWVudCogbV9jbGllbnQ7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA1MjE4NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE2ICsyNywyOCBAQAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFNjcm9sbGJhckNsaWVudCB7CitjbGFzcyBTY3JvbGxiYXJDbGllbnQgOiBwdWJsaWMgU2Ny
b2xsQW5pbWF0b3JDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVu
dCgpIHt9CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CiAK
KyAgICBib29sIHBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlw
bGllZFN0ZXAsIGJvb2wgZnJvbUtleXByZXNzLCBmbG9hdCBtYXhQb3MsIGJvb2wqIGNoYW5nZWRT
b21ldGhpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvciA/IG1fc2Ny
b2xsQW5pbWF0b3ItPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgZnJvbUtleXByZXNzLCBtYXhQb3MsIGNoYW5nZWRTb21l
dGhpbmcpIDogZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykK
KyAgICB7CisgICAgICAgIGlmIChtX3Njcm9sbEFuaW1hdG9yKQorICAgICAgICAgICAgbV9zY3Jv
bGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0aW9u
LCBwb3MpOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGlz
QWN0aXZlKCkgY29uc3QgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxBbmltYXRvckNocm9taXVtV2luLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oIgorCisjaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3JvbGxBbmltYXRv
ciogU2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5Q3JlYXRlV2l0aENsaWVudChTY3JvbGxBbmltYXRv
ckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bVdpbihjbGllbnQpOworfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtV2luOjpQZXJBeGlzRGF0
YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbiogcGFyZW50KQorICAgIDog
bV9jdXJyZW50UG9zKDApCisgICAgLCBtX2Rlc2lyZWRQb3MoMCkKKyAgICAsIG1fY3VycmVudFZl
bG9jaXR5KDApCisgICAgLCBtX2Rlc2lyZWRWZWxvY2l0eSgwKQorICAgICwgbV9sYXN0QW5pbWF0
aW9uVGltZSgwKQorICAgICwgbV9hbmltYXRpb25UaW1lcihwYXJlbnQsICZTY3JvbGxBbmltYXRv
ckNocm9taXVtV2luOjphbmltYXRpb25UaW1lckZpcmVkKQoreworfQorCisKK1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW1XaW46OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4oU2Nyb2xsQW5pbWF0b3JD
bGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1faG9yaXpvbnRh
bERhdGEodGhpcykKKyAgICAsIG1fdmVydGljYWxEYXRhKHRoaXMpCit7Cit9CisKK1Njcm9sbEFu
aW1hdG9yQ2hyb21pdW1XaW46On5TY3JvbGxBbmltYXRvckNocm9taXVtV2luKCkKK3sKKyAgICBz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFu
aW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKK30KKworYm9vbCBTY3JvbGxB
bmltYXRvckNocm9taXVtV2luOjpwb3NzaWJseUFuaW1hdGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZWRTdGVwLCBib29sIGZyb21LZXlwcmVzcywgZmxvYXQgbWF4UG9zLCBib29s
KiBjaGFuZ2VkU29tZXRoaW5nKQoreworICAgIC8vIERvbid0IGFuaW1hdGUganVtcGluZyB0byB0
aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGdyYW51bGFyaXR5
ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRo
aXMgaXMgYW4gYW5pbWF0aWJsZSBzY3JvbGwuICBDYWxjdWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4K
KyAgICAqY2hhbmdlZFNvbWV0aGluZyA9IGZhbHNlOworICAgIFBlckF4aXNEYXRhKiBkYXRhID0g
KGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgPyAmbV92
ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9udGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6
Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rlc2lyZWRQb3MgKyBtdWx0aXBsaWVkU3RlcCwgbWF4UG9z
KSwgMC4wZik7CisgICAgaWYgKG5ld1BvcyA9PSBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IG5ld1BvczsKKworICAgIC8v
IENhbGN1bGF0ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAgIGlmIChkYXRhLT5tX2N1cnJl
bnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBm
bG9hdCBhbmltYXRpb25TdGVwOworICAgIGJvb2wgYWxyZWFkeUFuaW1hdGluZyA9IGRhdGEtPm1f
YW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKTsKKyAgICBpZiAoIWZyb21LZXlwcmVzcyAmJiAoZ3Jh
bnVsYXJpdHkgIT0gU2Nyb2xsQnlQaXhlbCkpIHsKKyAgICAgICAgLy8gV2hlbiBhdXRvc2Nyb2xs
aW5nLCB0aGUgc2Nyb2xsYmFyJ3MgYXV0b3Njcm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAg
ICAgICAgLy8gaW5jcmVtZW50IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGJ5IHxzdGVwfCBldmVyeQor
ICAgICAgICAvLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKSBzZWNvbmRzLiAgSWYgd2UKKyAgICAgICAgLy8gc2V0IHRoZSBkZXNpcmVkIHZlbG9j
aXR5IHRvIGV4YWN0bHkgdGhpcyByYXRlLCBzbW9vdGggc2Nyb2xsaW5nIHdpbGwKKyAgICAgICAg
Ly8gbmVpdGhlciByYWNlIGFoZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGlu
Y3JlYXNpbmdseSBsYWcKKyAgICAgICAgLy8gYmVoaW5kLCBidXQgd2lsbCBiZSBzbW9vdGggYW5k
IHN5bmNocm9uaXplZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ug
b2YgdGhlIGFjY2VsZXJhdGlvbiBwZXJpb2QsIHRoZSBjdXJyZW50IHBvc2l0aW9uCisgICAgICAg
IC8vIHdpbGwgbGFnIHRoZSBkZXNpcmVkIG9uZSBieSBhIHNtYWxsLCBjb25zdGFudCBhbW91bnQg
KHNlZSBjb21tZW50cyBvbgorICAgICAgICAvLyBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3Qg
YW1vdW50IGlzIGdpdmVuIGJ5CisgICAgICAgIC8vICAgbGFnID0gfHN0ZXB8IC0gdigwLjV0QSAr
IHREKQorICAgICAgICAvLyBXaGVyZQorICAgICAgICAvLyAgIHYgPSBUaGUgc3RlYWR5LXN0YXRl
IHZlbG9jaXR5LAorICAgICAgICAvLyAgICAgICB8c3RlcHwgLyBTY3JvbGxiYXJUaGVtZTo6bmF0
aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQorICAgICAgICAvLyAgIHRBID0gVGhl
IGFjY2VsZXJhdGlvbiB0aW1lLAorICAgICAgICAvLyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKKyAgICAgICAgLy8gICB0RCA9IFRo
ZSB0aW1lIHdlIHByZXRlbmQgaGFzIGFscmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRpbmcgdG8KKyAg
ICAgICAgLy8gICAgICAgIHNjcm9sbCwgMC4wMXMKKyAgICAgICAgLy8gV2hpY2gsIGZvcgorICAg
ICAgICAvLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKSA9PSAwLjA1cywgZ2l2ZXMKKyAgICAgICAgLy8gYSBsYWcgb2YgKDAuMyAqIHxzdGVwfCku
CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbGFnIHByb3ZpZGVzIHNvbWUgYnVmZmVyIGFn
YWluc3QgdGltZXIgaml0dGVyIHNvIHdlJ3JlIGxlc3MKKyAgICAgICAgLy8gbGlrZWx5IHRvIGhp
dCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhbmQgc3RvcCAoYW5kIHRodXMgaGF2ZSB0bworICAgICAg
ICAvLyByZS1hY2NlbGVyYXRlLCBjYXVzaW5nIGEgdmlzaWJsZSBoaXRjaCkgd2hpbGUgd2FpdGlu
ZyBmb3IgdGhlIG5leHQKKyAgICAgICAgLy8gYXV0b3Njcm9sbCBpbmNyZW1lbnQuCisgICAgICAg
IGFuaW1hdGlvblN0ZXAgPSBzdGVwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBrZXli
b2FyZCBhbmQgd2hlZWwgc2Nyb2xscywgd2UgZG9uJ3Qga25vdyB3aGVuIHRoZSBuZXh0IGluY3Jl
bWVudAorICAgICAgICAvLyB3aWxsIGJlIHJlcXVlc3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0
IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIKKyAgICAgICAgLy8gYXdheSBmcm9tIHRoZSB0YXJn
ZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBrZXlib2FyZC93aGVlbCBldmVudHMKKyAgICAg
ICAgLy8gdGhhdCBjb21lIGZhc3RlciB0aGFuIHRoZSBhdXRvc2Nyb2xsIGRlbGF5LCB3ZSdsbCBh
c3ltcHRvdGljYWxseQorICAgICAgICAvLyBhcHByb2FjaCB0aGUgdmVsb2NpdHkgbmVlZGVkIHRv
IHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2VyJ3MKKyAgICAgICAgLy8gYWN0aW9u
czsgZm9yIGV2ZW50cyB0aGF0IGNvbWUgc2xvd2VyLCB3ZSdsbCBzY3JvbGwgb25lIGluY3JlbWVu
dCBhbmQKKyAgICAgICAgLy8gdGhlbiBwYXVzZSB1bnRpbCB0aGUgbmV4dCBldmVudCBmaXJlcy4g
IFRoaXMgbGF0dGVyIGJlaGF2aW9yIG1lYW5zCisgICAgICAgIC8vIHRoYXQgc2luZ2xlIGtleXBy
ZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwgaGF2ZSB0aGUgc2FtZSBhcHBlYXJhbmNlCisgICAg
ICAgIC8vIGFzIHNpbmdsZSBwcmVzc2VzIG9mIGEgc2Nyb2xsYmFyIHBhcnQuCisgICAgICAgIGFu
aW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gZGF0YS0+bV9jdXJyZW50UG9zKTsKKyAgICAgICAg
Ly8gSWYgYSBrZXkgaXMgaGVsZCBkb3duIChvciB0aGUgd2hlZWwgY29udGludWFsbHkgc3B1biks
IHRoZW4gb25jZSB3ZQorICAgICAgICAvLyBoYXZlIHJlYWNoZWQgYSB2ZWxvY2l0eSBjbG9zZSB0
byB0aGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LCB3ZSdyZQorICAgICAgICAvLyBsaWtlbHkgdG8g
aGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1lIHdlJ2QKKyAg
ICAgICAgLy8gZXhwZWN0IHRoZSBuZXh0IGluY3JlbWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVz
ZSBpdCBsZWFkcyB0bworICAgICAgICAvLyBoaXRjaGluZyBhcyBkZXNjcmliZWQgYWJvdmUuICBT
byB3ZSB0cmltIHRoZSB2ZWxvY2l0eSBzbGlnaHRseSBzbworICAgICAgICAvLyB0aGF0IHdlIGhh
dmUgYSBzbWFsbCBidWZmZXIsIHRvIGRlY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIHRoaXMKKyAg
ICAgICAgLy8gb2NjdXJyaW5nLiAgTm90ZSB0aGF0IHdlIHdvbid0IGZhbGwgc3RlYWRpbHkgZnVy
dGhlciBiZWhpbmQgaGVyZSwKKyAgICAgICAgLy8gYmVjYXVzZSBpbiBzdWJzZXF1ZW50IHVwZGF0
ZXMgd2UnbGwgYmUgY2FsY3VsYXRpbmcgb3VyIHZlbG9jaXR5IGJhc2VkCisgICAgICAgIC8vIG9u
IGEgbGFyZ2VyIGRlc2lyZWQgc3RlcCAtLSBzbyB0aGUgcHJhY3RpY2FsIGVmZmVjdCBpcyB0aGF0
IHdlIGxhZyBieQorICAgICAgICAvLyBhIHNtYWxsLCBjb25zdGFudCBhbW91bnQgZGVwZW5kaW5n
IG9uIHRoZSB0cmltIHZhbHVlIGFuZCB0aGUgcmF0ZSBhdAorICAgICAgICAvLyB3aGljaCBpbmNy
ZW1lbnRzIG9jY3VyIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGRlbGF5LiAgVGhl
CisgICAgICAgIC8vIGV4YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9
IHxzdGVwfCAqICgociAvIGspIC0gMSkKKyAgICAgICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICBy
ID0gVGhlIHJhdGlvIG9mIHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAgICAgLy8g
ICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCksIHRvIHRoZQorICAgICAgICAvLyAgICAgICBrZXkvd2hlZWwgcmVwZWF0IGRlbGF5IChpLmUu
ID4gMSB3aGVuIGtleXMgcmVwZWF0IGZhc3RlcikKKyAgICAgICAgLy8gICBrID0gVGhlIHZlbG9j
aXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVsb3cKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYg
d2Ugd2FudCB0byBhY3QgYXMgbXVjaCBsaWtlIGF1dG9zY3JvbGxpbmcgYXMgcG9zc2libGUsIHRo
ZW4gd2UKKyAgICAgICAgLy8gY2hvb3NlIGsgc3VjaCB0aGF0IGxhZyA9ICgwLjMgKiB8c3RlcHwp
IChpLmUuIHRoZSBzYW1lIGFzIGFib3ZlKSB3aGVuCisgICAgICAgIC8vIHIgPSAxLiAgVGhpcyBn
aXZlcyBrID0gMTAvMTMuCisgICAgICAgIGlmIChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICAg
ICAgYW5pbWF0aW9uU3RlcCAqPSAoMTAuMCAvIDEzLjApOworICAgIH0KKyAgICBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhl
bWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsKKyAgICAqY2hhbmdlZFNvbWV0aGluZyA9IHRy
dWU7CisKKyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcsIHN0YXJ0LgorICAg
IGlmICghYWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9sbChkYXRhKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtV2luOjpzZXRT
Y3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1fdmVydGlj
YWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAgIGRhdGEt
Pm1fY3VycmVudFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2Rlc2lyZWRQb3MgPSBwb3M7CisgICAg
ZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5
ID0gMDsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtV2luOjphbmltYXRpb25UaW1l
ckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4+KiB0aW1lcikKK3sKKyAgICBh
bmltYXRlU2Nyb2xsKCh0aW1lciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVy
KSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlz
RGF0YSogZGF0YSkKK3sKKyAgICBpZiAoZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtV2luOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhKiBkYXRhKQor
eworICAgIC8vIE5vdGUgb24gc21vb3RoIHNjcm9sbGluZyBwZXJmIHZlcnN1cyBub24tc21vb3Ro
IHNjcm9sbGluZyBwZXJmOgorICAgIC8vIFRoZSB0b3RhbCB0aW1lIHRvIHBlcmZvcm0gYSBjb21w
bGV0ZSBzY3JvbGwgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIHQgPSB0MCArIDAuNXRBIC0gdEQgKyB0
UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBlcmZvcm0gdGhlIHNj
cm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0gVGhlIGFjY2VsZXJh
dGlvbiB0aW1lLAorICAgIC8vICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+
YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSAoc2VlIGJlbG93KQorICAgIC8vICAgdEQgPSB8ZGVzaXJl
ZFNjcm9sbEludGVydmFsfCAoc2VlIGJlbG93KQorICAgIC8vICAgdFMgPSBBIHZhbHVlIGxlc3Mg
dGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEKKyAgICAvLyAg
ICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9uZSBkdWUgdG8g
Y2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkgKH4wIGZvciBz
aW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBwYWdlcykuCisg
ICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxsLCB0aGUgdG90
YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyB+MCAoYWN0dWFsbHkgMTUg
bXMgYnkgZGVmYXVsdCkgZm9yIHNpbXBsZSBwYWdlcyBhbmQgcm91Z2hseSB0UyBmb3IKKyAgICAv
LyBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dCBrbm93aW5nIGluIGFkdmFuY2UgaG93IGxhcmdlIHRT
IGlzIGl0J3MgaGFyZCB0bworICAgIC8vIGRvIGJldHRlciB0aGFuIHRoaXMuICBQZXJoYXBzIHdl
IGNvdWxkIHRyeSB0byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMKKyAgICAvLyBhbmQgZm9yd2Fy
ZC1jb21wZW5zYXRlLgorCisKKyAgICAvLyBXZSB3YW50IHRvIHVwZGF0ZSB0aGUgc2Nyb2xsIHBv
c2l0aW9uIGJhc2VkIG9uIHRoZSB0aW1lIGl0J3MgYmVlbiBzaW5jZQorICAgIC8vIG91ciBsYXN0
IHVwZGF0ZS4gIFRoaXMgbWF5IGJlIGxvbmdlciB0aGFuIG91ciBpZGVhbCB0aW1lLCBlc3BlY2lh
bGx5IGlmCisgICAgLy8gdGhlIHBhZ2UgaXMgY29tcGxleCBvciB0aGUgc3lzdGVtIGlzIHNsb3cu
CisgICAgZG91YmxlIGRlc2lyZWRTY3JvbGxJbnRlcnZhbCA9IDAuMDE7CisgICAgLy8gVG8gYXZv
aWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxpbmcg
d2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBpZGVh
bCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21lIGRp
c3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xhc3RB
bmltYXRpb25UaW1lKSA6IGRlc2lyZWRTY3JvbGxJbnRlcnZhbDsKKworICAgIC8vIEZpZ3VyZSBv
dXQgaG93IGZhciB3ZSd2ZSBhY3R1YWxseSB0cmF2ZWxlZCBhbmQgdXBkYXRlIG91ciBjdXJyZW50
CisgICAgLy8gdmVsb2NpdHkuCisgICAgZmxvYXQgZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICBpZiAo
ZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPCBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSkgeworICAg
ICAgICAvLyBXZSBhY2NlbGVyYXRlIGF0IGEgY29uc3RhbnQgcmF0ZSB1bnRpbCB3ZSByZWFjaCB0
aGUgZGVzaXJlZCB2ZWxvY2l0eS4KKyAgICAgICAgLy8gV2UgZWxlY3QgdG8gdXNlIFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8v
IGFzIHRoZSBsZW5ndGggb2YgdGltZSB3ZSdsbCB0YWtlIHRvIGFjY2VsZXJhdGUgZnJvbSAwIHRv
IHRoYXQKKyAgICAgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3Vs
ZCBwcm9kdWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAgICAgIC8vIGFjY2VsZXJhdGlvbiBlZmZl
Y3QuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxh
eSgpOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hldGhlciBjb250YW50IGFjY2VsZXJhdGlv
biBoYXMgY2F1c2VkIHVzIHRvIHJlYWNoIG91cgorICAgICAgICAvLyB0YXJnZXQgdmVsb2NpdHku
CisgICAgICAgIGZsb2F0IHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlID0gYWNjZWxlcmF0aW9uUmF0
ZSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsTmV3VmVsb2Np
dHkgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlOwor
ICAgICAgICBpZiAocG90ZW50aWFsTmV3VmVsb2NpdHkgPiBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0
eSkgeworICAgICAgICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGF0IHNv
bWUgcG9pbnQgYmV0d2VlbiBvdXIgbGFzdAorICAgICAgICAgICAgLy8gdXBkYXRlIGFuZCBub3cu
ICBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgY2FuIGJlIGNhbGN1bGF0ZWQgaW4gdHdvCisgICAgICAg
ICAgICAvLyBwaWVjZXM6IHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB3aGlsZSBhY2NlbGVyYXRpbmcs
IGFuZCB0aGUKKyAgICAgICAgICAgIC8vIGRpc3RhbmNlIHRyYXZlbGVkIGFmdGVyIHJlYWNoaW5n
IHRoZSB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgICAgICBmbG9hdCBhY3R1YWxWZWxvY2l0eUNo
YW5nZSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5IC0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHk7
CisgICAgICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25JbnRlcnZhbCA9IGFjdHVhbFZlbG9jaXR5
Q2hhbmdlIC8gYWNjZWxlcmF0aW9uUmF0ZTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5jZSB0
cmF2ZWxlZCB1bmRlciBjb25zdGFudCBhY2NlbGVyYXRpb24gaXMgdGhlIGFyZWEKKyAgICAgICAg
ICAgIC8vIHVuZGVyIGEgbGluZSBzZWdtZW50IHdpdGggYSBjb25zdGFudCByaXNpbmcgc2xvcGUu
ICBCcmVhayB0aGlzCisgICAgICAgICAgICAvLyBpbnRvIGEgdHJpYW5ndWxhciBwb3J0aW9uIGF0
b3AgYSByZWN0YW5ndWxhciBwb3J0aW9uIGFuZCBzdW0uCisgICAgICAgICAgICBkaXN0YW5jZVRy
YXZlbGVkID0gKChkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChhY3R1YWxWZWxvY2l0eUNoYW5n
ZSAvIDIpKSAqIGFjY2VsZXJhdGlvbkludGVydmFsKTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0
YW5jZSB0cmF2ZWxlZCBhdCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGlzIHNpbXBseQorICAgICAgICAg
ICAgLy8gKHRhcmdldCB2ZWxvY2l0eSkgKiAocmVtYWluaW5nIHRpbWUgYWZ0ZXIgYWNjZWxlcmF0
aW5nKS4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgKz0gKGRhdGEtPm1fZGVzaXJlZFZl
bG9jaXR5ICogKGxhc3RTY3JvbGxJbnRlcnZhbCAtIGFjY2VsZXJhdGlvbkludGVydmFsKSk7Cisg
ICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9j
aXR5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ29uc3RhbnQgYWNjZWxlcmF0
aW9uIHRocm91Z2ggdGhlIGVudGlyZSB0aW1lIGludGVydmFsLgorICAgICAgICAgICAgZGlzdGFu
Y2VUcmF2ZWxlZCA9IChkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChwb3RlbnRpYWxWZWxvY2l0
eUNoYW5nZSAvIDIpKSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgICAgIGRhdGEtPm1f
Y3VycmVudFZlbG9jaXR5ID0gcG90ZW50aWFsTmV3VmVsb2NpdHk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxv
Y2l0eSwgc28gdGhlIGRpc3RhbmNlIHdlJ3ZlCisgICAgICAgIC8vIHRyYXZlbGVkIGlzIHNpbXBs
eSAoY3VycmVudCB2ZWxvY2l0eSkgKiAoZWxhcHNlZCB0aW1lKS4KKyAgICAgICAgZGlzdGFuY2VU
cmF2ZWxlZCA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICogbGFzdFNjcm9sbEludGVydmFsOwor
ICAgICAgICAvLyBJZiBvdXIgZGVzaXJlZCB2ZWxvY2l0eSBoYXMgZGVjcmVhc2VkLCBkcm9wIHRo
ZSBjdXJyZW50IHZlbG9jaXR5IHRvby4KKyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkg
PSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICB9CisKKyAgICAvLyBOb3cgdXBkYXRlIHRo
ZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGRpc3RhbmNlIHRyYXZlbGVkLgorICAgIGlm
IChkaXN0YW5jZVRyYXZlbGVkID49IGFicyhkYXRhLT5tX2Rlc2lyZWRQb3MgLSBkYXRhLT5tX2N1
cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZlbGVkIGZhciBlbm91Z2ggdG8gcmVh
Y2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290aAorICAgICAgICAvLyBzY3JvbGxp
bmcuCisgICAgICAgIGRhdGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAg
ICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2ly
ZWRWZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUg
dGFyZ2V0IHBvc2l0aW9uLiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAg
ICAgLy8gbmV4dCB1cGRhdGUuCisgICAgICAgIGlmIChkYXRhLT5tX2N1cnJlbnRQb3MgPiBkYXRh
LT5tX2Rlc2lyZWRQb3MpCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gLWRpc3RhbmNl
VHJhdmVsZWQ7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFBvcyArPSBkaXN0YW5jZVRyYXZlbGVk
OworICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChkZXNpcmVkU2Ny
b2xsSW50ZXJ2YWwpOworICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RGOjpj
dXJyZW50VGltZSgpOworICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0c0Zyb21B
bmltYXRpb24obV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsIG1fdmVydGljYWxEYXRhLm1f
Y3VycmVudFBvcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbi5oDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtV2lu
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1h
dG9yQ2hyb21pdW1XaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW5faAorI2RlZmluZSBTY3JvbGxBbmltYXRvckNocm9t
aXVtV2luX2gKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dG9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTY3JvbGxBbmltYXRvckNocm9taXVtV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1
YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvckNocm9taXVtV2luKFNjcm9sbEFuaW1hdG9yQ2xpZW50
Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bVdpbigpOworCisgICAgdmly
dHVhbCBib29sIHBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgYm9vbCBmcm9tS2V5
cHJlc3MsIGZsb2F0IG1heFBvcywgYm9vbCogY2hhbmdlZFNvbWV0aGluZyk7CisgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRh
dGlvbiwgZmxvYXQpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CisgICAg
ICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4qIHBhcmVudCk7CisKKyAg
ICAgICAgZmxvYXQgbV9jdXJyZW50UG9zOworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRQb3M7Cisg
ICAgICAgIGZsb2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRW
ZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblRpbWU7CisgICAgICAgIFRp
bWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1XaW4+IG1fYW5pbWF0aW9uVGltZXI7CisgICAgfTsK
KworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9t
aXVtV2luPiopOworICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0Rh
dGEqKTsKKyAgICB2b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFNjcm9s
bEFuaW1hdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6b250YWxE
YXRhOworICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfQorI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA1MjE4NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MiwxMyArODIsMTMgQEAgYm9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBsYXRmbwog
ICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEJvdHRvbSkKICAgICAgICAg
c2V0VmFsdWUobWF4aW11bSgpKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQ
YWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdDogU2Nyb2xsVXAs
IFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVm
dDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlv
blNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNj
cm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlLCAxKTsKKyAgICAgICAgc2Nyb2xs
KGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSwgMSwg
ZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVwKQotICAg
ICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlM
aW5lLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xs
VXAsIFNjcm9sbEJ5TGluZSwgMSwgZmFsc2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVk
ID09IGFjdFNjcm9sbERvd24pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmln
aHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIDEpOworICAgICAgICBzY3JvbGwoaG9yaXpv
bnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCAxLCBmYWxzZSk7
CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA1MjE4NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2Miw2ICs2NjIsMTIgQEAgdm9pZCBQb3B1cE1lbnU6OnBhaW50KGNvbnN0IEludFJlY3QmIGRh
bQogICAgICAgICA6OlJlbGVhc2VEQyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAordm9pZCBQb3B1
cE1lbnU6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQg
dmVydGljYWwpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+
c2V0VmFsdWUodmVydGljYWwsIHRydWUpOworfQorCiB2b2lkIFBvcHVwTWVudTo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CkBA
IC05NzYsNyArOTgyLDcgQEAgTFJFU1VMVCBQb3B1cE1lbnU6OnduZFByb2MoSFdORCBoV25kLCBV
SQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgLS1pOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVw
IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOworICAgICAgICAgICAgc2Nyb2xs
YmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5l
LCBhYnMoaSksIGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxMCArNDAyLDEwIEBA
IGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQKICAgICByZXR1cm4gaW5j
bHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkgOiAwOwogfQogCi1ib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyLCBib29sIGZyb21LZXlwcmVzcywgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIFJl
bmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzKSkgewogICAgICAg
ICBpZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDE2LDcgKzQxNiw3IEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKKyAg
ICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
LCBmcm9tS2V5cHJlc3MsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CiAgICAg
aW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJv
b2wgZnJvbUtleXByZXNzLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNhbkJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5C
ZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBh
dXRvc2Nyb2xsKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJl
dmlzaW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDEyIEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBh
aW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucwordm9pZCBSZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24o
aW50IGhvcml6b250YWwsIGludCB2ZXJ0aWNhbCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKHZlcnRpY2FsLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJEYXRh
R3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA1MjE4NikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDYgKzY0LDkgQEAgcHJpdmF0ZToKIAogICAgIEhUTUxEYXRhR3JpZEVsZW1lbnQqIGdyaWRF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFHcmlkRWxlbWVudCo+
KG5vZGUoKSk7IH0KIAorICAgIC8vIFNjcm9sbEFuaW1hdG9yQ2xpZW50IGludGVyZmFjZS4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0c0Zyb21BbmltYXRpb24oaW50IGhvcml6b250
YWwsIGludCB2ZXJ0aWNhbCk7CisKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgog
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNTIxODYpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYs
OSArMTIwNiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCAKICAg
ICAKICAgICBpZiAodXBkYXRlU2Nyb2xsYmFycykgewogICAgICAgICBpZiAobV9oQmFyKQotICAg
ICAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAgICAgICAg
bV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1f
dkJhcikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZKTsKKyAgICAgICAg
ICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBmYWxzZSk7CiAgICAgfQogCiAgICAgLy8g
U2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0xNDU1LDYgKzE0NTUsMTQgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRh
ciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vz
c2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9u
dGFsLCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5z
ZXRWYWx1ZShob3Jpem9udGFsLCB0cnVlKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZC
YXItPnNldFZhbHVlKHZlcnRpY2FsLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBm
cm9tIHNjcm9sbGJhcnMuCkBAIC0xODkwLDcgKzE4OTgsNyBAQCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVw
ID0gY2xpZW50V2lkdGg7CiAgICAgICAgIG1faEJhci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVs
c1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Ny
b2xsWE9mZnNldCgpKTsKKyAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCks
IGZhbHNlKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikgewogICAgICAgICBpbnQgY2xpZW50SGVp
Z2h0ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKQEAgLTIwNTIsNyArMjA2MCw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBmcm9tS2V5cHJlc3MpCiB7CiAg
ICAgYm9vbCBkaWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7CiAgICAgYm9vbCBkaWRWZXJ0aWNh
bFNjcm9sbCA9IGZhbHNlOwpAQCAtMjA2MSwxMyArMjA2OSwxMyBAQCBib29sIFJlbmRlckxheWVy
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3Jv
bGxCeURvY3VtZW50KSB7CiAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgZm9yIHRoZSBTY3Jv
bGxCeURvY3VtZW50IGdyYW51bGFyaXR5LiBBIGRvY3VtZW50IHNjcm9sbCBjYW4gb25seSBiZSB1
cCAKICAgICAgICAgICAgIC8vIG9yIGRvd24gYW5kIGluIGJvdGggY2FzZXMgdGhlIGhvcml6b250
YWwgYmFyIGdvZXMgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQuCi0gICAgICAgICAgICBkaWRIb3Jp
em9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVu
dCwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFy
LT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllciwgZnJvbUtl
eXByZXNzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xs
ID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Cisg
ICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzKTsKICAgICB9CiAKICAgICBp
ZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAgICBkaWRWZXJ0aWNhbFNj
cm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIs
IGZyb21LZXlwcmVzcyk7CiAKICAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3JvbGwgfHwgZGlk
VmVydGljYWxTY3JvbGwpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlz
aW9uIDUyMTg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7CisgICAgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
Ym9vbCBmcm9tS2V5cHJlc3MpOwogICAgIHZvaWQgYXV0b3Njcm9sbCgpOwogCiAgICAgdm9pZCBy
ZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50U2l6ZSYpOwpAQCAtNDkw
LDYgKzQ5MCw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHko
KSBjb25zdDsgCiAKKyAgICAvLyBTY3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFs
LCBpbnQgdmVydGljYWwpOworCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQogICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDUyMTg2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
MCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVuCiAK
ICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAg
IG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAgICAgIG1fdkJhci0+c2V0VmFs
dWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MTAs
OSArNTEwLDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJc1Zpc2libGUoaQogICAg
IHJldHVybiBpbmRleCA+PSBtX2luZGV4T2Zmc2V0ICYmIGluZGV4IDwgbV9pbmRleE9mZnNldCAr
IG51bVZpc2libGVJdGVtcygpOwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgTm9kZSoqKQorYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIsIGJvb2wgZnJvbUtleXByZXNzLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJuIG1f
dkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKKyAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIsIGZyb21LZXlwcmVzcyk7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJv
eDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKQEAgLTUyMyw2ICs1MjMsMTIgQEAg
dm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZQogICAgIGVsZW1lbnQtPmRp
c3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCit2b2lkIFJlbmRlckxpc3RCb3g6
OnNldFNjcm9sbE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGlj
YWwpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZSh2ZXJ0aWNh
bCwgdHJ1ZSk7Cit9CisKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopCiB7CiAgICAgaW50IG5ld09mZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKQEAgLTU3OCw3ICs1
ODQsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAgICAgICAg
IHJldHVybjsKICAgICBtX2luZGV4T2Zmc2V0ID0gaW5kZXg7CiAgICAgaWYgKG1fdkJhcikKLSAg
ICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCk7CisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUo
aW5kZXgsIGZhbHNlKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDUyMTg2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9s
KEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciwgYm9vbCBmcm9tS2V5cHJlc3MsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAg
dmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQ
b3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsKQEAgLTk1
LDYgKzk1LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAgICAvLyBT
Y3JvbGxBbmltYXRvckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9s
bE9mZnNldHNGcm9tQW5pbWF0aW9uKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpOworCiAg
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVD
aGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNTIx
ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MDgsMTIgKzgwOCwxMiBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0U2Ny
b2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jvb2wgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgZnJvbUtl
eXByZXNzLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYg
bGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBp
ZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyLCBmcm9tS2V5cHJlc3MpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9w
Tm9kZSk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllciwgZnJvbUtleXByZXNzLCBzdG9wTm9kZSk7CiB9CiAKIFBhc3NSZWZQ
dHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJh
cihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gNTIx
ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50
IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGlu
dCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
Ym9vbCBmcm9tS2V5cHJlc3MsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50IHRleHRC
bG9ja1dpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRo
KGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTIx
ODYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMDktMTItMTUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBz
bW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgQ2hyb21pdW0vV2luIGltcGxlbWVudGF0
aW9uLg0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2DQorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6IE1hcmsgd2hpY2ggc2Nyb2xs
IGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9h
cmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKToKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJl
IHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAqIHNyYy93aW4vV2ViSW5wdXRFdmVu
dEZhY3RvcnkuY3BwOiBVcGRhdGUgY29tbWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9vdGggc2Ny
b2xsaW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVl
bEV2ZW50KToKKwogMjAwOS0xMi0xNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkzLDEwICs5OTMsMTAg
QEAgYm9vbCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0IAogICAgIC8vIG1vdmVU
b0JlZ2lubmluZ09mRG9jdW1lbnQgYW5kIG1vdmVUb0VuZGZEb2N1bWVudCBhcmUgb25seSBoYW5k
bGVkIGJ5IFdlYktpdAogICAgIC8vIGZvciBlZGl0YWJsZSBub2Rlcy4KICAgICBpZiAoIWZyYW1l
KCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Ny
b2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICByZXR1cm4gdmlld0ltcGwoKS0+cHJv
cGFnYXRlU2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50LCBmYWxzZSk7CiAKICAgICBp
ZiAoIWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvRW5k
T2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwo
U2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgp
LT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgZmFsc2UpOwog
CiAgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKHdlYk5hbWUpLmV4ZWN1dGUo
dmFsdWUpOwogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNp
b24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzM4LDIzICs3MzgsMjEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Nyb2xsVmll
d1dpdGhLZXlib2FyZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJu
IHByb3BhZ2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAg
ICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJp
dHksIHRydWUpOwogfQogCiBib29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZyb21LZXlwcmVzcykKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBzY3JvbGxIYW5kbGVkID0KLSAg
ICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxEaXJlY3Rp
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
R3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9IGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwg
ZnJvbUtleXByZXNzKTsKICAgICBGcmFtZSogY3VycmVudEZyYW1lID0gZnJhbWU7CiAgICAgd2hp
bGUgKCFzY3JvbGxIYW5kbGVkICYmIGN1cnJlbnRGcmFtZSkgewotICAgICAgICBzY3JvbGxIYW5k
bGVkID0gY3VycmVudEZyYW1lLT52aWV3KCktPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEdy
YW51bGFyaXR5KTsKKyAgICAgICAgc2Nyb2xsSGFuZGxlZCA9IGN1cnJlbnRGcmFtZS0+dmlldygp
LT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgZnJvbUtleXByZXNz
KTsKICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLT50cmVlKCktPnBhcmVudCgp
OwogICAgIH0KICAgICByZXR1cm4gc2Nyb2xsSGFuZGxlZDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBUcmllcyB0byBzY3JvbGwgYSBmcmFtZSBvciBhbnkgcGFyZW50IG9mIGEgZnJhbWUu
IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldwogICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAgICBib29s
IHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9s
bEdyYW51bGFyaXR5KTsKKyAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxE
aXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5LCBib29sIGZyb21LZXlwcmVzcyk7
CiAKICAgICAvLyBIQUNLOiBjdXJyZW50SW5wdXRFdmVudCgpIGlzIGZvciBDaHJvbWVDbGllbnRJ
bXBsOjpzaG93KCksIHVudGlsIHdlIGNhbgogICAgIC8vIGZpeCBXZWJLaXQgdG8gcGFzcyBlbm91
Z2ggaW5mb3JtYXRpb24gdXAgaW50byBDaHJvbWVDbGllbnQ6OnNob3coKSBzbyB3ZQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3Bw
CShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZl
bnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEzICszOTYsMTYgQEAgV2ViTW91
c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogCiAgICAgLy8gQ29udmVydCB3aGVl
bCBkZWx0YSBhbW91bnQgdG8gYSBudW1iZXIgb2YgcGl4ZWxzIHRvIHNjcm9sbC4KICAgICAvLwot
ICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgR2Vja28g
dXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQotICAgIC8vIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMg
c2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91Z2ggdGhlCi0gICAgLy8gcGFn
ZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMuICBJRSA3IGlzIH41MCBweC9saW5lLCBhbHRob3Vn
aCB0aGUgdmFsdWUKLSAgICAvLyBzZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpv
b20gbGV2ZWwuICBTaW5jZSBJRSA3IGhhcyBhIHNtb290aGluZwotICAgIC8vIGFsZ29yaXRobSBv
biBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdodGx5IGxhcmdlciBzY3JvbGwg
dmFsdWVzCi0gICAgLy8gd2l0aG91dCBmZWVsaW5nIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAwIHB4
IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQKLSAgICAvLyBzY3JvbGwgYW1vdW50IGlzIHRo
cmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBIb3cgbWFueSBwaXhlbHMgc2hvdWxk
IHdlIHNjcm9sbCBwZXIgbGluZT8gIEZpcmVmb3ggdXNlcyB0aGUgaGVpZ2h0IG9mCisgICAgLy8g
dGhlIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMg
eW91IGdvIHRocm91Z2gKKyAgICAvLyB0aGUgcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMu
ICBJRSA4IGlzIH42MCBweC9saW5lLCBhbHRob3VnaCB0aGUKKyAgICAvLyB2YWx1ZSBzZWVtcyB0
byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwuICBBbHNvLCBJRSBkZWZhdWx0
cworICAgIC8vIHRvIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0LCBzbyBp
dCBjYW4gZ2V0IGF3YXkgd2l0aAorICAgIC8vIHNvbWV3aGF0IGxhcmdlciBzY3JvbGwgdmFsdWVz
IHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMAorICAgIC8vIHB4IHBl
ciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5lcyBw
ZXIgd2hlZWwKKyAgICAvLyB0aWNrKS4gIEV2ZW4gdGhvdWdoIHdlIGhhdmUgc21vb3RoIHNjcm9s
bGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxhcmdlCisgICAgLy8gYXMgSUUgYmVjYXVzZSBz
dWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBzY3JvbGxzIGZhcnRoZXIgdGhhbiB5b3Ugd2Fu
dAorICAgIC8vIHdoaWxlIHJlYWRpbmcgYXJ0aWNsZXMuCiAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAzLjBmOwogICAgIHdoZWVsRGVsdGEg
Lz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRhOwpJbmRl
eDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvZ3RrL0NoYW5n
ZUxvZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGthc3Rp
bmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVtL1dp
biBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6IE1h
cmsgd2hpY2ggc2Nyb2xsIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYnkga2V5cHJlc3Nlcy4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21vdmVfY3Vyc29yKToKKwogMjAwOS0xMi0xMyAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBC
ZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lv
biA1MjE4NikKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NzMsOCArOTczLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19yZWFsX21vdgogICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSkpCi0g
ICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAg
ICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgdHJ1ZSkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCAxLCB0cnVlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDog
V2ViS2l0L21hYy9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVtL1dpbiBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbTogTWFyayB3
aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAg
ICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246Z3JhbnVsYXJpdHk6
ZnJvbUtleXByZXNzOl0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRvQmVnaW5u
aW5nT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRvRW5kT2ZE
b2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VWZXJ0aWNhbGx5Ol0pOgor
ICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VIb3Jpem9udGFsbHk6XSk6CisgICAgICAgICgt
W1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgtW1dlYkZy
YW1lVmlldyBfc2Nyb2xsTGluZUhvcml6b250YWxseTpdKToKKwogMjAwOS0xMi0xMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3Rl
aW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkocmV2aXNpb24gNTIxODYp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01MTksNyArNTE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TQogICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKIH0KIAotLSAoQk9PTClfc2Nyb2xs
T3ZlcmZsb3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0
eTooU2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0gKEJPT0wpX3Njcm9sbE92ZXJmbG93
SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFNjcm9s
bEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGZyb21LZXlwcmVzczooQk9PTClmcm9tS2V5cHJlc3MK
IHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdy
ZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1bWVudFZp
ZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCkBAIC01MjcsMTIgKzUyNywx
MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgRnJhbWUq
IGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBOTzsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVy
ZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBmcm9tS2V5cHJl
c3MpOwogfQogCiAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQKIHsKLSAgICBp
ZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6
U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0
aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgZnJvbUtleXByZXNzOk5P
XSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkK
ICAgICAgICAgcmV0dXJuIE5POwpAQCAtNTQyLDcgKzU0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRvY3VtZW50
CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24g
Z3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBm
cm9tS2V5cHJlc3M6Tk9dKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2hh
c1Njcm9sbEJhcnNdKQogICAgICAgICByZXR1cm4gTk87CkBAIC02MTksNyArNjE5LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9wYWdlVmVy
dGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVj
dGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2Vd
KQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVw
IDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2UgZnJvbUtleXByZXNzOllFU10p
CiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFy
c10pCkBAIC02MzUsNyArNjM1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNs
YXNzKE5TTQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xs
QmFyc10pCi0gICAgICAgIHJldHVybiBbW3NlbGYgX2xhcmdlc3RDaGlsZFdpdGhTY3JvbGxCYXJz
XSBfcGFnZUhvcml6b250YWxseTpsZWZ0XTsKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBfbGFyZ2Vz
dENoaWxkV2l0aFNjcm9sbEJhcnNdIF9wYWdlSG9yaXpvbnRhbGx5OmxlZnQgZnJvbUtleXByZXNz
OllFU107CiAgICAgCiAgICAgZmxvYXQgZGVsdGEgPSBbc2VsZiBfaG9yaXpvbnRhbFBhZ2VTY3Jv
bGxEaXN0YW5jZV07CiAgICAgcmV0dXJuIFtzZWxmIF9zY3JvbGxIb3Jpem9udGFsbHlCeTpsZWZ0
ID8gLWRlbHRhIDogZGVsdGFdOwpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6
KEJPT0wpdXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAg
PyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkKKyAgICBp
ZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9s
bERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lIGZyb21LZXlwcmVzczpZRVNdKQogICAgICAg
ICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10pCkBAIC02NTUs
NyArNjU1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAt
IChCT09MKV9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBpZiAoW3Nl
bGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBTY3JvbGxS
aWdodCBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3Zl
cmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFy
aXR5OlNjcm9sbEJ5TGluZSBmcm9tS2V5cHJlc3M6WUVTXSkKICAgICAgICAgcmV0dXJuIFlFUzsK
IAogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKQpJbmRleDogV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAko
cmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNj
cm9sbGluZyhRSwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05f
Q0hFQ0soNCwgNiwgMCkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjE4NikKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0xNSAgUGV0ZXIg
S2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBh
bmQgYSBDaHJvbWl1bS9XaW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3ZWJwYWdl
LmNwcDogTWFyayB3aGljaCBzY3JvbGwgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVz
c2VzLgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTY3JvbGxpbmcpOgorCiAyMDA5
LTEyLTE0ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDog
V2ViS2l0L3dpbi9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvd2luL0NoYW5nZUxv
ZwkocmV2aXNpb24gNTIxODYpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDA5LTEyLTE1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIENocm9taXVtL1dpbiBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogTWFyayB3aGljaCBzY3JvbGwg
Y29tbWFuZHMgYXJlIHRyaWdnZXJlZCBieSBrZXlwcmVzc2VzLgorICAgICAgICAoV2ViVmlldzo6
a2V5RG93bik6CisKIDIwMDktMTItMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXQvd2lu
L1dlYlZpZXcuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2
aXNpb24gNTIxODYpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODA5LDcgKzE4MDksNyBAQCBib29sIFdlYlZpZXc6OmtleURvd24oV1BBUkFNIHZpcnR1YWxL
ZXlDCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0
eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHko
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgdHJ1ZSk7CiB9CiAKIGJvb2wgV2ViVmlldzo6a2V5UHJl
c3MoV1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45025</attachid>
            <date>2009-12-16 16:57:26 -0800</date>
            <delta_ts>2010-04-29 15:46:19 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>77659</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDUyMjIxKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw5MSBAQAorMjAwOS0xMi0xNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgV2luZG93cyBTY3JvbGxBbmlt
YXRvci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkIFdpbmRvd3MgU2Ny
b2xsQW5pbWF0b3IuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGQgV2luZG93cyBTY3JvbGxB
bmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkIFdp
bmRvd3MgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBBZGQgc3R1YiBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBkb20vRWxlbWVu
dC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpzY3JvbGxCeVVuaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsWm9vbUZvclJl
bmRlcmVyKTogRml4IHN0eWxlIGd1aWRlIHZpb2xhdGlvbi4KKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJD
b3JlOjpzY3JvbGxBbmRBY2NlcHRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnNjcm9sbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Ny
b2xsUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0
U3BhY2VFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IFBsdW1i
IHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcGxhdGZvcm0vUG9wdXBNZW51Lmg6
IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uCisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaDogQWRkZWQuICBDb250YWlucyBzdHViIGltcGwgZm9yIG5vbi1XaW5k
b3dzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6On5TY3JvbGxBbmltYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cG9zc2libHlBbmltYXRlU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFu
ZFN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnBvc3Np
Ymx5Q3JlYXRlV2l0aENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwb3NzaWJs
eUNyZWF0ZVdpdGhDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcldpbjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25UaW1lcklm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Ny
b2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oOiBBZGQgc2Nyb2xsIGNvbW1hbmQgc291cmNl
cy4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwgY29t
bWFuZCBzb3VyY2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVt
YiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291
cmNlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmlt
YXRvciB0byBoYW5kbGUgc2Nyb2xscyBpZiBkZXNpcmVkLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsYmFyLmg6IEFsbG93IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3Jv
bGxzIGlmIGRlc2lyZWQuICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOiBBZGQgaG9va3MgZm9yIFNjcm9sbEFuaW1hdG9y
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6cG9zc2libHlBbmltYXRlU2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRT
dG9wQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFBs
dW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6
OmNvbnRleHRNZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDog
UGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4gIFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojp3bmRQcm9jKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJhckNs
aWVudCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuaDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
LiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBQ
bHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IFBsdW1iIG5l
dyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2Vz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW50
QXRMaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFy
Q2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xs
IGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICogd3Nj
cmlwdDogQWRkIFdpbmRvd3MgU2Nyb2xsQW5pbWF0b3IuCisKIDIwMDktMTItMTYgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0NCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNzAsOCArMTM3MCw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9wYWdlL1BhZ2UuaCBcCiAJV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5j
cHAgXAogCVdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaCBcCi0gIFdlYkNvcmUvcGFnZS9QYWdlR3Jv
dXBMb2FkRGVmZXJyZXIuY3BwIFwKLSAgV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJl
ci5oIFwKKwlXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCisJV2ViQ29y
ZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5oIFwKIAlXZWJDb3JlL3BhZ2UvUGx1Z2luSGFs
dGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL1BsdWdpbkhhbHRlci5oIFwKIAlXZWJDb3JlL3BhZ2Uv
UGx1Z2luSGFsdGVyQ2xpZW50LmggXApAQCAtMTQ2OCw2ICsxNDY4LDcgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU1NMS2V5R2Vu
ZXJhdG9yLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBAIC0xOTM2LDYgKzE5Mzcs
OCBAQCBlbmRpZgogCiBpZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uaCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5o
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC05NzksOCArOTc5
LDEwIEBACiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywg
J1Bvc2l4XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwK
LSAgICAgICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAorICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNwcCQnXSwKKyAgICAg
ICAgICAgIFsnaW5jbHVkZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCddLAogICAgICAgICAg
ICAgWydpbmNsdWRlJywgJy9Ta2lhRm9udFdpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5j
bHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAg
ICAgJ2RlZmluZXMnOiBbCiAgICAgICAgICAgICAjIE1hdGNoIFNhZmFyaSBhbmQgTW96aWxsYSBv
biBXaW5kb3dzLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjc5Myw2ICsyNzkzLDkgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QdXJnZWFi
bGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU1NMS2V5R2VuZXJhdG9yLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY5Myw2ICsyMTY5MywxOCBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxT
Y3JvbGxBbmltYXRvci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Ny
b2xsQW5pbWF0b3JXaW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbGJhci5jcHAiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDU5NCw2ICs0NTk0LDcgQEAKIAkJQzVFQkREODQxMDVF
RERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAv
KiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUy
IC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUz
IC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAq
LzsgfTsKIAkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTU0RkQz
NzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMDFBMjdBRDEwQzlCRkQ4MDAw
MjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEMDFBMjdBQjEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxp
dFN0cmluZy5jcHAgKi87IH07CiAJCUQwMUEyN0FFMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNw
bGl0U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEMDFBMjdBQzEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05Nzk5LDYgKzk4MDAs
NyBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNwYXRj
aGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Ez
QkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTb3VyY2VQcm92aWRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDFBMjdBQjEwQzlCRkQ4MDAwMjZB
NDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTcGFjZVNwbGl0U3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRDAxQTI3QUMxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VTcGxpdFN0cmluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTUwMTIsNiArMTUwMTQsNyBAQAogCQkJCUJDM0JFMTJBMEU5
ODA5MkYwMDgzNTU4OCAvKiBQb3B1cE1lbnVTdHlsZS5oICovLAogCQkJCUU0RDY4Nzc4MEVEN0FF
NEYwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXIuaCAqLywKIAkJCQkxQzYzQTI0NjBGNzE2NDY2
MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCisJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZD
RTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBG
IC8qIFNjcm9sbGJhci5oICovLAogCQkJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3Jv
bGxiYXJDbGllbnQuaCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xs
YmFyVGhlbWUuaCAqLywKQEAgLTE3NzYxLDYgKzE3NzY0LDcgQEAKIAkJCQk0MUM3NjBCMTBFREUw
M0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNkY0NUYw
MEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
NENDMEUyMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODU0QjBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xs
YmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNTIyMTgp
CisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0
MSw3IEBAIHZvaWQgRWxlbWVudDo6c2Nyb2xsQnlVbml0cyhpbnQgdW5pdHMsIFMKICAgICAgICAg
ICAgICAgICBkaXJlY3Rpb24gPSBTY3JvbGxVcDsKICAgICAgICAgICAgICAgICB1bml0cyA9IC11
bml0czsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRvUmVuZGVyQm94KHJlbmQpLT5sYXll
cigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgdW5pdHMpOworICAgICAgICAgICAg
dG9SZW5kZXJCb3gocmVuZCktPmxheWVyKCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBQcm9ncmFtbWF0aWMsIHVuaXRzKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI2MSw4ICsy
NjEsOCBAQCBzdGF0aWMgZmxvYXQgbG9jYWxab29tRm9yUmVuZGVyZXIoUmVuZGVyCiAgICAgLy8g
RklYTUU6IFRoaXMgZG9lcyB0aGUgd3JvbmcgdGhpbmcgaWYgdHdvIG9wcG9zaW5nIHpvb21zIGFy
ZSBpbiBlZmZlY3QgYW5kIGNhbmNlbGVkIGVhY2gKICAgICAvLyBvdGhlciBvdXQsIGJ1dCB0aGUg
YWx0ZXJuYXRpdmUgaXMgdGhhdCB3ZSdkIGhhdmUgdG8gY3Jhd2wgdXAgdGhlIHdob2xlIHJlbmRl
ciB0cmVlIGV2ZXJ5CiAgICAgLy8gdGltZSAob3Igc3RvcmUgYW4gYWRkaXRpb25hbCBiaXQgaW4g
dGhlIFJlbmRlclN0eWxlIHRvIGluZGljYXRlIHRoYXQgYSB6b29tIHdhcyBzcGVjaWZpZWQpLgot
ICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxLjBmOwotICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gMTsKKyAg
ICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAhPSAxKSB7CiAgICAgICAg
IC8vIE5lZWQgdG8gZmluZCB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgUmVuZGVyT2JqZWN0IHRoYXQg
c2V0IHVwCiAgICAgICAgIC8vIGEgZGlmZmVyaW5nIHpvb20sIGFuZCB0aGVuIHdlIGRpdmlkZSBv
dXIgcmVzdWx0IGJ5IGl0IHRvIGVsaW1pbmF0ZSB0aGUgem9vbS4KICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwcmV2ID0gcmVuZGVyZXI7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lv
biA1MjIxOCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTUsMTMgKzExNSwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2Nyb2xsQW5kQWNjZXB0
RXZlbnQoCiAgICAgUmVuZGVyQm94KiBlbmNsb3NpbmdCb3ggPSBub2RlLT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdCb3goKTsKIAogICAgIGlmIChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdl
V2hlZWxFdmVudCkgewotICAgICAgICBpZiAoZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAw
ID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCAx
LCBzdG9wTm9kZSkpCisgICAgICAgIGlmIChlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAg
PyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UsIFdo
ZWVsLCAxLCBzdG9wTm9kZSkpCiAgICAgICAgICAgICBlLmFjY2VwdCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgZmxvYXQgcGl4ZWxzVG9TY3JvbGwgPSBkZWx0YSA+IDAgPyBkZWx0
YSA6IC1kZWx0YTsKLSAgICBpZiAoZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVn
YXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQaXhlbCwgcGl4ZWxz
VG9TY3JvbGwsIHN0b3BOb2RlKSkKKyAgICBpZiAoZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEg
PCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQaXhl
bCwgV2hlZWwsIHBpeGVsc1RvU2Nyb2xsLCBzdG9wTm9kZSkpCiAgICAgICAgIGUuYWNjZXB0KCk7
CiB9CiAKQEAgLTkwMiw3ICs5MDIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2V0TW91c2VQcmVz
c05vZGUoUGFzCiAgICAgbV9tb3VzZVByZXNzTm9kZSA9IG5vZGU7CiB9CiAKLWJvb2wgRXZlbnRI
YW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxv
dyhTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKICAgICBOb2RlKiBub2RlID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCkBAIC05MTAsNyArOTEwLDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAgIGlm
IChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5pc0xp
c3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSkpIHsKICAgICAgICAgICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05MTksMTQgKzkxOSwxNCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIEV2
ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7Ci0g
ICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7
CisgICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgc291cmNlKTsKICAgICBpZiAoIWhhbmRsZWQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0g
bV9mcmFtZTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHkpIDogZmFsc2U7CisgICAgICAgICAgICBoYW5kbGVkID0gdmll
dyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UpIDogZmFsc2U7
CiAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgICAgICB9
IHdoaWxlICghaGFuZGxlZCAmJiBmcmFtZSk7CiAgICAgIH0KQEAgLTI0NDYsNyArMjQ0Niw3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmQKIHZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAg
ICAgU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGV2ZW50LT5zaGlmdEtleSgpID8gU2Nyb2xs
VXAgOiBTY3JvbGxEb3duOwotICAgIGlmIChzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIFNjcm9s
bEJ5UGFnZSkpIHsKKyAgICBpZiAoc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBh
Z2UsIEtleXByZXNzKSkgewogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NTUsNyArMjQ1NSw3IEBAIHZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmQKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICh2aWV3LT5zY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UpKQorICAg
IGlmICh2aWV3LT5zY3JvbGwoZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UsIEtleXByZXNzKSkKICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw5ICsxMjAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRnJh
bWUqIHN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShOb2RlKik7CiAKLSAgICBib29sIHNjcm9sbE92ZXJm
bG93KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xs
T3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNl
IHNvdXJjZSk7CiAKLSAgICBib29sIHNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQogICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2RlKE5vZGUqLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0OyAvLyAtd2Via2l0LXVzZXItZHJhZyA9PSBhdXRvCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9Qb3B1cE1lbnUuaAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1BvcHVwTWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgcHJpdmF0ZToK
ICAgICBRdEFic3RyYWN0V2ViUG9wdXAqIG1fcG9wdXA7CiAjZWxpZiBQTEFURk9STShXSU4pCiAg
ICAgLy8gU2Nyb2xsQmFyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JfaAor
I2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3Jv
bGxiYXJDbGllbnQ7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgU2Nyb2xsQW5pbWF0b3IqIHBvc3NpYmx5Q3JlYXRlV2l0aENsaWVudChTY3JvbGxiYXJDbGll
bnQqKTsKKworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yKCkgeyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgcG9zc2libHlBbmltYXRlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllZFN0ZXAsIGZs
b2F0IG1heFBvcywgYm9vbCYgY2hhbmdlZFNvbWV0aGluZykgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBmbG9hdCkgeyB9Cit9OworCisjaWYgIVBMQVRGT1JNKFdJTl9PUykKK1Nj
cm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KFNj
cm9sbGJhckNsaWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworfQorI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvcldpbi5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3Jv
bGxBbmltYXRvciogU2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5Q3JlYXRlV2l0aENsaWVudChTY3Jv
bGxiYXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yV2lu
KGNsaWVudCk7Cit9CisKK2NvbnN0IGRvdWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9u
VGltZXJEZWxheSA9IDAuMDE7CisKK1Njcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlzRGF0YTo6UGVy
QXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JXaW4qIHBhcmVudCkKKyAgICA6IG1fY3VycmVudFBvcygw
KQorICAgICwgbV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJlbnRWZWxvY2l0eSgwKQorICAg
ICwgbV9kZXNpcmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFuaW1hdGlvblRpbWUoMCkKKyAg
ICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlv
blRpbWVyRmlyZWQpCit7Cit9CisKKworU2Nyb2xsQW5pbWF0b3JXaW46OlNjcm9sbEFuaW1hdG9y
V2luKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAg
ICwgbV9ob3Jpem9udGFsRGF0YSh0aGlzKQorICAgICwgbV92ZXJ0aWNhbERhdGEodGhpcykKK3sK
K30KKworU2Nyb2xsQW5pbWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbigpCit7CisgICAgc3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmlt
YXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5p
bWF0b3JXaW46OnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllZFN0ZXAsIGZsb2F0IG1heFBvcywgYm9vbCYgY2hhbmdl
ZFNvbWV0aGluZykKK3sKKyAgICAvLyBEb24ndCBhbmltYXRlIGp1bXBpbmcgdG8gdGhlIGJlZ2lu
bmluZyBvciBlbmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGlmIChncmFudWxhcml0eSA9PSBTY3Jv
bGxCeURvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGlzIGFu
IGFuaW1hdGlibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVsdGEuCisgICAgY2hh
bmdlZFNvbWV0aGluZyA9IGZhbHNlOworICAgIFBlckF4aXNEYXRhKiBkYXRhID0gKGRpcmVjdGlv
biA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgPyAmbV92ZXJ0aWNhbERh
dGEgOiAmbV9ob3Jpem9udGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6
Om1pbihkYXRhLT5tX2Rlc2lyZWRQb3MgKyBtdWx0aXBsaWVkU3RlcCwgbWF4UG9zKSwgMC4wZik7
CisgICAgaWYgKG5ld1BvcyA9PSBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IG5ld1BvczsKKworICAgIC8vIENhbGN1bGF0
ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAgIGlmIChkYXRhLT5tX2N1cnJlbnRQb3MgPT0g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmbG9hdCBhbmlt
YXRpb25TdGVwOworICAgIGJvb2wgYWxyZWFkeUFuaW1hdGluZyA9IGRhdGEtPm1fYW5pbWF0aW9u
VGltZXIuaXNBY3RpdmUoKTsKKyAgICBpZiAoKHNvdXJjZSAhPSBLZXlwcmVzcykgJiYgKHNvdXJj
ZSAhPSBXaGVlbCkpIHsKKyAgICAgICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB0aGUgc2Nyb2xs
YmFyJ3MgYXV0b3Njcm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAgICAgICAgLy8gaW5jcmVt
ZW50IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGJ5IHxzdGVwfCBldmVyeQorICAgICAgICAvLyBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBzZWNvbmRz
LiAgSWYgd2UKKyAgICAgICAgLy8gc2V0IHRoZSBkZXNpcmVkIHZlbG9jaXR5IHRvIGV4YWN0bHkg
dGhpcyByYXRlLCBzbW9vdGggc2Nyb2xsaW5nIHdpbGwKKyAgICAgICAgLy8gbmVpdGhlciByYWNl
IGFoZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGluY3JlYXNpbmdseSBsYWcK
KyAgICAgICAgLy8gYmVoaW5kLCBidXQgd2lsbCBiZSBzbW9vdGggYW5kIHN5bmNocm9uaXplZC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGFjY2VsZXJh
dGlvbiBwZXJpb2QsIHRoZSBjdXJyZW50IHBvc2l0aW9uCisgICAgICAgIC8vIHdpbGwgbGFnIHRo
ZSBkZXNpcmVkIG9uZSBieSBhIHNtYWxsLCBjb25zdGFudCBhbW91bnQgKHNlZSBjb21tZW50cyBv
bgorICAgICAgICAvLyBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3QgYW1vdW50IGlzIGdpdmVu
IGJ5CisgICAgICAgIC8vICAgbGFnID0gfHN0ZXB8IC0gdigwLjV0QSArIHREKQorICAgICAgICAv
LyBXaGVyZQorICAgICAgICAvLyAgIHYgPSBUaGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LAorICAg
ICAgICAvLyAgICAgICB8c3RlcHwgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0
b3Njcm9sbFRpbWVyRGVsYXkoKQorICAgICAgICAvLyAgIHRBID0gYWNjZWxlcmF0aW9uVGltZSgp
CisgICAgICAgIC8vICAgdEQgPSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3Nl
ZCB3aGVuIHN0YXJ0aW5nIHRvCisgICAgICAgIC8vICAgICAgICBzY3JvbGwsIHxhbmltYXRpb25U
aW1lckRlbGF5fAorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21l
IGJ1ZmZlciBhZ2FpbnN0IHRpbWVyIGppdHRlciBzbyB3ZSdyZSBsZXNzCisgICAgICAgIC8vIGxp
a2VseSB0byBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYW5kIHN0b3AgKGFuZCB0aHVzIGhhdmUg
dG8KKyAgICAgICAgLy8gcmUtYWNjZWxlcmF0ZSwgY2F1c2luZyBhIHZpc2libGUgaGl0Y2gpIHdo
aWxlIHdhaXRpbmcgZm9yIHRoZSBuZXh0CisgICAgICAgIC8vIGF1dG9zY3JvbGwgaW5jcmVtZW50
LgorICAgICAgICBhbmltYXRpb25TdGVwID0gc3RlcDsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBGb3Iga2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdlIGRvbid0IGtub3cgd2hlbiB0aGUg
bmV4dCBpbmNyZW1lbnQKKyAgICAgICAgLy8gd2lsbCBiZSByZXF1ZXN0ZWQuICBJZiB3ZSBzZXQg
dGhlIHRhcmdldCB2ZWxvY2l0eSBiYXNlZCBvbiBob3cgZmFyCisgICAgICAgIC8vIGF3YXkgZnJv
bSB0aGUgdGFyZ2V0IHBvc2l0aW9uIHdlIGFyZSwgdGhlbiBmb3Iga2V5Ym9hcmQvd2hlZWwgZXZl
bnRzCisgICAgICAgIC8vIHRoYXQgY29tZSBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Njcm9sbCBkZWxh
eSwgd2UnbGwgYXN5bXB0b3RpY2FsbHkKKyAgICAgICAgLy8gYXBwcm9hY2ggdGhlIHZlbG9jaXR5
IG5lZWRlZCB0byBzdGF5IHNtb290aGx5IGluIHN5bmMgd2l0aCB0aGUgdXNlcidzCisgICAgICAg
IC8vIGFjdGlvbnM7IGZvciBldmVudHMgdGhhdCBjb21lIHNsb3dlciwgd2UnbGwgc2Nyb2xsIG9u
ZSBpbmNyZW1lbnQgYW5kCisgICAgICAgIC8vIHRoZW4gcGF1c2UgdW50aWwgdGhlIG5leHQgZXZl
bnQgZmlyZXMuICBUaGlzIGxhdHRlciBiZWhhdmlvciBtZWFucworICAgICAgICAvLyB0aGF0IHNp
bmdsZSBrZXlwcmVzc2VzIG9yIHdoZWVsIGZsaWNrcyB3aWxsIGhhdmUgdGhlIHNhbWUgYXBwZWFy
YW5jZQorICAgICAgICAvLyBhcyBzaW5nbGUgcHJlc3NlcyBvZiBhIHNjcm9sbGJhciBwYXJ0Lgor
ICAgICAgICBhbmltYXRpb25TdGVwID0gYWJzKG5ld1BvcyAtIGRhdGEtPm1fY3VycmVudFBvcyk7
CisgICAgICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdoZWVsIGNvbnRpbnVh
bGx5IHNwdW4pLCB0aGVuIG9uY2Ugd2UKKyAgICAgICAgLy8gaGF2ZSByZWFjaGVkIGEgdmVsb2Np
dHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUKKyAgICAgICAgLy8g
bGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhdCBhcm91bmQgdGhlIHNhbWUgdGlt
ZSB3ZSdkCisgICAgICAgIC8vIGV4cGVjdCB0aGUgbmV4dCBpbmNyZW1lbnQgdG8gb2NjdXIgLS0g
YmFkIGJlY2F1c2UgaXQgbGVhZHMgdG8KKyAgICAgICAgLy8gaGl0Y2hpbmcgYXMgZGVzY3JpYmVk
IGFib3ZlLiAgU28gd2UgdHJpbSB0aGUgdmVsb2NpdHkgc2xpZ2h0bHkgc28KKyAgICAgICAgLy8g
dGhhdCB3ZSBoYXZlIGEgc21hbGwgYnVmZmVyLCB0byBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBv
ZiB0aGlzCisgICAgICAgIC8vIG9jY3VycmluZy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBmYWxsIHN0
ZWFkaWx5IGZ1cnRoZXIgYmVoaW5kIGhlcmUsCisgICAgICAgIC8vIGJlY2F1c2UgaW4gc3Vic2Vx
dWVudCB1cGRhdGVzIHdlJ2xsIGJlIGNhbGN1bGF0aW5nIG91ciB2ZWxvY2l0eSBiYXNlZAorICAg
ICAgICAvLyBvbiBhIGxhcmdlciBkZXNpcmVkIHN0ZXAgLS0gc28gdGhlIHByYWN0aWNhbCBlZmZl
Y3QgaXMgdGhhdCB3ZSBsYWcgYnkKKyAgICAgICAgLy8gYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50
IGRlcGVuZGluZyBvbiB0aGUgdHJpbSB2YWx1ZSBhbmQgdGhlIHJhdGUgYXQKKyAgICAgICAgLy8g
d2hpY2ggaW5jcmVtZW50cyBvY2N1ciBjb21wYXJlZCB0byB0aGUgYXV0b3Njcm9sbCB0aW1lciBk
ZWxheS4gIFRoZQorICAgICAgICAvLyBleGFjdCBhbW91bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAg
Ly8gICBsYWcgPSB8c3RlcHwgKiAoKHIgLyBrKSAtIDEpCisgICAgICAgIC8vIFdoZXJlCisgICAg
ICAgIC8vICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBlYXQgZGVsYXksCisg
ICAgICAgIC8vICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpLCB0byB0aGUKKyAgICAgICAgLy8gICAgICAga2V5L3doZWVsIHJlcGVhdCBk
ZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBmYXN0ZXIpCisgICAgICAgIC8vICAgayA9
IFRoZSB2ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAgICAgIC8vCisgICAg
ICAgIC8vIElmIHdlIHdhbnQgdG8gYWN0IGFzIG11Y2ggbGlrZSBhdXRvc2Nyb2xsaW5nIGFzIHBv
c3NpYmxlLCB0aGVuIHdlCisgICAgICAgIC8vIGNob29zZSBrIHN1Y2ggdGhhdCBsYWcgaXMgdGhl
IHNhbWUgYXMgYWJvdmUgd2hlbiByID0gMS4gIFRoZSBlcXVhdGlvbgorICAgICAgICAvLyBiZWxv
dyBkb2VzIHRoaXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBk
byB0aGlzIHdoZW4gd2UncmUgbm90IGFscmVhZHkgYW5pbWF0aW5nLCBpLmUuCisgICAgICAgIC8v
IGdldHRpbmcgcmVwZWF0ZWQgZXZlbnRzLiAgSWYgdGhlIHVzZXIgc2ltcGx5IHByZXNzZWQgYSBr
ZXkgb25jZSwgd2UKKyAgICAgICAgLy8gd2FudCB0byBhbmltYXRlIGF0IG5vcm1hbCBzcGVlZCBs
aWtlIHdlIHdvdWxkIGFib3ZlLiAgSWYgd2UnbGwgYmUKKyAgICAgICAgLy8gZ2V0dGluZyBtb3Jl
IGV2ZW50cyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIHRyaW1taW5nIGJlbG93LCBvdXIKKyAgICAg
ICAgLy8gaW5pdGlhbCBhY2NlbGVyYXRpb24gcGVyaW9kIHdpbGwgZ2l2ZSB1cyBlbm91Z2ggdGlt
ZSBmb3IgdGhlbSB0bworICAgICAgICAvLyBhcnJpdmUuCisgICAgICAgIGlmIChhbHJlYWR5QW5p
bWF0aW5nKQorICAgICAgICAgICAgYW5pbWF0aW9uU3RlcCAvPSAoMi4wIC0gKCgxLjAgLyBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSkgKiAoMC41
ICogYWNjZWxlcmF0aW9uVGltZSgpICsgYW5pbWF0aW9uVGltZXJEZWxheSkpKTsKKyAgICB9Cisg
ICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8gU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisgICAgY2hhbmdlZFNv
bWV0aGluZyA9IHRydWU7CisKKyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcs
IHN0YXJ0LgorICAgIGlmICghYWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9s
bChkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3Zl
cnRpY2FsRGF0YTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICBk
YXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9zOwor
ICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSA9IDA7Cit9CisKKy8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjphY2Nl
bGVyYXRpb25UaW1lKCkKK3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhlbWU6
Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUgbGVu
Z3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFyZ2V0
CisgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9kdWNl
IGEgbW9yZSBwcm9ub3VuY2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICByZXR1
cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8
U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1lciA9
PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxEYXRh
IDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3RvcEFu
aW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEt
Pm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25U
aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3JvbGwo
UGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5nIHBl
cmYgdmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFsIHRp
bWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAgdCA9
IHQwICsgMC41dEEgLSB0RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhlIHRp
bWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAgIC8v
ICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cpCisg
ICAgLy8gICB0RCA9IHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZhbHVl
IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEKKyAg
ICAvLyAgICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9uZSBk
dWUgdG8gY2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkgKH4w
IGZvciBzaW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBwYWdl
cykuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxsLCB0
aGUgdG90YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdpYmxl
IGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBXaXRo
b3V0CisgICAgLy8ga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhhcmQg
dG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0byBy
ZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisgICAg
Ly8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdGlt
ZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBiZSBs
b25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBwYWdl
IGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8gYXZv
aWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxpbmcg
d2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBpZGVh
bCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21lIGRp
c3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xhc3RB
bmltYXRpb25UaW1lKSA6IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUgb3V0
IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVudAor
ICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYgKGRh
dGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAg
ICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2ggdGhl
IGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBkYXRh
LT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAvLyBG
aWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0byBy
ZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBwb3Rl
bnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50ZXJ2
YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJyZW50
VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVudGlh
bE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAgIC8v
IFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4gb3Vy
IGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRyYXZl
bGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0aGUg
ZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAgICAg
ICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9jaXR5
LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rlc2ly
ZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxvYXQg
YWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJhdGlv
blJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29uc3Rh
bnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxpbmUg
c2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAgICAg
ICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIgcG9y
dGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVyYXRp
b25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQgdGhl
IHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVsb2Np
dHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAgICBk
aXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Nyb2xs
SW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBlbnRp
cmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBsYXN0
U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IHBv
dGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
V2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0YW5j
ZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2NpdHkp
ICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5tX2N1
cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3VyIGRl
c2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0eSB0
b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVkVmVs
b2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJh
c2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxlZCA+
PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gZGF0YS0+bV9jdXJyZW50UG9zKSkgeworICAgICAg
ICAvLyBXZSd2ZSB0cmF2ZWxlZCBmYXIgZW5vdWdoIHRvIHJlYWNoIHRoZSBkZXNpcmVkIHBvc2l0
aW9uLiAgU3RvcCBzbW9vdGgKKyAgICAgICAgLy8gc2Nyb2xsaW5nLgorICAgICAgICBkYXRhLT5t
X2N1cnJlbnRQb3MgPSBkYXRhLT5tX2Rlc2lyZWRQb3M7CisgICAgICAgIGRhdGEtPm1fY3VycmVu
dFZlbG9jaXR5ID0gMDsKKyAgICAgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCB5ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRy
YXZlbCB0b3dhcmRzIGl0IGFuZCBzZXQgdXAgdGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgor
ICAgICAgICBpZiAoZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAg
ICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAgICAgICBk
YXRhLT5tX2N1cnJlbnRQb3MgKz0gZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgZGF0YS0+bV9h
bmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSk7CisgICAgICAg
IGRhdGEtPm1fbGFzdEFuaW1hdGlvblRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CisgICAgfQor
ICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1faG9y
aXpvbnRhbERhdGEubV9jdXJyZW50UG9zLCBtX3ZlcnRpY2FsRGF0YS5tX2N1cnJlbnRQb3MpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvcldpbi5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvcldpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
QW5pbWF0b3JXaW5faAorI2RlZmluZSBTY3JvbGxBbmltYXRvcldpbl9oCisKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JXaW4gOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3Igewor
cHVibGljOgorICAgIFNjcm9sbEFuaW1hdG9yV2luKFNjcm9sbGJhckNsaWVudCopOworICAgIHZp
cnR1YWwgflNjcm9sbEFuaW1hdG9yV2luKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcG9zc2libHlB
bmltYXRlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNv
dXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllZFN0ZXAsIGZsb2F0IG1heFBvcywgYm9v
bCYgY2hhbmdlZFNvbWV0aGluZyk7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
QW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2YXRl
OgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFu
aW1hdG9yV2luKiBwYXJlbnQpOworCisgICAgICAgIGZsb2F0IG1fY3VycmVudFBvczsKKyAgICAg
ICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxvY2l0eTsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBtX2xhc3RB
bmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9hbmltYXRp
b25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25UaW1lKCk7
CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAgdm9p
ZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOworICAgIHZv
aWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2b2lkIGFu
aW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFNjcm9sbGJhckNsaWVudCogbV9jbGll
bnQ7CisgICAgUGVyQXhpc0RhdGEgbV9ob3Jpem9udGFsRGF0YTsKKyAgICBQZXJBeGlzRGF0YSBt
X3ZlcnRpY2FsRGF0YTsKK307CisKK30KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBl
cy5oCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBTY3JvbGxCeVBpeGVsCiAgICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291cmNlIHsKKyAg
ICAgICAgS2V5cHJlc3MsCisgICAgICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxiYXJQYXJ0T3JN
ZW51LCAgLy8gIlNjcm9sbGJhciIgYWxvbmUgY2xhc2hlcyB3aXRoIHRoZSBjbGFzcyBuYW1lCisg
ICAgICAgIFByb2dyYW1tYXRpYworICAgIH07CisKICAgICBlbnVtIFNjcm9sbGJhck9yaWVudGF0
aW9uIHsgSG9yaXpvbnRhbFNjcm9sbGJhciwgVmVydGljYWxTY3JvbGxiYXIgfTsKIAogICAgIGVu
dW0gU2Nyb2xsYmFyTW9kZSB7IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhckFsd2F5c09mZiwgU2Ny
b2xsYmFyQWx3YXlzT24gfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lv
biA1MjIxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0Niw2ICsyNDYsMTQgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9s
bFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRoKCksIG1heGlt
dW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVl
KG9mZnNldC54KCksIHRydWUpOworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwog
dm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAg
ICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCkBAIC0zMTMsMTcgKzMyMSwxNyBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0CiAgICAgdXBkYXRlU2Ny
b2xsYmFycyhJbnRTaXplKG5ld1Njcm9sbFBvc2l0aW9uLngoKSwgbmV3U2Nyb2xsUG9zaXRpb24u
eSgpKSk7CiB9CiAKLWJvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorYm9vbCBTY3JvbGxWaWV3Ojpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkp
CiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsK
IAogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERv
d24pIHsKICAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1
cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBzb3VyY2UpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgICAgICAgICByZXR1cm4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNl
KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDQxLDcgKzQ0OSw3IEBAIHZvaWQg
U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVw
LCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlv
bihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1f
c2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAgLTQ2NSw3ICs0NzMs
NyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1Blckxp
bmVTdGVwLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3Bv
cnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlm
IChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAgLTY3Nyw3ICs2ODUs
MTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICAg
ICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAg
ICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisKKyAg
ICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFjayBvbiBzY3JvbGxCeSgpIGlmIHRoZXJlIGlzIG5v
IHNjcm9sbGJhciBmb3IgYSBub24temVybyBkZWx0YT8KKyAgICAgICAgaWYgKGRlbHRhWSAmJiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Ny
b2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBXaGVlbCwgZGVsdGFZKTsKKyAgICAgICAgaWYg
KGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBXaGVlbCwgZGVs
dGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDUy
MjE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDggQEAgY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwog
cHVibGljOgogICAgIH5TY3JvbGxWaWV3KCk7CiAKLSAgICAvLyBTY3JvbGxiYXJDbGllbnQgbWV0
aG9kLiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXIgdHdvLgorICAgIC8vIFNjcm9sbGJh
ckNsaWVudCBtZXRob2RzLiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXIgdHdvLgorICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICAKICAg
ICAvLyBUaGUgd2luZG93IHRoYXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiAgVGhlIFNjcm9sbFZp
ZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0aGUKQEAgLTE0Niw3
ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVs
eShjb25zdCBJbnRSZWN0Jik7CiAgICAgCiAgICAgLy8gVGhpcyBtZXRob2Qgc2Nyb2xscyBieSBs
aW5lcywgcGFnZXMgb3IgcGl4ZWxzLgotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogICAgICAgICAKICAgICAvLyBT
Y3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgdmlldyAoZWl0aGVyIGJsaXR0aW5nIG9y
IGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgogICAgIHZvaWQgc2Nyb2xsQ29udGVudHMoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZp
c2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODgsMTIgKzg4LDEyIEBAIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90
aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNl
dFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2LCBib29sIGZyb21T
Y3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9IG1heChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zp
c2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVlKCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7
CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTExNSwyNiArMTE1LDMwIEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRTdGVw
cyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhlbHNQZXJTdGVw
OwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorYm9vbCBT
Y3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllcikK
IHsKLSAgICBmbG9hdCBzdGVwID0gMDsKLSAgICBpZiAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCAm
JiBtX29yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoZGlyZWN0aW9uID09IFNj
cm9sbExlZnQgJiYgbV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKLSAgICAg
ICAgc3RlcCA9IC0xOwotICAgIGVsc2UgaWYgKChkaXJlY3Rpb24gPT0gU2Nyb2xsRG93biAmJiBt
X29yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoZGlyZWN0aW9uID09IFNjcm9s
bFJpZ2h0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikpIAotICAgICAg
ICBzdGVwID0gMTsKLSAgICAKKyAgICAvLyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgor
ICAgIGlmICgobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rp
b24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9
PSBTY3JvbGxMZWZ0IHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZsb2F0IHN0ZXA7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9s
bEJ5TGluZSkKLSAgICAgICAgc3RlcCAqPSBtX2xpbmVTdGVwOworICAgICAgICBzdGVwID0gbV9s
aW5lU3RlcDsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBhZ2UpCi0gICAg
ICAgIHN0ZXAgKj0gbV9wYWdlU3RlcDsKKyAgICAgICAgc3RlcCA9IG1fcGFnZVN0ZXA7CiAgICAg
ZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgc3RlcCAq
PSBtX3RvdGFsU2l6ZTsKKyAgICAgICAgc3RlcCA9IG1fdG90YWxTaXplOwogICAgIGVsc2UgaWYg
KGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCi0gICAgICAgIHN0ZXAgKj0gbV9waXhlbFN0
ZXA7Ci0gICAgICAgIAotICAgIGZsb2F0IG5ld1BvcyA9IG1fY3VycmVudFBvcyArIHN0ZXAgKiBt
dWx0aXBsaWVyOworICAgICAgICBzdGVwID0gbV9waXhlbFN0ZXA7CisgICAgaWYgKGRpcmVjdGlv
biA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgbXVsdGlw
bGllciA9IC1tdWx0aXBsaWVyOworICAgIGZsb2F0IG11bHRpcGxpZWRTdGVwID0gc3RlcCAqIG11
bHRpcGxpZXI7CiAgICAgZmxvYXQgbWF4UG9zID0gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXpl
OwotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obmV3UG9zLCBtYXhQb3MpLCAwLjBm
KSk7CisgICAgYm9vbCBjaGFuZ2VkU29tZXRoaW5nOworICAgIGlmIChjbGllbnQoKSAmJiBjbGll
bnQoKS0+cG9zc2libHlBbmltYXRlU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJj
ZSwgc3RlcCwgbXVsdGlwbGllZFN0ZXAsIG1heFBvcywgY2hhbmdlZFNvbWV0aGluZykpCisgICAg
ICAgIHJldHVybiBjaGFuZ2VkU29tZXRoaW5nOworCisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3Mo
bWF4KG1pbihtX2N1cnJlbnRQb3MgKyBtdWx0aXBsaWVkU3RlcCwgbWF4UG9zKSwgMC4wZiksIHRy
dWUpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCkBAIC0xODcs
NyArMTkxLDcgQEAgdm9pZCBTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChkbwogICAg
IH0KIAogICAgIC8vIEhhbmRsZSB0aGUgYXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAoc2Nyb2xs
KHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJp
dHkoKSkpCisgICAgaWYgKHNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVz
c2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCksIFNjcm9sbGJhclBhcnRPck1lbnUpKQogICAgICAg
ICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yNTcsMTEgKzI2MSwxNCBAQCB2
b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBpZiAoZGVsdGEgPCAw
KQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAgICBpZiAoZGVsdGEp
Ci0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVs
dGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgc2V0Q3Vy
cmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkg
LyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9h
dCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAgaWYgKG5vdGlmeVNjcm9s
bEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+c2V0U2Nyb2xsUG9zaXRp
b25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisKICAgICBpZiAocG9zID09
IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMDYsNyArMzEzLDcg
QEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcgogewogICAgIGlmICht
X3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxk
U25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2lu
LCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5oCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDExICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAgICAgdm9pZCBzZXRTdGVw
cyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1BlclN0ZXAgPSAxKTsKLSAg
ICBib29sIHNldFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1ZShpbnQsIGJvb2wgZnJvbVNj
cm9sbEFuaW1hdGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6ZSwg
aW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3Nl
ZFBvcyA9IHA7IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29sIHNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRp
cGxpZXIgPSAxKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0
eSgpOwogICAgIAogICAgIHZvaWQgbW92ZVRodW1iKGludCBwb3MpOwotICAgIGJvb2wgc2V0Q3Vy
cmVudFBvcyhmbG9hdCBwb3MpOworICAgIGJvb2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIGJv
b2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpOwogCiAgICAgU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVu
dDsKICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDUyMjE4KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAog
I2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTM0LDcgKzM2LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsYmFyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQo
KSB7fQorICAgIFNjcm9sbGJhckNsaWVudCgpIDogbV9zY3JvbGxBbmltYXRvcihTY3JvbGxBbmlt
YXRvcjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KHRoaXMpKSB7IH0KKyAgICB2aXJ0dWFsIH5T
Y3JvbGxiYXJDbGllbnQoKSB7IH0KKworICAgIGJvb2wgcG9zc2libHlBbmltYXRlU2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgZmxv
YXQgbWF4UG9zLCBib29sJiBjaGFuZ2VkU29tZXRoaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc2Nyb2xsQW5pbWF0b3IgPyBtX3Njcm9sbEFuaW1hdG9yLT5wb3NzaWJseUFuaW1hdGVTY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwg
bWF4UG9zLCBjaGFuZ2VkU29tZXRoaW5nKSA6IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgc2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCisgICAgeworICAgICAgICBpZiAobV9zY3JvbGxBbmltYXRvcikK
KyAgICAgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3ItPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFu
aW1hdGlvbihvcmllbnRhdGlvbiwgcG9zKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKKwogICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOwogCiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9
IDA7CkBAIC02Nyw2ICs4NCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPldpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAg
ICAgfQorCitwcml2YXRlOgorICAgIE93blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmlt
YXRvcjsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHJl
dmlzaW9uIDUyMjE4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxMyBAQCBib29sIFNjcm9sbGJhcjo6Y29udGV4dE1l
bnUoY29uc3QgUGxhdGZvCiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xs
Qm90dG9tKQogICAgICAgICBzZXRWYWx1ZShtYXhpbXVtKCkpOwogICAgIGVsc2UgaWYgKGFjdGlv
blNlbGVjdGVkID09IGFjdFBhZ2VVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3Jv
bGxMZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6
b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlLCBTY3JvbGxiYXJQYXJ0
T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlRG93bikKLSAg
ICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9s
bEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBT
Y3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UsIFNjcm9sbGJhclBhcnRPck1lbnUpOwogICAgIGVsc2Ug
aWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVwKQotICAgICAgICBzY3JvbGwoaG9yaXpv
bnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lLCAxKTsKKyAgICAgICAg
c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSwg
U2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0
U2Nyb2xsRG93bikKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNj
cm9sbERvd24sIFNjcm9sbEJ5TGluZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIFNjcm9sbGJhclBhcnRPck1l
bnUpOwogI2VuZGlmIC8vIFFUX05PX0NPTlRFWFRNRU5VCiAgICAgcmV0dXJuIHRydWU7CiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNTIyMTgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NjIsNiArNjYyLDEyIEBAIHZvaWQgUG9wdXBNZW51OjpwYWludChjb25zdCBJbnRSZWN0
JiBkYW0KICAgICAgICAgOjpSZWxlYXNlREMobV9wb3B1cCwgbG9jYWxEQyk7CiB9CiAKK3ZvaWQg
UG9wdXBNZW51OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBv
ZmZzZXQpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0
VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgUG9wdXBNZW51Ojp2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKQEAg
LTk3Niw3ICs5ODIsNyBAQCBMUkVTVUxUIFBvcHVwTWVudTo6d25kUHJvYyhIV05EIGhXbmQsIFVJ
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzY3JvbGxiYXIoKS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAg
OiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CisgICAgICAgICAgICBzY3JvbGxi
YXIoKS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUs
IFdoZWVsLCBhYnMoaSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDUyMjE4KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDEwICs0MDIsMTAgQEAg
aW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodAogICAgIHJldHVybiBpbmNs
dWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKSA6IDA7CiB9CiAKLWJvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNv
dXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBS
ZW5kZXJMYXllciogbCA9IGxheWVyKCk7Ci0gICAgaWYgKGwgJiYgbC0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7CisgICAgaWYgKGwgJiYgbC0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcikpIHsKICAgICAgICAgaWYg
KHN0b3BOb2RlKQogICAgICAgICAgICAgKnN0b3BOb2RlID0gbm9kZSgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQxNiw3ICs0MTYsNyBAQCBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkCiAKICAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CisgICAgICAg
IHJldHVybiBiLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBs
aWVyLCBzdG9wTm9kZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwogICAgIGludCBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwg
Tm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIg
PSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNhbkJlU2Nyb2xsZWRBbmRIYXNT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1hdGlj
YWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xsKCk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHANCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJldmlzaW9uIDUyMjE4
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsNiArMTcwLDEyIEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBhaW50Q29sdW1uSGVh
ZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwordm9pZCBS
ZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2lu
dCYgb2Zmc2V0KQoreworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUo
b2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnZhbHVlQ2hhbmdl
ZChTY3JvbGxiYXIqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEYXRhR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHBy
aXZhdGU6CiAgICAgSFRNTERhdGFHcmlkRWxlbWVudCogZ3JpZEVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRGF0YUdyaWRFbGVtZW50Kj4obm9kZSgpKTsgfQogCiAgICAg
Ly8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOw0KICAgICB2aXJ0dWFsIHZvaWQg
dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJl
dmlzaW9uIDUyMjE4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjA2LDkgKzEyMDYsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxU
b09mZnNldChpbnQgeCwgCiAgICAgCiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAgICAg
ICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNl
dCgpKTsKKyAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxz
ZSk7CiAgICAgICAgIGlmIChtX3ZCYXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1f
c2Nyb2xsWSk7CisgICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSwgZmFsc2Up
OwogICAgIH0KIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgpAQCAtMTQ1
NSw2ICsxNDU1LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0K
ICAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwg
dGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNv
ciBpbiB2aWV3LgogfQogCit2b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAg
ICAgbV9oQmFyLT5zZXRWYWx1ZShvZmZzZXQueCgpLCB0cnVlKTsKKyAgICBpZiAobV92QmFyKQor
ICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJl
bmRlckxheWVyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAvLyBVcGRhdGUgc2Ny
b2xsIHBvc2l0aW9uIGZyb20gc2Nyb2xsYmFycy4KQEAgLTE4OTAsNyArMTg5OCw3IEBAIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAgICAgaWYgKHBhZ2VTdGVw
IDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKICAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhj
U2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKICAgICAgICAgbV9oQmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKLSAgICAgICAgbV9oQmFy
LT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNj
cm9sbFhPZmZzZXQoKSwgZmFsc2UpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAg
IGludCBjbGllbnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwpAQCAtMjA1Miw3ICsyMDYw
LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQorYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBt
dWx0aXBsaWVyKQogewogICAgIGJvb2wgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlOwogICAg
IGJvb2wgZGlkVmVydGljYWxTY3JvbGwgPSBmYWxzZTsKQEAgLTIwNjEsMTMgKzIwNjksMTMgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbgogICAgICAgICBpZiAoZ3Jh
bnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkgewogICAgICAgICAgICAgLy8gU3BlY2lhbC1j
YXNlIGZvciB0aGUgU2Nyb2xsQnlEb2N1bWVudCBncmFudWxhcml0eS4gQSBkb2N1bWVudCBzY3Jv
bGwgY2FuIG9ubHkgYmUgdXAgCiAgICAgICAgICAgICAvLyBvciBkb3duIGFuZCBpbiBib3RoIGNh
c2VzIHRoZSBob3Jpem9udGFsIGJhciBnb2VzIGFsbCB0aGUgd2F5IHRvIHRoZSBsZWZ0LgotICAg
ICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKFNjcm9sbExlZnQs
IFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgZGlkSG9yaXpvbnRh
bFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1lbnQsIHNv
dXJjZSwgbXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGlkSG9yaXpv
bnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIpOworICAgICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcik7CiAgICAgfQogCiAg
ICAgaWYgKG1fdkJhcikKLSAgICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBtX3ZCYXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgZGlkVmVydGlj
YWxTY3JvbGwgPSBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2Us
IG11bHRpcGxpZXIpOwogCiAgICAgcmV0dXJuIChkaWRIb3Jpem9udGFsU2Nyb2xsIHx8IGRpZFZl
cnRpY2FsU2Nyb2xsKTsKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lv
biA1MjIxOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Myw3ICsyNzMsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOworICAgIGJvb2wgc2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQg
bXVsdGlwbGllcik7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKCk7CiAKICAgICB2b2lkIHJlc2l6ZShj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBJbnRTaXplJik7CkBAIC00OTEsNiArNDkx
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsg
CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbgogCiAgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNl
dDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZz
ZXQpOworICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIGZhbHNlKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTEwLDkgKzUxMCw5IEBAIGJvb2wgUmVuZGVyTGlzdEJv
eDo6bGlzdEluZGV4SXNWaXNpYmxlKGkKICAgICByZXR1cm4gaW5kZXggPj0gbV9pbmRleE9mZnNl
dCAmJiBpbmRleCA8IG1faW5kZXhPZmZzZXQgKyBudW1WaXNpYmxlSXRlbXMoKTsKIH0KIAotYm9v
bCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKikKK2Jvb2wg
UmVuZGVyTGlzdEJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBs
aWVyLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gbV92QmFyICYmIG1f
dkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcik7
CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRl
eCkKQEAgLTUyMyw2ICs1MjMsMTIgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQo
dW5zaWduZQogICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwog
fQogCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXIt
PnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZh
bHVlKCk7CkBAIC01NzgsNyArNTg0LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxU
b3AoaW50IG5ldwogICAgICAgICByZXR1cm47CiAgICAgbV9pbmRleE9mZnNldCA9IGluZGV4Owog
ICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgpOworICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKGluZGV4LCBmYWxzZSk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lv
biA1MjIxOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzUG9p
bnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUg
PSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2Rl
ID0gMCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gp
IGNvbnN0OwpAQCAtOTYsNiArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7
CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDUyMjE4KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODEyLDEyICs4MTIsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnNldFNjcgogICAgICAgICBpbm5lclRleHRFbGVtZW50KCktPnNldFNjcm9sbFRvcChu
ZXdUb3ApOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVy
LCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0
RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRp
cGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CisgICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNl
LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CiB9CiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQq
IGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplIGNvbnRyb2xTaXplKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IHNjcm9sbEhlaWdodCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUq
KiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2Rl
Kiogc3RvcE5vZGUgPSAwKTsKIAogICAgIGludCB0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgaW50IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0
OwpJbmRleDogV2ViQ29yZS93c2NyaXB0DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS93c2NyaXB0
CShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYkNvcmUvd3NjcmlwdAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsOCBAQCBpZiBidWlsZF9wb3J0ID09ICJ3eCI6CiAgICAgaWYgYnVpbGRpbmdfb25f
d2luMzI6CiAgICAgICAgIHdlYmNvcmVfZGlycy5leHRlbmQoWydwbGF0Zm9ybS93eC93eGNvZGUv
d2luJywgJ3BsdWdpbnMvd2luJ10pCiAgICAgICAgIHdlYmNvcmVfc291cmNlc1snd3gtd2luJ10g
PSBbCisgICAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwJworICAg
ICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnCiAgICAgICAgICAgICAg
ICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0IGNy
YXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNlIHRo
ZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAgICAg
ICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTApLgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMjIxKQorKysgV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA5LTEyLTE2ICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uDQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYNCisKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJ
bXBsLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDog
UGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiBzcmMvd2luL1dlYklucHV0
RXZlbnRGYWN0b3J5LmNwcDogVXBkYXRlIGNvbW1lbnRzIG5vdyB0aGF0IHdlIGhhdmUgc21vb3Ro
IHNjcm9sbGluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNl
V2hlZWxFdmVudCk6CisKIDIwMDktMTItMTUgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MywxMCArOTkz
LDEwIEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZChjb25zdCAKICAgICAvLyBt
b3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IGFuZCBtb3ZlVG9FbmRmRG9jdW1lbnQgYXJlIG9ubHkg
aGFuZGxlZCBieSBXZWJLaXQKICAgICAvLyBmb3IgZWRpdGFibGUgbm9kZXMuCiAgICAgaWYgKCFm
cmFtZSgpLT5lZGl0b3IoKS0+Y2FuRWRpdCgpICYmIHdlYk5hbWUgPT0gIm1vdmVUb0JlZ2lubmlu
Z09mRG9jdW1lbnQiKQotICAgICAgICByZXR1cm4gdmlld0ltcGwoKS0+cHJvcGFnYXRlU2Nyb2xs
KFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCkt
PnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCwgUHJvZ3JhbW1hdGlj
KTsKIAogICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPmNhbkVkaXQoKSAmJiB3ZWJOYW1lID09
ICJtb3ZlVG9FbmRPZkRvY3VtZW50IikKLSAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCktPnByb3Bh
Z2F0ZVNjcm9sbChTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgcmV0dXJu
IHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50
LCBQcm9ncmFtbWF0aWMpOwogCiAgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5k
KHdlYk5hbWUpLmV4ZWN1dGUodmFsdWUpOwogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAkocmV2aXNpb24gNTIyMTgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDIzICs3MzgsMjEgQEAgYm9vbCBXZWJW
aWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXlib2FyZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHByb3BhZ2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9s
bEdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlv
biwgc2Nyb2xsR3JhbnVsYXJpdHksIEtleXByZXNzKTsKIH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6
cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVs
YXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsR3JhbnVsYXJp
dHkgc2Nyb2xsR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2Nyb2xsU291cmNlIHNjcm9sbFNvdXJjZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2Vk
V2ViQ29yZUZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYm9vbCBzY3JvbGxIYW5kbGVkID0KLSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxEaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Ny
b2xsSGFuZGxlZCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xs
RGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgc2Nyb2xsU291cmNlKTsKICAgICBGcmFtZSog
Y3VycmVudEZyYW1lID0gZnJhbWU7CiAgICAgd2hpbGUgKCFzY3JvbGxIYW5kbGVkICYmIGN1cnJl
bnRGcmFtZSkgewotICAgICAgICBzY3JvbGxIYW5kbGVkID0gY3VycmVudEZyYW1lLT52aWV3KCkt
PnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICAgICAgc2Nyb2xs
SGFuZGxlZCA9IGN1cnJlbnRGcmFtZS0+dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBz
Y3JvbGxHcmFudWxhcml0eSwgc2Nyb2xsU291cmNlKTsKICAgICAgICAgY3VycmVudEZyYW1lID0g
Y3VycmVudEZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgIH0KICAgICByZXR1cm4gc2Nyb2xs
SGFuZGxlZDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gNTIy
MTgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2NSw3ICsyNjUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUcmllcyB0byBzY3JvbGwgYSBm
cmFtZSBvciBhbnkgcGFyZW50IG9mIGEgZnJhbWUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldwog
ICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHBy
b3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdy
YW51bGFyaXR5LCBXZWJDb3JlOjpTY3JvbGxTb3VyY2UpOwogCiAgICAgLy8gSEFDSzogY3VycmVu
dElucHV0RXZlbnQoKSBpcyBmb3IgQ2hyb21lQ2xpZW50SW1wbDo6c2hvdygpLCB1bnRpbCB3ZSBj
YW4KICAgICAvLyBmaXggV2ViS2l0IHRvIHBhc3MgZW5vdWdoIGluZm9ybWF0aW9uIHVwIGludG8g
Q2hyb21lQ2xpZW50OjpzaG93KCkgc28gd2UKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2lu
L1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gNTIyMTgpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5NiwxMyArMzk2LDE2IEBAIFdlYk1vdXNlV2hlZWxFdmVudCBXZWJJbnB1dEV2
ZW50RmFjdG9yeToKIAogICAgIC8vIENvbnZlcnQgd2hlZWwgZGVsdGEgYW1vdW50IHRvIGEgbnVt
YmVyIG9mIHBpeGVscyB0byBzY3JvbGwuCiAgICAgLy8KLSAgICAvLyBIb3cgbWFueSBwaXhlbHMg
c2hvdWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEdlY2tvIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUK
LSAgICAvLyBjdXJyZW50IGxpbmUsIHdoaWNoIG1lYW5zIHNjcm9sbCBkaXN0YW5jZSBjaGFuZ2Vz
IGFzIHlvdSBnbyB0aHJvdWdoIHRoZQotICAgIC8vIHBhZ2Ugb3IgZ28gdG8gZGlmZmVyZW50IHBh
Z2VzLiAgSUUgNyBpcyB+NTAgcHgvbGluZSwgYWx0aG91Z2ggdGhlIHZhbHVlCi0gICAgLy8gc2Vl
bXMgdG8gdmFyeSBzbGlnaHRseSBieSBwYWdlIGFuZCB6b29tIGxldmVsLiAgU2luY2UgSUUgNyBo
YXMgYSBzbW9vdGhpbmcKLSAgICAvLyBhbGdvcml0aG0gb24gc2Nyb2xsaW5nLCBpdCBjYW4gZ2V0
IGF3YXkgd2l0aCBzbGlnaHRseSBsYXJnZXIgc2Nyb2xsIHZhbHVlcwotICAgIC8vIHdpdGhvdXQg
ZmVlbGluZyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMCBweCBwZXIgdGhyZWUgbGluZXMgKHRoZSBk
ZWZhdWx0Ci0gICAgLy8gc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGlj
aykuCisgICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVyIGxpbmU/ICBG
aXJlZm94IHVzZXMgdGhlIGhlaWdodCBvZgorICAgIC8vIHRoZSBjdXJyZW50IGxpbmUsIHdoaWNo
IG1lYW5zIHNjcm9sbCBkaXN0YW5jZSBjaGFuZ2VzIGFzIHlvdSBnbyB0aHJvdWdoCisgICAgLy8g
dGhlIHBhZ2Ugb3IgZ28gdG8gZGlmZmVyZW50IHBhZ2VzLiAgSUUgOCBpcyB+NjAgcHgvbGluZSwg
YWx0aG91Z2ggdGhlCisgICAgLy8gdmFsdWUgc2VlbXMgdG8gdmFyeSBzbGlnaHRseSBieSBwYWdl
IGFuZCB6b29tIGxldmVsLiAgQWxzbywgSUUgZGVmYXVsdHMKKyAgICAvLyB0byBzbW9vdGggc2Ny
b2xsaW5nIHdoaWxlIEZpcmVmb3ggZG9lc24ndCwgc28gaXQgY2FuIGdldCBhd2F5IHdpdGgKKyAg
ICAvLyBzb21ld2hhdCBsYXJnZXIgc2Nyb2xsIHZhbHVlcyB3aXRob3V0IGZlZWxpbmcgYXMgamVy
a3kuICBIZXJlIHdlIHVzZSAxMDAKKyAgICAvLyBweCBwZXIgdGhyZWUgbGluZXMgKHRoZSBkZWZh
dWx0IHNjcm9sbCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsCisgICAgLy8gdGljayku
ICBFdmVuIHRob3VnaCB3ZSBoYXZlIHNtb290aCBzY3JvbGxpbmcsIHdlIGRvbid0IG1ha2UgdGhp
cyBhcyBsYXJnZQorICAgIC8vIGFzIElFIGJlY2F1c2Ugc3ViamVjdGl2ZWx5IElFIGZlZWxzIGxp
a2UgaXQgc2Nyb2xscyBmYXJ0aGVyIHRoYW4geW91IHdhbnQKKyAgICAvLyB3aGlsZSByZWFkaW5n
IGFydGljbGVzLgogICAgIHN0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5l
ID0gMTAwLjBmIC8gMy4wZjsKICAgICB3aGVlbERlbHRhIC89IFdIRUVMX0RFTFRBOwogICAgIGZs
b2F0IHNjcm9sbERlbHRhID0gd2hlZWxEZWx0YTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9n
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMjIxKQor
KysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAwOS0xMi0xNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3Jv
bGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAq
IHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21vdmVfY3Vyc29yKToKKwogMjAwOS0xMi0x
NiAgRGFuIFdpbnNoaXAgIDxkYW53QGdub21lLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEuCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzMsOCArOTczLDggQEAgc3RhdGljIGdib29sZWFuIHdl
YmtpdF93ZWJfdmlld19yZWFsX21vdgogICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
d2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFu
dWxhcml0eSkpCi0gICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKKyAgICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3co
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpKQorICAgICAgICBmcmFtZS0+dmlldygp
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MjIyMSkKKysrIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMTItMTYgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5k
IGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmll
dy5tbTogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKC1bV2ViRnJhbWVW
aWV3IF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmdyYW51bGFyaXR5OnNvdXJjZTpdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnRdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0VuZE9mRG9jdW1lbnRdKToKKyAgICAgICAg
KC1bV2ViRnJhbWVWaWV3IF9wYWdlVmVydGljYWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVW
aWV3IF9wYWdlSG9yaXpvbnRhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9s
bExpbmVWZXJ0aWNhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbExpbmVI
b3Jpem9udGFsbHk6XSk6CisKIDIwMDktMTItMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZVZpZXcubW0JKHJldmlzaW9uIDUyMjE4KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTE5LDcgKzUxOSw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KICAgICBbc3VwZXIgdmlld0Rp
ZE1vdmVUb1dpbmRvd107CiB9CiAKLS0gKEJPT0wpX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246
KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFNjcm9sbEdyYW51bGFyaXR5
KWdyYW51bGFyaXR5CistIChCT09MKV9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvbGxE
aXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihTY3JvbGxHcmFudWxhcml0eSlncmFudWxh
cml0eSBzb3VyY2U6KFNjcm9sbFNvdXJjZSlzb3VyY2UKIHsKICAgICAvLyBzY3JvbGxpbmcgb3Zl
cmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRN
TFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1bWVudFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhU
TUxWaWV3IGNsYXNzXV0pCkBAIC01MjcsMTIgKzUyNywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
YWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJG
cmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4g
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFy
aXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UpOwogfQogCiAtIChCT09MKV9zY3JvbGxUb0Jl
Z2lubmluZ09mRG9jdW1lbnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJl
Y3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtz
ZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9s
bEJ5RG9jdW1lbnQgc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBp
ZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkKICAgICAgICAgcmV0dXJuIE5POwpAQCAtNTQyLDcg
KzU0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAo
Qk9PTClfc2Nyb2xsVG9FbmRPZkRvY3VtZW50CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0p
CisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3Jh
bnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBzb3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1
cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKQogICAgICAgICByZXR1cm4g
Tk87CkBAIC02MTksNyArNjE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNs
YXNzKE5TTQogCiAtIChCT09MKV9wYWdlVmVydGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChb
c2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93
biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZs
b3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3Jv
bGxCeVBhZ2Ugc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKICAg
ICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkKQEAgLTYzNSw3ICs2MzUsNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgICAgIHJldHVybiBZRVM7CiAK
ICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBf
bGFyZ2VzdENoaWxkV2l0aFNjcm9sbEJhcnNdIF9wYWdlSG9yaXpvbnRhbGx5OmxlZnRdOworICAg
ICAgICByZXR1cm4gW1tzZWxmIF9sYXJnZXN0Q2hpbGRXaXRoU2Nyb2xsQmFyc10gX3BhZ2VIb3Jp
em9udGFsbHk6bGVmdCBzb3VyY2U6S2V5cHJlc3NdOwogICAgIAogICAgIGZsb2F0IGRlbHRhID0g
W3NlbGYgX2hvcml6b250YWxQYWdlU2Nyb2xsRGlzdGFuY2VdOwogICAgIHJldHVybiBbc2VsZiBf
c2Nyb2xsSG9yaXpvbnRhbGx5Qnk6bGVmdCA/IC1kZWx0YSA6IGRlbHRhXTsKQEAgLTY0Myw3ICs2
NDMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAKIC0gKEJP
T0wpX3Njcm9sbExpbmVWZXJ0aWNhbGx5OihCT09MKXVwCiB7Ci0gICAgaWYgKFtzZWxmIF9zY3Jv
bGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duIGdyYW51bGFy
aXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0
aW9uOnVwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZSBz
b3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBf
aGFzU2Nyb2xsQmFyc10pCkBAIC02NTUsNyArNjU1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFk
ZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAtIChCT09MKV9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5OihC
T09MKWxlZnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVm
dCA/IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQor
ICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVm
dCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZSBzb3VyY2U6S2V5cHJlc3Nd
KQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaGFzU2Nyb2xsQmFyc10p
CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA1MjIxOCkKKysrIFdlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM2LDcgKzEzMzYsNyBAQCBib29sIFFX
ZWJQYWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xsaW5nKFFLCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBLZXlwcmVzcyk7CiB9CiAKICNp
ZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKSW5kZXg6IFdlYktpdC9x
dC9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA1MjIyMSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAwOS0xMi0xNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNt
b290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKwor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMu
CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9sbGluZyk6CisKIDIwMDktMTIt
MTQgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJL
aXQvd2luL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1MjIyMSkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMTItMTYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNl
cy4KKyAgICAgICAgKFdlYlZpZXc6OmtleURvd24pOgorCiAyMDA5LTEyLTE0ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJv
YmVuLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktp
dC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDUyMjE4KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwOSw3ICsxODA5LDcgQEAgYm9vbCBXZWJWaWV3Ojpr
ZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5QwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKTsK
IH0KIAogYm9vbCBXZWJWaWV3OjprZXlQcmVzcyhXUEFSQU0gY2hhckNvZGUsIExQQVJBTSBrZXlE
YXRhLCBib29sIHN5c3RlbUtleURvd24pCg==
</data>
<flag name="review"
          id="26982"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54744</attachid>
            <date>2010-04-29 15:46:19 -0700</date>
            <delta_ts>2010-08-24 14:34:45 -0700</delta_ts>
            <desc>patch v3.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>79588</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTMgQEAKKzIwMTAtMDQtMjkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFdpbmRvd3MgU2Nyb2xsQW5pbWF0
b3IuCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEFkZCBXaW5kb3dzIFNjcm9s
bEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIFdpbmRvd3MgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZCBXaW5k
b3dzIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkIHN0dWIgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogZG9tL0VsZW1lbnQu
Y3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2Nyb2xsQnlVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbFpvb21Gb3JSZW5k
ZXJlcik6IEZpeCBzdHlsZSBndWlkZSB2aW9sYXRpb24uCisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29y
ZTo6c2Nyb2xsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbE92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZl
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IFBsdW1iIHNjcm9sbCBjb21t
YW5kIHNvdXJjZXMuCisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHA6IFBsdW1i
IHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVj
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vUG9wdXBNZW51Lmg6IFBsdW1iIG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb24uCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDog
QWRkZWQuICBDb250YWlucyBzdHViIGltcGwgZm9yIG5vbi1XaW5kb3dzLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6On5TY3JvbGxBbmltYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5Q3JlYXRlV2l0aENsaWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUNyZWF0ZVdpdGhDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJB
eGlzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5p
bWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46On5TY3JvbGxB
bmltYXRvcldpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6cG9zc2li
bHlBbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oOiBBZGQgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNv
cmU6Oik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IFBsdW1iIG5ldyBTY3Jv
bGxiYXJDbGllbnQgZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLiAgQWxs
b3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xp
ZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRvciB0byBoYW5kbGUgc2Ny
b2xscyBpZiBkZXNpcmVkLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJl
c3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFy
Lmg6IEFsbG93IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxzIGlmIGRlc2lyZWQuICBQ
bHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJh
ckNsaWVudC5oOiBBZGQgaG9va3MgZm9yIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhckNsaWVudDo6cG9zc2libHlBbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRNZW51KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJh
ckNsaWVudCBmdW5jdGlvbi4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAg
IChXZWJDb3JlOjpQb3B1cE1lbnU6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojp3bmRQcm9jKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckRhdGFHcmlkLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogUGx1bWIgbmV3IFNj
cm9sbGJhckNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNv
bW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFy
Q2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAg
UGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6IFBsdW1i
IHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICogd3NjcmlwdDogQWRkIFdpbmRvd3Mg
U2Nyb2xsQW5pbWF0b3IuCisKIDIwMTAtMDQtMjkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTQ2OCw4ICsxNDY4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BhZ2Uv
UGFnZS5oIFwKIAlXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBcCiAJV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5oIFwKLSAgV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgXAot
ICBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmggXAorCVdlYkNvcmUvcGFnZS9Q
YWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERl
ZmVycmVyLmggXAogCVdlYkNvcmUvcGFnZS9QbHVnaW5IYWx0ZXIuY3BwIFwKIAlXZWJDb3JlL3Bh
Z2UvUGx1Z2luSGFsdGVyLmggXAogCVdlYkNvcmUvcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBc
CkBAIC0xNTY4LDYgKzE1NjgsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxh
dGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZm
ZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVz
LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oIFwKQEAgLTIwNTAsNiArMjA1MSw4IEBAIGVuZGlmCiAKIGlmIFRBUkdF
VF9XSU4zMgogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yV2luLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwK
IAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBcCiAJV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCiAJV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1ODUy
MikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yODkzLDYgKzI4
OTMsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9TY3JvbGxUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5oJywKSW5kZXg6IFdlYkNv
cmUvd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dzY3JpcHQJKHJldmlzaW9uIDU4NTIy
KQorKysgV2ViQ29yZS93c2NyaXB0CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBAIGlm
IGJ1aWxkX3BvcnQgPT0gInd4IjoKICAgICBpZiBidWlsZGluZ19vbl93aW4zMjoKICAgICAgICAg
d2ViY29yZV9kaXJzLmV4dGVuZChbJ3BsYXRmb3JtL3d4L3d4Y29kZS93aW4nLCAncGx1Z2lucy93
aW4nXSkKICAgICAgICAgd2ViY29yZV9zb3VyY2VzWyd3eC13aW4nXSA9IFsKKyAgICAgICAgICAg
ICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnCisgICAgICAgICAgICAgICAncGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcKICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwJywKICAgICAgICAgICAgICAgICMg
d3hUaW1lciBvbiBXaW5kb3dzIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBlYXQgY3Jhc2hl
cyBpbiBjYWxsYmFja3MKICAgICAgICAgICAgICAgICMgc28gd2UgbmVlZCB0byB1c2UgdGhlIFdp
biBwb3J0J3MgaW1wbGVtZW50YXRpb24gdW50aWwgdGhlIHd4IGJ1ZyBmaXggaXMKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNTg1MjIpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkxLDggKzEwOTEsMTAgQEAKICAg
ICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnUG9zaXhcXC5j
cHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL29wZW50eXBlLyddLAotICAgICAgICAg
ICAgWydpbmNsdWRlJywgJy9UcmFuc3BhcmVuY3lXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBb
J2luY2x1ZGUnLCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydp
bmNsdWRlJywgJy9TY3JvbGxBbmltYXRvcldpblxcLmgkJ10sCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAnL1NraWFGb250V2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJy9U
cmFuc3BhcmVuY3lXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgICAnZGVmaW5l
cyc6IFsKICAgICAgICAgICAgICMgTWF0Y2ggU2FmYXJpIGFuZCBNb3ppbGxhIG9uIFdpbmRvd3Mu
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU4NTIy
KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjIxMDMsNiArMjIxMDMsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3IuaCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XFNjcm9sbEFuaW1hdG9yV2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yV2luLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxiYXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1ODUyMikKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
NzI1LDYgKzQ3MjUsNyBAQAogCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIu
aCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICov
OyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2
RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICov
OyB9OworICAgIAlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdEMTBE
OTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovOyB9OwogCQlDRTE3MkUwMTExMzZF
OENFMDA2MkE1MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENFMTcyRTAwMTEzNkU4Q0UwMDYyQTUzMyAvKiBab29tTW9kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFNEMwMEU0
MTBGNkY3QkEwMENBMzhGNSAvKiBIVE1MTm9TY3JpcHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNEMwMEUzMTBGNkY3QkEwMENBMzhG
NSAvKiBIVE1MTm9TY3JpcHRFbGVtZW50LmNwcCAqLzsgfTsKIAkJQ0U0QzAwRTYxMEY2RjdDMTAw
Q0EzOEY1IC8qIEhUTUxOb1NjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNEMwMEU1MTBGNkY3QzEwMENBMzhGNSAvKiBIVE1MTm9T
Y3JpcHRFbGVtZW50LmggKi87IH07CkBAIC0xMDExMiw2ICsxMDExMyw3IEBACiAJCUM1RUJERDgx
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZE
NzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBF
NkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UxNzJF
MDAxMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFpvb21Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNEMw
MEUzMTBGNkY3QkEwMENBMzhGNSAvKiBIVE1MTm9TY3JpcHRFbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxOb1NjcmlwdEVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTRDMDBFNTEwRjZGN0MxMDBDQTM4RjUgLyogSFRN
TE5vU2NyaXB0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1M
Tm9TY3JpcHRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ4MSw2
ICsxNTQ4Myw3IEBACiAJCQkJQkMzQkUxMkEwRTk4MDkyRjAwODM1NTg4IC8qIFBvcHVwTWVudVN0
eWxlLmggKi8sCiAJCQkJRTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZl
ci5oICovLAogCQkJCTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29wVGltZXIuaCAq
LywKKwkJCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLywK
IAkJCQlCQzdCMkFGODA0NTA4MjQxMDBBODAwMEYgLyogU2Nyb2xsYmFyLmggKi8sCiAJCQkJQkM5
QkM2NEQwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovLAogCQkJCUJDOEI4
NTRBMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oICovLApAQCAtMTgzNjQsNiAr
MTgzNjcsNyBAQAogCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMEUyMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNj
cmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZD
RTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1
RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCQzY0RTBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzhCODU0QjBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICov
LApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEVsZW1lbnQ6OnNjcm9s
bEJ5VW5pdHMoaW50IHVuaXRzLCBTCiAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gU2Nyb2xs
VXA7CiAgICAgICAgICAgICAgICAgdW5pdHMgPSAtdW5pdHM7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0b1JlbmRlckJveChyZW5kKS0+bGF5ZXIoKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIHVuaXRzKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQm94KHJlbmQpLT5sYXllcigp
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgUHJvZ3JhbW1hdGljLCB1bml0cyk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0yOTUsOCArMjk1LDggQEAgc3RhdGljIGZsb2F0IGxvY2Fs
Wm9vbUZvclJlbmRlcmVyKFJlbmRlcgogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgdGhlIHdyb25n
IHRoaW5nIGlmIHR3byBvcHBvc2luZyB6b29tcyBhcmUgaW4gZWZmZWN0IGFuZCBjYW5jZWxlZCBl
YWNoCiAgICAgLy8gb3RoZXIgb3V0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIHRoYXQgd2UnZCBo
YXZlIHRvIGNyYXdsIHVwIHRoZSB3aG9sZSByZW5kZXIgdHJlZSBldmVyeQogICAgIC8vIHRpbWUg
KG9yIHN0b3JlIGFuIGFkZGl0aW9uYWwgYml0IGluIHRoZSBSZW5kZXJTdHlsZSB0byBpbmRpY2F0
ZSB0aGF0IGEgem9vbSB3YXMgc3BlY2lmaWVkKS4KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gMS4w
ZjsKLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7
CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CisgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkgIT0gMSkgewogICAgICAgICAvLyBOZWVkIHRvIGZpbmQgdGhlIG5lYXJl
c3QgZW5jbG9zaW5nIFJlbmRlck9iamVjdCB0aGF0IHNldCB1cAogICAgICAgICAvLyBhIGRpZmZl
cmluZyB6b29tLCBhbmQgdGhlbiB3ZSBkaXZpZGUgb3VyIHJlc3VsdCBieSBpdCB0byBlbGltaW5h
dGUgdGhlIHpvb20uCiAgICAgICAgIFJlbmRlck9iamVjdCogcHJldiA9IHJlbmRlcmVyOwpJbmRl
eDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxMyArMTI3LDEzIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHQKICAgICBmbG9hdCBhYnNEZWx0YSA9
IGRlbHRhID4gMCA/IGRlbHRhIDogLWRlbHRhOwogICAgIAogICAgIGlmIChncmFudWxhcml0eSA9
PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwo
ZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xs
QnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94
LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlv
biwgU2Nyb2xsQnlQYWdlLCBXaGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKIAogICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
IAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkKLSAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7Cisg
ICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAgPyBuZWdhdGl2ZURp
cmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVsLCBXaGVlbCwgYWJzRGVs
dGEsIHN0b3BOb2RlKTsKICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtOTUwLDcg
Kzk1MCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZXRNb3VzZVByZXNzTm9kZShQYXMKICAgICBt
X21vdXNlUHJlc3NOb2RlID0gbm9kZTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92
ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQorYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ug
c291cmNlKQogewogICAgIE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2Vk
Tm9kZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTk1OCw3ICs5NTgsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgCiAgICAgaWYgKG5vZGUpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKHIgJiYg
IXItPmlzTGlzdEJveCgpICYmIHItPmVuY2xvc2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSkpIHsKKyAgICAgICAgaWYgKHIgJiYgIXItPmlzTGlzdEJveCgpICYmIHItPmVu
Y2xvc2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlKSkgewog
ICAgICAgICAgICAgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTk2NywxNCArOTY3LDE0IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
RXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3Jv
bGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKLSAgICBib29sIGhhbmRsZWQg
PSBzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBib29sIGhhbmRs
ZWQgPSBzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UpOwogICAg
IGlmICghaGFuZGxlZCkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2ZyYW1lOwogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAg
ICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSkgOiBmYWxzZTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSkgOiBmYWxzZTsKICAgICAgICAgICAgIGZy
YW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgICAgIH0gd2hpbGUgKCFoYW5kbGVk
ICYmIGZyYW1lKTsKICAgICAgfQpAQCAtMjU5NCw3ICsyNTk0LDcgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6OmRlZmF1bHRTcGFjZUV2ZW50SGFuZAogdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFj
ZUV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uID0gZXZlbnQtPnNoaWZ0S2V5KCkgPyBTY3JvbGxVcCA6IFNjcm9sbERvd247
Ci0gICAgaWYgKHNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKSkgeworICAg
IGlmIChzY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgS2V5cHJlc3MpKSB7
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMjYwMyw3ICsyNjAzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFj
ZUV2ZW50SGFuZAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHZp
ZXctPnNjcm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSkpCisgICAgaWYgKHZpZXctPnNjcm9s
bChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgS2V5cHJlc3MpKQogICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gNTg1
MjIpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCw5ICsxMzAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFy
Z2V0Tm9kZShOb2RlKik7CiAKLSAgICBib29sIHNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAKLSAgICBi
b29sIHNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkp
OworICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQogICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2RlKE5vZGUqLCBjb25zdCBJbnRQb2ludCYpIGNv
bnN0OyAvLyAtd2Via2l0LXVzZXItZHJhZyA9PSBhdXRvCkluZGV4OiBXZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw5IEBAIGJvb2wgaGFzT2Zm
c2NyZWVuUmVjdChOb2RlKiBub2RlKQogfQogCiAvLyBJbiBhIGJvdHRvbS11cCB3YXksIHRoaXMg
bWV0aG9kIHRyaWVzIHRvIHNjcm9sbCB8ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0aW9uCi0vLyB8
ZGlyZWN0aW9ufCwgZ29pbmcgdXAgaW4gdGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5IGluIGNhc2Ug
aXQgZG9lcyBub3Qgc3VjY2VlZC4KKy8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUgZnJh
bWUgdHJlZSBoaWVyYXJjaHkgaW4gY2FzZSBpdCBkb2VzIG5vdAorLy8gc3VjY2VlZC4KKy8vIE5P
VEU6IFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgY2FsbGVyIGlzIHJlc3BvbmRpbmcgdG8gYSBr
ZXlib2FyZCBldmVudC4KIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTQ2OCw3ICs0NzAs
NyBAQCBib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5z
Y3JvbGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSk7CisgICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxCeUxpbmUsIEtleXByZXNzKTsKIH0KIAogdm9pZCBzY3JvbGxJbnRvVmlldyhF
bGVtZW50KiBlbGVtZW50KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCShyZXZpc2lvbiA1ODUyMikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2
ICsxNTAsNyBAQCBwcml2YXRlOgogICAgIFF0QWJzdHJhY3RXZWJQb3B1cCogbV9wb3B1cDsKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2Nyb2xsQW5pbWF0b3JfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJT
Y3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTY3JvbGxiYXJDbGllbnQ7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgU2Nyb2xsQW5pbWF0b3IqIHBvc3NpYmx5Q3JlYXRlV2l0aENs
aWVudChTY3JvbGxiYXJDbGllbnQqKTsKKworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yKCkg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcG9zc2libHlBbmltYXRlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllZFN0ZXAsIGZsb2F0IG1heFBvcywgYm9vbCYgY2hhbmdlZFNvbWV0aGluZykgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9w
QW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCkgeyB9Cit9OworCisjaWYgIU9T
KFdJTkRPV1MpCitTY3JvbGxBbmltYXRvciogU2Nyb2xsQW5pbWF0b3I6OnBvc3NpYmx5Q3JlYXRl
V2l0aENsaWVudChTY3JvbGxiYXJDbGllbnQqKQoreworICAgIHJldHVybiAwOworfQorI2VuZGlm
CisKK30KKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvcldpbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yV2luLmgiCisKKyNpbmNsdWRlICJTY3Jv
bGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBzdGF0aWMKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6cG9zc2li
bHlDcmVhdGVXaXRoQ2xpZW50KFNjcm9sbGJhckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVy
biBuZXcgU2Nyb2xsQW5pbWF0b3JXaW4oY2xpZW50KTsKK30KKworY29uc3QgZG91YmxlIFNjcm9s
bEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKKworU2Nyb2xsQW5pbWF0
b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFyZW50
KQorICAgIDogbV9jdXJyZW50UG9zKDApCisgICAgLCBtX2Rlc2lyZWRQb3MoMCkKKyAgICAsIG1f
Y3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX2Rlc2lyZWRWZWxvY2l0eSgwKQorICAgICwgbV9s
YXN0QW5pbWF0aW9uVGltZSgwKQorICAgICwgbV9hbmltYXRpb25UaW1lcihwYXJlbnQsICZTY3Jv
bGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworCitTY3JvbGxBbmlt
YXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCisgICAg
OiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2hvcml6b250YWxEYXRhKHRoaXMpCisgICAgLCBt
X3ZlcnRpY2FsRGF0YSh0aGlzKQoreworfQorCitTY3JvbGxBbmltYXRvcldpbjo6flNjcm9sbEFu
aW1hdG9yV2luKCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9u
dGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRh
KTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgZmxv
YXQgbWF4UG9zLCBib29sJiBjaGFuZ2VkU29tZXRoaW5nKQoreworICAgIC8vIERvbid0IGFuaW1h
dGUganVtcGluZyB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAg
aWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0aWJsZSBzY3JvbGwuICBDYWxjdWxhdGUgdGhl
IHNjcm9sbCBkZWx0YS4KKyAgICBjaGFuZ2VkU29tZXRoaW5nID0gZmFsc2U7CisgICAgUGVyQXhp
c0RhdGEqIGRhdGEgPSAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3Jv
bGxEb3duKSA/ICZtX3ZlcnRpY2FsRGF0YSA6ICZtX2hvcml6b250YWxEYXRhOworICAgIGZsb2F0
IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKGRhdGEtPm1fZGVzaXJlZFBvcyArIG11bHRpcGxp
ZWRTdGVwLCBtYXhQb3MpLCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVzaXJl
ZFBvcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gbmV3
UG9zOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVsb2NpdHkuCisgICAgaWYg
KGRhdGEtPm1fY3VycmVudFBvcyA9PSBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGZsb2F0IGFuaW1hdGlvblN0ZXA7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0
aW5nID0gZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIGlmICgoc291cmNl
ICE9IEtleXByZXNzKSAmJiAoc291cmNlICE9IFdoZWVsKSkgeworICAgICAgICAvLyBXaGVuIGF1
dG9zY3JvbGxpbmcsIHRoZSBzY3JvbGxiYXIncyBhdXRvc2Nyb2xsIHRpbWVyIHdpbGwgY2FsbCB1
cyB0bworICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8
IGV2ZXJ5CisgICAgICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Ny
b2xsVGltZXJEZWxheSgpIHNlY29uZHMuICBJZiB3ZQorICAgICAgICAvLyBzZXQgdGhlIGRlc2ly
ZWQgdmVsb2NpdHkgdG8gZXhhY3RseSB0aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbAor
ICAgICAgICAvLyBuZWl0aGVyIHJhY2UgYWhlYWQgKGFuZCB0aGVuIGhhdmUgdG8gc2xvdyBkb3du
KSBub3IgaW5jcmVhc2luZ2x5IGxhZworICAgICAgICAvLyBiZWhpbmQsIGJ1dCB3aWxsIGJlIHNt
b290aCBhbmQgc3luY2hyb25pemVkLgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlIHRoYXQg
YmVjYXVzZSBvZiB0aGUgYWNjZWxlcmF0aW9uIHBlcmlvZCwgdGhlIGN1cnJlbnQgcG9zaXRpb24K
KyAgICAgICAgLy8gd2lsbCBsYWcgdGhlIGRlc2lyZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50
IGFtb3VudCAoc2VlIGNvbW1lbnRzIG9uCisgICAgICAgIC8vIGFuaW1hdGVTY3JvbGwoKSk7IHRo
ZSBleGFjdCBhbW91bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2
KDAuNXRBICsgdEQpCisgICAgICAgIC8vIFdoZXJlCisgICAgICAgIC8vICAgdiA9IFRoZSBzdGVh
ZHktc3RhdGUgdmVsb2NpdHksCisgICAgICAgIC8vICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8vICAg
dEEgPSBhY2NlbGVyYXRpb25UaW1lKCkKKyAgICAgICAgLy8gICB0RCA9IFRoZSB0aW1lIHdlIHBy
ZXRlbmQgaGFzIGFscmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRpbmcgdG8KKyAgICAgICAgLy8gICAg
ICAgIHNjcm9sbCwgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgICAgIC8vCisgICAgICAgIC8v
IFRoaXMgbGFnIHByb3ZpZGVzIHNvbWUgYnVmZmVyIGFnYWluc3QgdGltZXIgaml0dGVyIHNvIHdl
J3JlIGxlc3MKKyAgICAgICAgLy8gbGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBh
bmQgc3RvcCAoYW5kIHRodXMgaGF2ZSB0bworICAgICAgICAvLyByZS1hY2NlbGVyYXRlLCBjYXVz
aW5nIGEgdmlzaWJsZSBoaXRjaCkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQKKyAgICAgICAg
Ly8gYXV0b3Njcm9sbCBpbmNyZW1lbnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBzdGVwOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBrZXlib2FyZCBhbmQgd2hlZWwgc2Nyb2xscywg
d2UgZG9uJ3Qga25vdyB3aGVuIHRoZSBuZXh0IGluY3JlbWVudAorICAgICAgICAvLyB3aWxsIGJl
IHJlcXVlc3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBm
YXIKKyAgICAgICAgLy8gYXdheSBmcm9tIHRoZSB0YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVu
IGZvciBrZXlib2FyZC93aGVlbCBldmVudHMKKyAgICAgICAgLy8gdGhhdCBjb21lIGZhc3RlciB0
aGFuIHRoZSBhdXRvc2Nyb2xsIGRlbGF5LCB3ZSdsbCBhc3ltcHRvdGljYWxseQorICAgICAgICAv
LyBhcHByb2FjaCB0aGUgdmVsb2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3
aXRoIHRoZSB1c2VyJ3MKKyAgICAgICAgLy8gYWN0aW9uczsgZm9yIGV2ZW50cyB0aGF0IGNvbWUg
c2xvd2VyLCB3ZSdsbCBzY3JvbGwgb25lIGluY3JlbWVudCBhbmQKKyAgICAgICAgLy8gdGhlbiBw
YXVzZSB1bnRpbCB0aGUgbmV4dCBldmVudCBmaXJlcy4gIFRoaXMgbGF0dGVyIGJlaGF2aW9yIG1l
YW5zCisgICAgICAgIC8vIHRoYXQgc2luZ2xlIGtleXByZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdp
bGwgaGF2ZSB0aGUgc2FtZSBhcHBlYXJhbmNlCisgICAgICAgIC8vIGFzIHNpbmdsZSBwcmVzc2Vz
IG9mIGEgc2Nyb2xsYmFyIHBhcnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBhYnMobmV3UG9z
IC0gZGF0YS0+bV9jdXJyZW50UG9zKTsKKyAgICAgICAgLy8gSWYgYSBrZXkgaXMgaGVsZCBkb3du
IChvciB0aGUgd2hlZWwgY29udGludWFsbHkgc3B1biksIHRoZW4gb25jZSB3ZQorICAgICAgICAv
LyBoYXZlIHJlYWNoZWQgYSB2ZWxvY2l0eSBjbG9zZSB0byB0aGUgc3RlYWR5LXN0YXRlIHZlbG9j
aXR5LCB3ZSdyZQorICAgICAgICAvLyBsaWtlbHkgdG8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9u
IGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1lIHdlJ2QKKyAgICAgICAgLy8gZXhwZWN0IHRoZSBuZXh0
IGluY3JlbWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVzZSBpdCBsZWFkcyB0bworICAgICAgICAv
LyBoaXRjaGluZyBhcyBkZXNjcmliZWQgYWJvdmUuICBTbyB3ZSB0cmltIHRoZSB2ZWxvY2l0eSBz
bGlnaHRseSBzbworICAgICAgICAvLyB0aGF0IHdlIGhhdmUgYSBzbWFsbCBidWZmZXIsIHRvIGRl
Y3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIHRoaXMKKyAgICAgICAgLy8gb2NjdXJyaW5nLiAgTm90
ZSB0aGF0IHdlIHdvbid0IGZhbGwgc3RlYWRpbHkgZnVydGhlciBiZWhpbmQgaGVyZSwKKyAgICAg
ICAgLy8gYmVjYXVzZSBpbiBzdWJzZXF1ZW50IHVwZGF0ZXMgd2UnbGwgYmUgY2FsY3VsYXRpbmcg
b3VyIHZlbG9jaXR5IGJhc2VkCisgICAgICAgIC8vIG9uIGEgbGFyZ2VyIGRlc2lyZWQgc3RlcCAt
LSBzbyB0aGUgcHJhY3RpY2FsIGVmZmVjdCBpcyB0aGF0IHdlIGxhZyBieQorICAgICAgICAvLyBh
IHNtYWxsLCBjb25zdGFudCBhbW91bnQgZGVwZW5kaW5nIG9uIHRoZSB0cmltIHZhbHVlIGFuZCB0
aGUgcmF0ZSBhdAorICAgICAgICAvLyB3aGljaCBpbmNyZW1lbnRzIG9jY3VyIGNvbXBhcmVkIHRv
IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGRlbGF5LiAgVGhlCisgICAgICAgIC8vIGV4YWN0IGFtb3Vu
dCBpcyBnaXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgociAvIGspIC0gMSkK
KyAgICAgICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICByID0gVGhlIHJhdGlvIG9mIHRoZSBhdXRv
c2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAgICAgLy8gICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQorICAgICAgICAvLyAg
ICAgICBrZXkvd2hlZWwgcmVwZWF0IGRlbGF5IChpLmUuID4gMSB3aGVuIGtleXMgcmVwZWF0IGZh
c3RlcikKKyAgICAgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4g
YmVsb3cKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgd2Ugd2FudCB0byBhY3QgYXMgbXVjaCBs
aWtlIGF1dG9zY3JvbGxpbmcgYXMgcG9zc2libGUsIHRoZW4gd2UKKyAgICAgICAgLy8gY2hvb3Nl
IGsgc3VjaCB0aGF0IGxhZyBpcyB0aGUgc2FtZSBhcyBhYm92ZSB3aGVuIHIgPSAxLiAgVGhlIGVx
dWF0aW9uCisgICAgICAgIC8vIGJlbG93IGRvZXMgdGhpcy4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGRvbid0IGRvIHRoaXMgd2hlbiB3ZSdyZSBub3QgYWxyZWFkeSBhbmlt
YXRpbmcsIGkuZS4KKyAgICAgICAgLy8gZ2V0dGluZyByZXBlYXRlZCBldmVudHMuICBJZiB0aGUg
dXNlciBzaW1wbHkgcHJlc3NlZCBhIGtleSBvbmNlLCB3ZQorICAgICAgICAvLyB3YW50IHRvIGFu
aW1hdGUgYXQgbm9ybWFsIHNwZWVkIGxpa2Ugd2Ugd291bGQgYWJvdmUuICBJZiB3ZSdsbCBiZQor
ICAgICAgICAvLyBnZXR0aW5nIG1vcmUgZXZlbnRzIHRoYXQgd291bGQgcmVxdWlyZSB0aGUgdHJp
bW1pbmcgYmVsb3csIG91cgorICAgICAgICAvLyBpbml0aWFsIGFjY2VsZXJhdGlvbiBwZXJpb2Qg
d2lsbCBnaXZlIHVzIGVub3VnaCB0aW1lIGZvciB0aGVtIHRvCisgICAgICAgIC8vIGFycml2ZS4K
KyAgICAgICAgaWYgKGFscmVhZHlBbmltYXRpbmcpCisgICAgICAgICAgICBhbmltYXRpb25TdGVw
IC89ICgyLjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Ny
b2xsVGltZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkgKyBhbmltYXRpb25U
aW1lckRlbGF5KSkpOworICAgIH0KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IGFuaW1h
dGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKTsKKyAgICBjaGFuZ2VkU29tZXRoaW5nID0gdHJ1ZTsKKworICAgIC8vIElmIHdlJ3Jl
IG5vdCBhbHJlYWR5IHNjcm9sbGluZywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5n
KQorICAgICAgICBhbmltYXRlU2Nyb2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24o
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJB
eGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZt
X2hvcml6b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1l
cklmTmVlZGVkKGRhdGEpOworICAgIGRhdGEtPm1fY3VycmVudFBvcyA9IHBvczsKKyAgICBkYXRh
LT5tX2Rlc2lyZWRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOwor
ICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsKK30KKworLy8gc3RhdGljCitkb3VibGUg
U2Nyb2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRpbWUoKQoreworICAgIC8vIFdlIGVsZWN0
IHRvIHVzZSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKSBhcworICAgIC8vIHRoZSBsZW5ndGggb2YgdGltZSB3ZSdsbCB0YWtlIHRvIGFjY2VsZXJh
dGUgZnJvbSAwIHRvIG91ciB0YXJnZXQKKyAgICAvLyB2ZWxvY2l0eS4gIENob29zaW5nIGEgbGFy
Z2VyIHZhbHVlIHdvdWxkIHByb2R1Y2UgYSBtb3JlIHByb25vdW5jZWQKKyAgICAvLyBhY2NlbGVy
YXRpb24gZWZmZWN0LgorICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+
YXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6YW5p
bWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4qIHRpbWVyKQoreworICAg
IGFuaW1hdGVTY3JvbGwoKHRpbWVyID09ICZtX2hvcml6b250YWxEYXRhLm1fYW5pbWF0aW9uVGlt
ZXIpID8gJm1faG9yaXpvbnRhbERhdGEgOiAmbV92ZXJ0aWNhbERhdGEpOworfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSog
ZGF0YSkKK3sKKyAgICBpZiAoZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvcldpbjo6YW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0YSogZGF0YSkKK3sKKyAgICAvLyBOb3Rl
IG9uIHNtb290aCBzY3JvbGxpbmcgcGVyZiB2ZXJzdXMgbm9uLXNtb290aCBzY3JvbGxpbmcgcGVy
ZjoKKyAgICAvLyBUaGUgdG90YWwgdGltZSB0byBwZXJmb3JtIGEgY29tcGxldGUgc2Nyb2xsIGlz
IGdpdmVuIGJ5CisgICAgLy8gICB0ID0gdDAgKyAwLjV0QSAtIHREICsgdFMKKyAgICAvLyBXaGVy
ZQorICAgIC8vICAgdDAgPSBUaGUgdGltZSB0byBwZXJmb3JtIHRoZSBzY3JvbGwgd2l0aG91dCBz
bW9vdGggc2Nyb2xsaW5nCisgICAgLy8gICB0QSA9IFRoZSBhY2NlbGVyYXRpb24gdGltZSwKKyAg
ICAvLyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1l
ckRlbGF5KCkgKHNlZSBiZWxvdykKKyAgICAvLyAgIHREID0gfGFuaW1hdGlvblRpbWVyRGVsYXl8
CisgICAgLy8gICB0UyA9IEEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aW1lIHJl
cXVpcmVkIHRvIHBlcmZvcm0gYQorICAgIC8vICAgICAgICBzaW5nbGUgc2Nyb2xsIGluY3JlbWVu
dCwgaS5lLiB0aGUgd29yayBkb25lIGR1ZSB0byBjYWxsaW5nCisgICAgLy8gICAgICAgIGNsaWVu
dCgpLT52YWx1ZUNoYW5nZWQoKSAofjAgZm9yIHNpbXBsZSBwYWdlcywgbGFyZ2VyIGZvciBjb21w
bGV4CisgICAgLy8gICAgICAgIHBhZ2VzKS4KKyAgICAvLworICAgIC8vIEJlY2F1c2UgdEEgYW5k
IHREIGFyZSBmYWlybHkgc21hbGwsIHRoZSB0b3RhbCBsYWcgKGFzIHVzZXJzIHBlcmNlaXZlIGl0
KQorICAgIC8vIGlzIG5lZ2xpZ2libGUgZm9yIHNpbXBsZSBwYWdlcyBhbmQgcm91Z2hseSB0UyBm
b3IgY29tcGxleCBwYWdlcy4gIFdpdGhvdXQKKyAgICAvLyBrbm93aW5nIGluIGFkdmFuY2UgaG93
IGxhcmdlIHRTIGlzIGl0J3MgaGFyZCB0byBkbyBiZXR0ZXIgdGhhbiB0aGlzLgorICAgIC8vIFBl
cmhhcHMgd2UgY291bGQgdHJ5IHRvIHJlbWVtYmVyIHByZXZpb3VzIHZhbHVlcyBhbmQgZm9yd2Fy
ZC1jb21wZW5zYXRlLgorCisKKyAgICAvLyBXZSB3YW50IHRvIHVwZGF0ZSB0aGUgc2Nyb2xsIHBv
c2l0aW9uIGJhc2VkIG9uIHRoZSB0aW1lIGl0J3MgYmVlbiBzaW5jZQorICAgIC8vIG91ciBsYXN0
IHVwZGF0ZS4gIFRoaXMgbWF5IGJlIGxvbmdlciB0aGFuIG91ciBpZGVhbCB0aW1lLCBlc3BlY2lh
bGx5IGlmCisgICAgLy8gdGhlIHBhZ2UgaXMgY29tcGxleCBvciB0aGUgc3lzdGVtIGlzIHNsb3cu
CisgICAgLy8KKyAgICAvLyBUbyBhdm9pZCBmZWVsaW5nIGxhZ2d5LCBpZiB3ZSd2ZSBqdXN0IHN0
YXJ0ZWQgc21vb3RoIHNjcm9sbGluZyB3ZSBwcmV0ZW5kCisgICAgLy8gd2UndmUgYWxyZWFkeSBh
Y2NlbGVyYXRlZCBmb3Igb25lIGlkZWFsIGludGVydmFsLCBzbyB0aGF0IHdlJ2xsIHNjcm9sbCBh
dAorICAgIC8vIGxlYXN0IHNvbWUgZGlzdGFuY2UgaW1tZWRpYXRlbHkuCisgICAgZG91YmxlIGxh
c3RTY3JvbGxJbnRlcnZhbCA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID8gKFdURjo6Y3VycmVu
dFRpbWUoKSAtIGRhdGEtPm1fbGFzdEFuaW1hdGlvblRpbWUpIDogYW5pbWF0aW9uVGltZXJEZWxh
eTsKKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IGZhciB3ZSd2ZSBhY3R1YWxseSB0cmF2ZWxlZCBh
bmQgdXBkYXRlIG91ciBjdXJyZW50CisgICAgLy8gdmVsb2NpdHkuCisgICAgZmxvYXQgZGlzdGFu
Y2VUcmF2ZWxlZDsKKyAgICBpZiAoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPCBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSkgeworICAgICAgICAvLyBXZSBhY2NlbGVyYXRlIGF0IGEgY29uc3RhbnQg
cmF0ZSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQg
YWNjZWxlcmF0aW9uUmF0ZSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5IC8gYWNjZWxlcmF0aW9u
VGltZSgpOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hldGhlciBjb250YW50IGFjY2VsZXJh
dGlvbiBoYXMgY2F1c2VkIHVzIHRvIHJlYWNoIG91cgorICAgICAgICAvLyB0YXJnZXQgdmVsb2Np
dHkuCisgICAgICAgIGZsb2F0IHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlID0gYWNjZWxlcmF0aW9u
UmF0ZSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsTmV3VmVs
b2NpdHkgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdl
OworICAgICAgICBpZiAocG90ZW50aWFsTmV3VmVsb2NpdHkgPiBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSkgeworICAgICAgICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGF0
IHNvbWUgcG9pbnQgYmV0d2VlbiBvdXIgbGFzdAorICAgICAgICAgICAgLy8gdXBkYXRlIGFuZCBu
b3cuICBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgY2FuIGJlIGNhbGN1bGF0ZWQgaW4gdHdvCisgICAg
ICAgICAgICAvLyBwaWVjZXM6IHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB3aGlsZSBhY2NlbGVyYXRp
bmcsIGFuZCB0aGUKKyAgICAgICAgICAgIC8vIGRpc3RhbmNlIHRyYXZlbGVkIGFmdGVyIHJlYWNo
aW5nIHRoZSB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgICAgICBmbG9hdCBhY3R1YWxWZWxvY2l0
eUNoYW5nZSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5IC0gZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHk7CisgICAgICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25JbnRlcnZhbCA9IGFjdHVhbFZlbG9j
aXR5Q2hhbmdlIC8gYWNjZWxlcmF0aW9uUmF0ZTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5j
ZSB0cmF2ZWxlZCB1bmRlciBjb25zdGFudCBhY2NlbGVyYXRpb24gaXMgdGhlIGFyZWEKKyAgICAg
ICAgICAgIC8vIHVuZGVyIGEgbGluZSBzZWdtZW50IHdpdGggYSBjb25zdGFudCByaXNpbmcgc2xv
cGUuICBCcmVhayB0aGlzCisgICAgICAgICAgICAvLyBpbnRvIGEgdHJpYW5ndWxhciBwb3J0aW9u
IGF0b3AgYSByZWN0YW5ndWxhciBwb3J0aW9uIGFuZCBzdW0uCisgICAgICAgICAgICBkaXN0YW5j
ZVRyYXZlbGVkID0gKChkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChhY3R1YWxWZWxvY2l0eUNo
YW5nZSAvIDIpKSAqIGFjY2VsZXJhdGlvbkludGVydmFsKTsKKyAgICAgICAgICAgIC8vIFRoZSBk
aXN0YW5jZSB0cmF2ZWxlZCBhdCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGlzIHNpbXBseQorICAgICAg
ICAgICAgLy8gKHRhcmdldCB2ZWxvY2l0eSkgKiAocmVtYWluaW5nIHRpbWUgYWZ0ZXIgYWNjZWxl
cmF0aW5nKS4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgKz0gKGRhdGEtPm1fZGVzaXJl
ZFZlbG9jaXR5ICogKGxhc3RTY3JvbGxJbnRlcnZhbCAtIGFjY2VsZXJhdGlvbkludGVydmFsKSk7
CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZl
bG9jaXR5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ29uc3RhbnQgYWNjZWxl
cmF0aW9uIHRocm91Z2ggdGhlIGVudGlyZSB0aW1lIGludGVydmFsLgorICAgICAgICAgICAgZGlz
dGFuY2VUcmF2ZWxlZCA9IChkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChwb3RlbnRpYWxWZWxv
Y2l0eUNoYW5nZSAvIDIpKSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgICAgIGRhdGEt
Pm1fY3VycmVudFZlbG9jaXR5ID0gcG90ZW50aWFsTmV3VmVsb2NpdHk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIHRhcmdldCB2
ZWxvY2l0eSwgc28gdGhlIGRpc3RhbmNlIHdlJ3ZlCisgICAgICAgIC8vIHRyYXZlbGVkIGlzIHNp
bXBseSAoY3VycmVudCB2ZWxvY2l0eSkgKiAoZWxhcHNlZCB0aW1lKS4KKyAgICAgICAgZGlzdGFu
Y2VUcmF2ZWxlZCA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICogbGFzdFNjcm9sbEludGVydmFs
OworICAgICAgICAvLyBJZiBvdXIgZGVzaXJlZCB2ZWxvY2l0eSBoYXMgZGVjcmVhc2VkLCBkcm9w
IHRoZSBjdXJyZW50IHZlbG9jaXR5IHRvby4KKyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICB9CisKKyAgICAvLyBOb3cgdXBkYXRl
IHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGRpc3RhbmNlIHRyYXZlbGVkLgorICAg
IGlmIChkaXN0YW5jZVRyYXZlbGVkID49IGFicyhkYXRhLT5tX2Rlc2lyZWRQb3MgLSBkYXRhLT5t
X2N1cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZlbGVkIGZhciBlbm91Z2ggdG8g
cmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290aAorICAgICAgICAvLyBzY3Jv
bGxpbmcuCisgICAgICAgIGRhdGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsK
KyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0
aGUgdGFyZ2V0IHBvc2l0aW9uLiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAg
ICAgICAgLy8gbmV4dCB1cGRhdGUuCisgICAgICAgIGlmIChkYXRhLT5tX2N1cnJlbnRQb3MgPiBk
YXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gLWRpc3Rh
bmNlVHJhdmVsZWQ7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFBvcyArPSBkaXN0YW5jZVRyYXZl
bGVkOworICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChhbmltYXRp
b25UaW1lckRlbGF5KTsKKyAgICAgICAgZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSA9IFdURjo6
Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oSW50UG9pbnQobV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsIG1fdmVydGlj
YWxEYXRhLm1fY3VycmVudFBvcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjplb2wtc3R5
bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcldpbl9oCisjZGVm
aW5lIFNjcm9sbEFuaW1hdG9yV2luX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisj
aW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxB
bmltYXRvcldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2Nyb2xs
QW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3JXaW4oKTsKKworICAgIHZpcnR1YWwgYm9vbCBwb3NzaWJseUFuaW1hdGVTY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBzdGVwLCBm
bG9hdCBtdWx0aXBsaWVkU3RlcCwgZmxvYXQgbWF4UG9zLCBib29sJiBjaGFuZ2VkU29tZXRoaW5n
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNj
cm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBlckF4
aXNEYXRhIHsKKyAgICAgICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JXaW4qIHBhcmVudCk7
CisKKyAgICAgICAgZmxvYXQgbV9jdXJyZW50UG9zOworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRQ
b3M7CisgICAgICAgIGZsb2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAgICBmbG9hdCBtX2Rl
c2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblRpbWU7CisgICAg
ICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiBtX2FuaW1hdGlvblRpbWVyOworICAgIH07CisK
KyAgICBzdGF0aWMgZG91YmxlIGFjY2VsZXJhdGlvblRpbWUoKTsKKyAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+Kik7CisgICAgdm9pZCBzdG9wQW5pbWF0aW9uVGlt
ZXJJZk5lZWRlZChQZXJBeGlzRGF0YSopOworICAgIHZvaWQgYW5pbWF0ZVNjcm9sbChQZXJBeGlz
RGF0YSopOworCisgICAgU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQZXJBeGlzRGF0
YSBtX2hvcml6b250YWxEYXRhOworICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsK
KworfQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yV2luLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCShy
ZXZpc2lvbiA1ODUyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBT
Y3JvbGxCeVBpeGVsCiAgICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291cmNlIHsKKyAgICAgICAg
S2V5cHJlc3MsCisgICAgICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxiYXJQYXJ0T3JNZW51LCAg
Ly8gIlNjcm9sbGJhciIgYWxvbmUgY2xhc2hlcyB3aXRoIHRoZSBjbGFzcyBuYW1lCisgICAgICAg
IFByb2dyYW1tYXRpYworICAgIH07CisKICAgICBlbnVtIFNjcm9sbGJhck9yaWVudGF0aW9uIHsg
SG9yaXpvbnRhbFNjcm9sbGJhciwgVmVydGljYWxTY3JvbGxiYXIgfTsKIAogICAgIGVudW0gU2Ny
b2xsYmFyTW9kZSB7IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhckFsd2F5c09mZiwgU2Nyb2xsYmFy
QWx3YXlzT24gfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNTg1MjIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzMsNiArMjczLDE0IEBAIEludFBvaW50IFNjcm9sbFZpZXc6Om1heGltdW1TY3JvbGxQb3NpdGkK
ICAgICByZXR1cm4gSW50UG9pbnQobWF4aW11bU9mZnNldC53aWR0aCgpLCBtYXhpbXVtT2Zmc2V0
LmhlaWdodCgpKTsKIH0KIAordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQu
eCgpLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgU2Ny
b2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIC8vIEZp
Z3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgpAQCAtMzI0LDE3ICszMzIsMTcgQEAgdm9pZCBT
Y3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdAogICAgIHVwZGF0ZVNjcm9sbGJhcnMo
SW50U2l6ZShuZXdTY3JvbGxQb3NpdGlvbi54KCksIG5ld1Njcm9sbFBvc2l0aW9uLnkoKSkpOwog
fQogCi1ib29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2Ugc291cmNlKQogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAg
ICByZXR1cm4gcGxhdGZvcm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAKICAgICBp
ZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7CiAg
ICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgc291cmNlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSk7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ1MCw3ICs0NTgsNyBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFn
ZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xp
ZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3Njcm9s
bGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRT
dXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAogICAgIH0gCkBAIC00NzIsNyArNDgwLDcgQEAg
dm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAgICAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0
aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSwgZmFsc2UpOwogICAgICAgICBpZiAo
bV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAgICB9CkBAIC02NzUsNyArNjgzLDEy
IEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUKICAgICAgICAgICAg
IGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICBkZWx0YVkgPSAtZGVsdGFZOwogICAgICAg
ICB9Ci0gICAgICAgIHNjcm9sbEJ5KEludFNpemUoLWRlbHRhWCwgLWRlbHRhWSkpOworCisgICAg
ICAgIC8vIFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gc2Nyb2xsQnkoKSBpZiB0aGVyZSBpcyBubyBz
Y3JvbGxiYXIgZm9yIGEgbm9uLXplcm8gZGVsdGE/CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV92
ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9s
bChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgV2hlZWwsIGRlbHRhWSk7CisgICAgICAgIGlmIChk
ZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgV2hlZWwsIGRlbHRh
WCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gNTg1MjIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsOCBAQCBjbGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCwgcHVibGljCiBwdWJs
aWM6CiAgICAgflNjcm9sbFZpZXcoKTsKIAotICAgIC8vIFNjcm9sbGJhckNsaWVudCBtZXRob2Qu
ICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlciB0d28uCisgICAgLy8gU2Nyb2xsYmFyQ2xp
ZW50IG1ldGhvZHMuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlciB0d28uCisgICAgdmly
dHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIAogICAgIC8v
IFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuICBUaGUgU2Nyb2xsVmlldyB3
aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpAQCAtMTU2LDcgKzE1
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNv
bnN0IEludFJlY3QmKTsKICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCBzY3JvbGxzIGJ5IGxpbmVz
LCBwYWdlcyBvciBwaXhlbHMuCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgICAgIAogICAgIC8vIFNjcm9s
bCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSB2aWV3IChlaXRoZXIgYmxpdHRpbmcgb3IgaW52
YWxpZGF0aW5nIGFzIG5lZWRlZCkuCiAgICAgdm9pZCBzY3JvbGxDb250ZW50cyhjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA1
ODUyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsMTIgKzk1LDEyIEBAIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+
dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVl
KGludCB2KQorYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2LCBib29sIGZyb21TY3JvbGxB
bmltYXRpb24pCiB7CiAgICAgdiA9IG1heChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVT
aXplKSwgMCk7CiAgICAgaWYgKHZhbHVlKCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7CisgICAg
c2V0Q3VycmVudFBvcyh2LCAhZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0U3RlcHMoaW50IGxp
bmVTdGVwLCBpCiAgICAgbV9waXhlbFN0ZXAgPSAxLjBmIC8gcGl4ZWxzUGVyU3RlcDsKIH0KIAot
Ym9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgU2Nyb2xsYmFy
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAjaWYg
SEFWRShBQ0NFU1NJQklMSVRZKQogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKSB7CkBAIC0xMzYsMjQgKzEzNiwyOCBAQCBib29sIFNjcm9sbGJhcjo6c2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogI2VuZGlmCiAKLSAgICBmbG9hdCBzdGVwID0gMDsK
LSAgICBpZiAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCAmJiBtX29yaWVudGF0aW9uID09IFZlcnRp
Y2FsU2Nyb2xsYmFyKSB8fCAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQgJiYgbV9vcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgc3RlcCA9IC0xOwotICAgIGVsc2Ug
aWYgKChkaXJlY3Rpb24gPT0gU2Nyb2xsRG93biAmJiBtX29yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKSB8fCAoZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0ICYmIG1fb3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikpIAotICAgICAgICBzdGVwID0gMTsKLSAgICAKKyAgICAv
LyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgorICAgIGlmICgobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0
aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8IGRpcmVjdGlv
biA9PSBTY3JvbGxSaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHN0
ZXA7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5TGluZSkKLSAgICAgICAgc3RlcCAq
PSBtX2xpbmVTdGVwOworICAgICAgICBzdGVwID0gbV9saW5lU3RlcDsKICAgICBlbHNlIGlmIChn
cmFudWxhcml0eSA9PSBTY3JvbGxCeVBhZ2UpCi0gICAgICAgIHN0ZXAgKj0gbV9wYWdlU3RlcDsK
KyAgICAgICAgc3RlcCA9IG1fcGFnZVN0ZXA7CiAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0g
U2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgc3RlcCAqPSBtX3RvdGFsU2l6ZTsKKyAgICAgICAg
c3RlcCA9IG1fdG90YWxTaXplOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5
UGl4ZWwpCi0gICAgICAgIHN0ZXAgKj0gbV9waXhlbFN0ZXA7Ci0gICAgICAgIAotICAgIGZsb2F0
IG5ld1BvcyA9IG1fY3VycmVudFBvcyArIHN0ZXAgKiBtdWx0aXBsaWVyOworICAgICAgICBzdGVw
ID0gbV9waXhlbFN0ZXA7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rp
b24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOworICAg
IGZsb2F0IG11bHRpcGxpZWRTdGVwID0gc3RlcCAqIG11bHRpcGxpZXI7CiAgICAgZmxvYXQgbWF4
UG9zID0gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplOwotICAgIHJldHVybiBzZXRDdXJyZW50
UG9zKG1heChtaW4obmV3UG9zLCBtYXhQb3MpLCAwLjBmKSk7CisgICAgYm9vbCBjaGFuZ2VkU29t
ZXRoaW5nOworICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+cG9zc2libHlBbmltYXRlU2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllZFN0ZXAs
IG1heFBvcywgY2hhbmdlZFNvbWV0aGluZykpCisgICAgICAgIHJldHVybiBjaGFuZ2VkU29tZXRo
aW5nOworCisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyBt
dWx0aXBsaWVkU3RlcCwgbWF4UG9zKSwgMC4wZiksIHRydWUpOwogfQogCiB2b2lkIFNjcm9sbGJh
cjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCkBAIC0yMDYsNyArMjEwLDcgQEAgdm9pZCBTY3JvbGxi
YXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUg
YXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAoc2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0
aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSkpCisgICAgaWYgKHNjcm9sbChw
cmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5
KCksIFNjcm9sbGJhclBhcnRPck1lbnUpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVs
YXkpOwogfQogCkBAIC0yNzYsMTEgKzI4MCwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1i
KGludCBwb3MpCiAgICAgZWxzZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgt
dGh1bWJQb3MsIGRlbHRhKTsKICAgICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Mo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNr
TGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9h
dD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiks
IHRydWUpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCiti
b29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xs
QW5pbWF0b3IpCiB7CisgICAgaWYgKG5vdGlmeVNjcm9sbEFuaW1hdG9yICYmIGNsaWVudCgpKQor
ICAgICAgICBjbGllbnQoKS0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3Jp
ZW50YXRpb24sIHBvcyk7CisKICAgICBpZiAocG9zID09IG1fY3VycmVudFBvcykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0zMjUsNyArMzMyLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNl
TW92ZWQoY29uc3QgUGxhdGZvcgogewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFy
dCkgewogICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhp
cywgZXZ0KSkKLSAgICAgICAgICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luKTsKKyAgICAg
ICAgICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luLCB0cnVlKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93
KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gNTg1MjIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwx
MSArNzUsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3Jv
bGxiYXJQYXJ0KTsKIAogICAgIHZvaWQgc2V0U3RlcHMoaW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0
ZXAsIGludCBwaXhlbHNQZXJTdGVwID0gMSk7Ci0gICAgYm9vbCBzZXRWYWx1ZShpbnQpOworICAg
IGJvb2wgc2V0VmFsdWUoaW50LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pOwogICAgIHZvaWQg
c2V0UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQg
c2V0UHJlc3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKLSAgICBib29sIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
ID0gMS4wZik7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgCiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJl
Y3QpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAgcHJvdGVjdGVkOgogICAgIFNjcm9sbEdyYW51bGFy
aXR5IHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKTsKICAgICAKICAgICB2b2lkIG1vdmVU
aHVtYihpbnQgcG9zKTsKLSAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBi
b29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKTsK
IAogICAgIFNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2
aXNpb24gNTg1MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAj
ZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzQsNyArMzYsMjIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXJDbGllbnQgewogcHVibGljOgot
ICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHt9CisgICAgU2Nyb2xsYmFyQ2xpZW50KCkg
OiBtX3Njcm9sbEFuaW1hdG9yKFNjcm9sbEFuaW1hdG9yOjpwb3NzaWJseUNyZWF0ZVdpdGhDbGll
bnQodGhpcykpIHsgfQorICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHsgfQorCisgICAg
Ym9vbCBwb3NzaWJseUFuaW1hdGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IHN0
ZXAsIGZsb2F0IG11bHRpcGxpZWRTdGVwLCBmbG9hdCBtYXhQb3MsIGJvb2wmIGNoYW5nZWRTb21l
dGhpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvciA/IG1fc2Nyb2xs
QW5pbWF0b3ItPnBvc3NpYmx5QW5pbWF0ZVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBz
b3VyY2UsIHN0ZXAsIG11bHRpcGxpZWRTdGVwLCBtYXhQb3MsIGNoYW5nZWRTb21ldGhpbmcpIDog
ZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKKyAgICB7Cisg
ICAgICAgIGlmIChtX3Njcm9sbEFuaW1hdG9yKQorICAgICAgICAgICAgbV9zY3JvbGxBbmltYXRv
ci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNv
bnN0IEludFBvaW50JikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qo
U2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKQEAgLTY3LDYgKzg0LDkgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRy
PFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxMyBA
QCBib29sIFNjcm9sbGJhcjo6Y29udGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgZWxzZSBpZiAo
YWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsQm90dG9tKQogICAgICAgICBzZXRWYWx1ZShtYXhp
bXVtKCkpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VVcCkKLSAgICAg
ICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdl
LCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxVcCwg
U2Nyb2xsQnlQYWdlLCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25T
ZWxlY3RlZCA9PSBhY3RQYWdlRG93bikKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3Jv
bGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbCho
b3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UsIFNjcm9s
bGJhclBhcnRPck1lbnUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9s
bFVwKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwg
U2Nyb2xsQnlMaW5lLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0
IDogU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxz
ZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsRG93bikKLSAgICAgICAgc2Nyb2xsKGhv
cml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgMSk7Cisg
ICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3Jv
bGxCeUxpbmUsIFNjcm9sbGJhclBhcnRPck1lbnUpOwogI2VuZGlmIC8vIFFUX05PX0NPTlRFWFRN
RU5VCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBN
ZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYxLDYgKzY2MSwxMiBAQCB2b2lkIFBvcHVw
TWVudTo6cGFpbnQoY29uc3QgSW50UmVjdCYgZGFtCiAgICAgICAgIDo6UmVsZWFzZURDKG1fcG9w
dXAsIGxvY2FsREMpOwogfQogCit2b2lkIFBvcHVwTWVudTo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9sbGJhcikK
KyAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2
b2lkIFBvcHVwTWVudTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQogewogICAg
IEFTU0VSVChtX3Njcm9sbGJhcik7CkBAIC05NzUsNyArOTgxLDcgQEAgTFJFU1VMVCBQb3B1cE1l
bnU6OnduZFByb2MoSFdORCBoV25kLCBVSQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Nyb2xsYmFyKCkt
PnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMo
aSkpOworICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDog
U2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzKGkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24g
NTg1MjIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTgsMTAgKzQxOCwxMCBAQCBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0CiAgICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5
ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJC
b3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5k
ZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9k
ZSoqIHN0b3BOb2RlKQogewogICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAo
bCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAg
ICBpZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0
aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUg
PSBub2RlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDMyLDcgKzQzMiw3IEBAIGJvb2wg
UmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBi
ID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQot
ICAgICAgICByZXR1cm4gYi0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIsIHN0b3BOb2RlKTsKKyAgICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA1ODUyMikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNv
bnN0OwogICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyID0gMS4wZiwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmlydHVhbCBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3Vy
Y2UsIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29s
IGNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhdXRvc2Nyb2xsKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRh
R3JpZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQu
Y3BwCShyZXZpc2lvbiA1ODUyMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCwxMiBAQCB2b2lkIFJlbmRlckRhdGFH
cmlkOjpwYWludENvbHVtbkhlYWRlcihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1lbnRhdGlv
biBmdW5jdGlvbnMKK3ZvaWQgUmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckRh
dGFHcmlkOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA1ODUyMikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MRGF0YUdyaWRFbGVtZW50KiBncmlkRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRhR3JpZEVsZW1lbnQqPihu
b2RlKCkpOyB9CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAg
ICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkocmV2aXNpb24gNTg1MjIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTMsOSArMTMxMyw5IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCAKIAogICAgIGlmICh1cGRhdGVTY3JvbGxiYXJz
KSB7CiAgICAgICAgIGlmIChtX2hCYXIpCi0gICAgICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNj
cm9sbFhPZmZzZXQoKSk7CisgICAgICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZz
ZXQoKSwgZmFsc2UpOwogICAgICAgICBpZiAobV92QmFyKQotICAgICAgICAgICAgbV92QmFyLT5z
ZXRWYWx1ZShtX3Njcm9sbFkpOworICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9s
bFksIGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIERPTSBldmVu
dC4KQEAgLTE1NjgsNiArMTU2OCwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3Qg
UGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBh
dXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVy
IHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAordm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hC
YXIpCisgICAgICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYg
KG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30K
Kwogdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8g
VXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0yMDE1LDcgKzIwMjMs
NyBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIC8v
IHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nIChzZWUgaG93IHNj
cm9sbFhPZmZzZXQoKQogICAgICAgICAvLyBkaWZmZXJzIGZyb20gc2Nyb2xsWU9mZnNldCgpIHRv
IGdldCBhbiBpZGVhIG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBhbmQKICAgICAgICAgLy8gdmVydGlj
YWwgc2Nyb2xsYmFycyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkpLgotICAgICAgICBt
X2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgIG1faEJhci0+c2V0VmFs
dWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxzZSk7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAg
ICAgICAgaW50IGNsaWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCk7CkBAIC0yMTc2LDcg
KzIxODQsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9sCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIpCitib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZs
b2F0IG11bHRpcGxpZXIpCiB7CiAgICAgYm9vbCBkaWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7
CiAgICAgYm9vbCBkaWRWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlOwpAQCAtMjE4NSwxMyArMjE5Mywx
MyBAQCBib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uCiAgICAgICAgIGlm
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KSB7CiAgICAgICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgZm9yIHRoZSBTY3JvbGxCeURvY3VtZW50IGdyYW51bGFyaXR5LiBBIGRvY3VtZW50
IHNjcm9sbCBjYW4gb25seSBiZSB1cCAKICAgICAgICAgICAgIC8vIG9yIGRvd24gYW5kIGluIGJv
dGggY2FzZXMgdGhlIGhvcml6b250YWwgYmFyIGdvZXMgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQu
Ci0gICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xs
TGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jp
em9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVu
dCwgc291cmNlLCBtdWx0aXBsaWVyKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRI
b3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKTsKICAgICB9
CiAKICAgICBpZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAgICBkaWRW
ZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNv
dXJjZSwgbXVsdGlwbGllcik7CiAKICAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3JvbGwgfHwg
ZGlkVmVydGljYWxTY3JvbGwpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZp
c2lvbiA1ODUyMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOworICAgIGJvb2wgc2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxv
YXQgbXVsdGlwbGllcik7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKCk7CiAKICAgICB2b2lkIHJlc2l6
ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBJbnRTaXplJik7CkBAIC00OTUsNiAr
NDk1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25z
dDsgCiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0
dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkocmV2aXNpb24gNTg1MjIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBAIGJvb2wgUmVuZGVyTGlz
dEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW4KIAogICAgIG1faW5kZXhPZmZzZXQgPSBuZXdPZmZz
ZXQ7CiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zm
c2V0KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0LCBmYWxzZSk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUxMCw5ICs1MTAsOSBAQCBib29sIFJlbmRlckxpc3RC
b3g6Omxpc3RJbmRleElzVmlzaWJsZShpCiAgICAgcmV0dXJuIGluZGV4ID49IG1faW5kZXhPZmZz
ZXQgJiYgaW5kZXggPCBtX2luZGV4T2Zmc2V0ICsgbnVtVmlzaWJsZUl0ZW1zKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCitib29s
IFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlw
bGllciwgTm9kZSoqKQogewotICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fdkJhciAmJiBt
X3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIp
OwogfQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgpCkBAIC01MjMsNiArNTIzLDEyIEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2Vk
KHVuc2lnbmUKICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsK
IH0KIAordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNv
bnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFy
LT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJMaXN0Qm94Ojp2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICBpbnQgbmV3T2Zmc2V0ID0gbV92QmFyLT52
YWx1ZSgpOwpAQCAtNTc4LDcgKzU4NCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xs
VG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwogICAgIG1faW5kZXhPZmZzZXQgPSBpbmRleDsK
ICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4KTsKKyAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgZmFsc2UpOwogfQogCiBib29sIFJlbmRlckxpc3RC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9u
IDU4NTIyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9
IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUg
PSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgIHZpcnR1YWwg
aW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkg
Y29uc3Q7CkBAIC05Niw2ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsK
IAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODM2LDEyICs4MzYsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNldFNjcgogICAgICAgICBpbm5lclRleHRFbGVtZW50KCktPnNldFNjcm9sbFRvcChuZXdU
b3ApOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBO
b2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxl
bWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBpZiAobGF5ZXIg
JiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxp
ZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CisgICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBt
dWx0aXBsaWVyLCBzdG9wTm9kZSk7CiB9CiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNs
aWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xT
aXplIGNvbnRyb2xTaXplKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxUb3AoaW50KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3Rv
cE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0
b3BOb2RlID0gMCk7CiAKICAgICBpbnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gNTg1MzUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDQtMjkgIFBldGVyIEthc3Rpbmcg
IDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2lu
ZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDogUGx1
bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
OjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDogUGx1bWIg
c2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNj
cm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJv
cGFnYXRlU2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDogUGx1bWIgc2Nyb2xs
IGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiBzcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5
LmNwcDogVXBkYXRlIGNvbW1lbnRzIG5vdyB0aGF0IHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZy4K
KyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudCk6
CisKIDIwMTAtMDQtMjkgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCShyZXZpc2lvbiA1ODUyMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNiwxMCArMTEzNiwxMCBAQCBib29s
IFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgCiAgICAgLy8gbW92ZVRvQmVnaW5u
aW5nT2ZEb2N1bWVudCBhbmQgbW92ZVRvRW5kZkRvY3VtZW50IGFyZSBvbmx5IGhhbmRsZWQgYnkg
V2ViS2l0CiAgICAgLy8gZm9yIGVkaXRhYmxlIG5vZGVzLgogICAgIGlmICghZnJhbWUoKS0+ZWRp
dG9yKCktPmNhbkVkaXQoKSAmJiB3ZWJOYW1lID09ICJtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50
IikKLSAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxVcCwg
U2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVT
Y3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQsIFByb2dyYW1tYXRpYyk7CiAKICAgICBp
ZiAoIWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvRW5k
T2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwo
U2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgp
LT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgUHJvZ3JhbW1h
dGljKTsKIAogICAgIHJldHVybiBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZCh3ZWJOYW1lKS5l
eGVjdXRlKHZhbHVlKTsKIH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShy
ZXZpc2lvbiA1ODUyMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MTUsNyArODE1LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Nyb2xs
Vmlld1dpdGhLZXlib2FyZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0
dXJuIHByb3BhZ2F0ZVNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsK
KyAgICByZXR1cm4gcHJvcGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVs
YXJpdHksIEtleXByZXNzKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVNlbGVjdFBvcHVw
KCkKQEAgLTgyNSwxOSArODI1LDE3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVTZWxlY3RQb3B1
cCgpCiB9CiAKIGJvb2wgV2ViVmlld0ltcGw6OnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gc2Nyb2xsRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNj
cm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbFNvdXJjZSBzY3JvbGxTb3VyY2UpCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9Ci0g
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9s
bEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbEhhbmRsZWQgPSBmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNjcm9sbE92ZXJmbG93KHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHks
IHNjcm9sbFNvdXJjZSk7CiAgICAgRnJhbWUqIGN1cnJlbnRGcmFtZSA9IGZyYW1lOwogICAgIHdo
aWxlICghc2Nyb2xsSGFuZGxlZCAmJiBjdXJyZW50RnJhbWUpIHsKLSAgICAgICAgc2Nyb2xsSGFu
ZGxlZCA9IGN1cnJlbnRGcmFtZS0+dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxH
cmFudWxhcml0eSk7CisgICAgICAgIHNjcm9sbEhhbmRsZWQgPSBjdXJyZW50RnJhbWUtPnZpZXco
KS0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIHNjcm9sbFNvdXJj
ZSk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KTsKICAgICB9CiAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZWQ7CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCShyZXZpc2lvbiA1ODUyMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFRyaWVzIHRvIHNjcm9sbCBhIGZyYW1lIG9yIGFueSBwYXJlbnQgb2YgYSBmcmFtZS4g
UmV0dXJucyB0cnVlIGlmIHRoZSB2aWV3CiAgICAgLy8gd2FzIHNjcm9sbGVkLgotICAgIGJvb2wg
cHJvcGFnYXRlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xs
R3JhbnVsYXJpdHkpOworICAgIGJvb2wgcHJvcGFnYXRlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERp
cmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHksIFdlYkNvcmU6OlNjcm9sbFNvdXJj
ZSk7CiAKICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCBhIHBvcHVwIHdhcyBvcGVuZWQvY2xvc2Vk
LgogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBvcHVwQ29u
dGFpbmVyKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2
ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93
aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTMgKzM5
NiwxNiBAQCBXZWJNb3VzZVdoZWVsRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6CiAKICAgICAv
LyBDb252ZXJ0IHdoZWVsIGRlbHRhIGFtb3VudCB0byBhIG51bWJlciBvZiBwaXhlbHMgdG8gc2Ny
b2xsLgogICAgIC8vCi0gICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVy
IGxpbmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2YgdGhlCi0gICAgLy8gY3VycmVudCBsaW5l
LCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaCB0
aGUKLSAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVudCBwYWdlcy4gIElFIDcgaXMgfjUwIHB4
L2xpbmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQotICAgIC8vIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkg
YnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIFNpbmNlIElFIDcgaGFzIGEgc21vb3RoaW5nCi0gICAg
Ly8gYWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xpZ2h0bHkg
bGFyZ2VyIHNjcm9sbCB2YWx1ZXMKLSAgICAvLyB3aXRob3V0IGZlZWxpbmcgamVya3kuICBIZXJl
IHdlIHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdAotICAgIC8vIHNjcm9s
bCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgorICAgIC8vIEhvdyBtYW55
IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgRmlyZWZveCB1c2VzIHRoZSBoZWln
aHQgb2YKKyAgICAvLyB0aGUgY3VycmVudCBsaW5lLCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFu
Y2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaAorICAgIC8vIHRoZSBwYWdlIG9yIGdvIHRvIGRp
ZmZlcmVudCBwYWdlcy4gIElFIDggaXMgfjYwIHB4L2xpbmUsIGFsdGhvdWdoIHRoZQorICAgIC8v
IHZhbHVlIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkgYnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIEFs
c28sIElFIGRlZmF1bHRzCisgICAgLy8gdG8gc21vb3RoIHNjcm9sbGluZyB3aGlsZSBGaXJlZm94
IGRvZXNuJ3QsIHNvIGl0IGNhbiBnZXQgYXdheSB3aXRoCisgICAgLy8gc29tZXdoYXQgbGFyZ2Vy
IHNjcm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGFzIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAw
CisgICAgLy8gcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdCBzY3JvbGwgYW1vdW50IGlz
IHRocmVlIGxpbmVzIHBlciB3aGVlbAorICAgIC8vIHRpY2spLiAgRXZlbiB0aG91Z2ggd2UgaGF2
ZSBzbW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UKKyAgICAvLyBh
cyBJRSBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhl
ciB0aGFuIHlvdSB3YW50CisgICAgLy8gd2hpbGUgcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAg
ICAgd2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdo
ZWVsRGVsdGE7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNTg1MzUpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA0LTI5ICBQZXRlciBLYXN0
aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBh
IFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X3JlYWxfbW92ZV9jdXJzb3IpOgorCiAyMDEwLTA0LTI5ICBYYW4gTG9wZXogIDx4bG9wZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4
OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNTg1MjIpCisrKyBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Nyw4
ICsxMDU3LDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX21vdgogICAg
IH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSkpCi0gICAgICAgIGZyYW1lLT52
aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBpZiAoIWZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgS2V5
cHJlc3MpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgS2V5cHJlc3MpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
NTg1MzUpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDEwLTA0LTI5ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21v
b3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZVZpZXcubW06IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNv
dXJjZXMuCisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlv
bjpncmFudWxhcml0eTpzb3VyY2U6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xs
VG9CZWdpbm5pbmdPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xs
VG9FbmRPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfcGFnZVZlcnRpY2Fs
bHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfcGFnZUhvcml6b250YWxseTpdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5lVmVydGljYWxseTpdKToKKyAgICAgICAg
KC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5Ol0pOgorCiAyMDEwLTA0LTI4
ICBNaWtlIFRob2xlICA8bXRob2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXZpZCBLaWx6ZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0JKHJldmlzaW9u
IDU4NTIyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTE3LDcgKzUxNyw3IEBAIC0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwogICAg
IFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKIH0KIAotLSAoQk9PTClfc2Nyb2xsT3ZlcmZs
b3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooU2Ny
b2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0gKEJPT0wpX3Njcm9sbE92ZXJmbG93SW5EaXJl
Y3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFNjcm9sbEdyYW51
bGFyaXR5KWdyYW51bGFyaXR5IHNvdXJjZTooU2Nyb2xsU291cmNlKXNvdXJjZQogewogICAgIC8v
IHNjcm9sbGluZyBvdmVyZmxvd3MgaXMgb25seSBhcHBsaWNhYmxlIGlmIHdlJ3JlIGRlYWxpbmcg
d2l0aCBhbiBXZWJIVE1MVmlldwogICAgIGlmICghW1tzZWxmIGRvY3VtZW50Vmlld10gaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKQEAgLTUyNSwxMiArNTI1LDEyIEBAIC0gKEJP
T0wpX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246KFNjcm8KICAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKFtzZWxmIHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIE5P
OwotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNj
cm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSk7CiB9CiAKIC0gKEJP
T0wpX3Njcm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xs
T3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxVcCBncmFudWxhcml0eTpTY3JvbGxCeURvY3VtZW50
XSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3Jh
bnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBzb3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1
cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCiAgICAgICAgIHJldHVybiBO
TzsKQEAgLTU0MCw3ICs1NDAsNyBAQCAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1l
bnQKIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRvY3VtZW50CiB7Ci0gICAgaWYgKFtzZWxmIF9z
Y3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlE
b2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9s
bERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBzb3VyY2U6S2V5cHJlc3NdKQogICAg
ICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCiAgICAgICAg
IHJldHVybiBOTzsKQEAgLTYxNiw3ICs2MTYsNyBAQCAtIChmbG9hdClfaG9yaXpvbnRhbFBhZ2VT
Y3JvbGxEaXN0YW5jZQogCiAtIChCT09MKV9wYWdlVmVydGljYWxseTooQk9PTCl1cAogewotICAg
IGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Ny
b2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xs
T3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0
eTpTY3JvbGxCeVBhZ2Ugc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAg
ICAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQpAQCAtNjI4LDcgKzYyOCw3IEBAIC0g
KEJPT0wpX3BhZ2VWZXJ0aWNhbGx5OihCT09MKXVwCiAKIC0gKEJPT0wpX3BhZ2VIb3Jpem9udGFs
bHk6KEJPT0wpbGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlv
bjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFn
ZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxlZnQgPyBTY3Jv
bGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlIHNvdXJjZTpLZXlw
cmVzc10pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFi
bGVdKQpAQCAtNjQwLDcgKzY0MCw3IEBAIC0gKEJPT0wpX3BhZ2VIb3Jpem9udGFsbHk6KEJPT0wp
bGVmdAogCiAtIChCT09MKV9zY3JvbGxMaW5lVmVydGljYWxseTooQk9PTCl1cAogewotICAgIGlm
IChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xs
RG93biBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3Zl
cmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpT
Y3JvbGxCeUxpbmUgc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAg
IGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCkBAIC02NTIsNyArNjUyLDcgQEAgLSAoQk9PTClf
c2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wpdXAKIAogLSAoQk9PTClfc2Nyb2xsTGluZUhvcml6
b250YWxseTooQk9PTClsZWZ0CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGly
ZWN0aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xs
QnlMaW5lXSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/
IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeUxpbmUgc291cmNl
OktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIGlmICghW3NlbGYgX2lzU2Ny
b2xsYWJsZV0pCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NTM1KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA0LTI5ICBQZXRlciBLYXN0aW5n
ICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdp
bmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDogUGx1bWIg
c2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6aGFuZGxl
U2Nyb2xsaW5nKToKKwogMjAxMC0wNC0yOSAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJv
c0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNTg1MjIpCisrKyBXZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgYm9v
bCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9sbGluZyhRSwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGly
ZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpOwogfQog
CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCkluZGV4OiBXZWJL
aXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2
aXNpb24gNTg1MzUpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDEwLTA0LTI5ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1
NgorCisgICAgICAgICogV2ViVmlldy5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMu
CisgICAgICAgIChXZWJWaWV3OjprZXlEb3duKToKKwogMjAxMC0wNC0yOCAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDU4NTIyKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkwOSw3ICsxOTA5LDcgQEAgYm9vbCBXZWJWaWV3OjprZXlEb3duKFdQ
QVJBTSB2aXJ0dWFsS2V5QwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9s
bFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKTsKIH0KIAogYm9v
bCBXZWJWaWV3OjprZXlQcmVzcyhXUEFSQU0gY2hhckNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29s
IHN5c3RlbUtleURvd24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65325</attachid>
            <date>2010-08-24 14:34:45 -0700</date>
            <delta_ts>2010-08-25 11:57:34 -0700</delta_ts>
            <desc>patch v3.2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>90103</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY1OTM1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjQgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNCAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LCBzdHJpa2UgMi4KSW5kZXg6
IHdzY3JpcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd3NjcmlwdAkocmV2aXNpb24gNjU5MzQpCisrKyB3c2Ny
aXB0CSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw4IEBAIGlmIGJ1aWxkX3BvcnQgPT0gInd4
IjoKICAgICAgICAgd2ViY29yZV9zb3VyY2VzWyd3eC13aW4nXSA9IFsKICAgICAgICAgICAgICAg
ICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2lu
LmNwcCcsCiAgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwJywKKyAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRm
b3JtL3dpbi9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dlYkNvcmUv
cGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgICAgIyB3eFRp
bWVyIG9uIFdpbmRvd3MgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIGVhdCBjcmFzaGVzIGlu
IGNhbGxiYWNrcwogICAgICAgICAgICAgICAgIyBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgV2luIHBv
cnQncyBpbXBsZW1lbnRhdGlvbiB1bnRpbCB0aGUgd3ggYnVnIGZpeCBpcwogICAgICAgICAgICAg
ICAgIyB3aWRlbHkgYXZhaWxhYmxlIChpdCB3YXMgZml4ZWQgaW4gMi44LjEwKS4KSW5kZXg6IFdl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biA2NTkzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
OTIgQEAKKzIwMTAtMDgtMjQgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9v
dGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFdpbmRvd3MgU2Nyb2xsQW5pbWF0b3IuCisgICAg
ICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEFkZCBXaW5kb3dzIFNjcm9sbEFuaW1hdG9y
LgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIFdpbmRvd3MgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZCBXaW5kb3dzIFNjcm9s
bEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
QWRkIHN0dWIgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOiBQbHVt
YiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2Ny
b2xsQnlVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbFpvb21Gb3JSZW5kZXJlcik6IEZp
eCBzdHlsZSBndWlkZSB2aW9sYXRpb24uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xs
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJj
ZXMuCisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHA6IFBsdW1iIHNjcm9sbCBj
b21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogQWRkZWQuICBDb250YWlucyBzdHVi
IGltcGwgZm9yIG5vbi1XaW5kb3dzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
On5TY3JvbGxBbmltYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6cG9z
c2libHlBbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3I6OnBvc3NpYmx5Q3JlYXRlV2l0aENsaWVudCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpwb3NzaWJseUNyZWF0ZVdpdGhDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFjY2Vs
ZXJhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1h
dGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OnN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yV2luOjphbmltYXRlU2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
cldpbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oOiBBZGQgc2Ny
b2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24u
ICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBi
ZSBhbmltYXRlZC4gIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxF
dmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBQbHVtYiBzY3JvbGwgY29t
bWFuZCBzb3VyY2VzLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6IEFsbG93IFNj
cm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxzIGlmIGRlc2lyZWQuICBQbHVtYiBzY3JvbGwg
Y29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldEN1
cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZU1vdmVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDogQWxsb3cgU2Nyb2xsQW5pbWF0b3IgdG8gaGFu
ZGxlIHNjcm9sbHMgaWYgZGVzaXJlZC4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50Lmg6IEFkZCBob29rcyBmb3IgU2Nyb2xs
QW5pbWF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OlNjcm9sbGJhckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojpwb3NzaWJseUFuaW1hdGVT
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3Np
dGlvbkFuZFN0b3BBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0
LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6Y29udGV4dE1lbnUpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVX
aW4uY3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xs
IGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Ny
b2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46
OnduZFByb2MpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaDogUGx1bWIg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IFBs
dW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRh
dGFHcmlkLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogUGx1bWIgbmV3IFNjcm9sbGJh
ckNsaWVudCBmdW5jdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBQ
bHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rp
b24uICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIg
c2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6IFBsdW1iIHNjcm9s
bCBjb21tYW5kIHNvdXJjZXMuCisKIDIwMTAtMDgtMjQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNjU5MzQpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTUzLDYgKzE5NTMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFi
bGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFR5cGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKQEAgLTI1NzQsNiArMjU3NSw4IEBAIGVuZGlmCiAKIGlm
IFRBUkdFVF9XSU4zMgogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yV2luLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldp
bi5oIFwKIAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBcCiAJV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCiAJV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA2NTkzNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEx
LDYgKzMxMTEsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5oJywKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNjU5MzQpCisrKyBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIyLDggKzEyMjIsMTAgQEAK
ICAgICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnUG9zaXhc
XC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL29wZW50eXBlLyddLAotICAgICAg
ICAgICAgWydpbmNsdWRlJywgJy9UcmFuc3BhcmVuY3lXaW5cXC5jcHAkJ10sCisgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuY3BwJCddLAorICAgICAgICAgICAg
WydpbmNsdWRlJywgJy9TY3JvbGxBbmltYXRvcldpblxcLmgkJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAnL1NraWFGb250V2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywg
Jy9UcmFuc3BhcmVuY3lXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgICAnZGVm
aW5lcyc6IFsKICAgICAgICAgICAgICMgTWF0Y2ggU2FmYXJpIGFuZCBNb3ppbGxhIG9uIFdpbmRv
d3MuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY1
OTM0KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjQyNTcsNiArMjQyNTcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3IuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXFNjcm9sbEFuaW1hdG9yV2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yV2luLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxTY3JvbGxiYXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NTkzNCkKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC01MTA2LDYgKzUxMDYsNyBAQAogCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXIuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlv
bkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5o
ICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovOyB9OworCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdEMTBE
OTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovOyB9OwogCQlDRTAyRjBDNDExRTgz
QUREMDBDNjY4NEEgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMDJGMEMzMTFFODNBREQwMEM2Njg0QSAvKiBT
Y3JpcHRDb250cm9sbGVyQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUNFMDU3RkE1MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0UwNTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgKi87IH07CiAJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFMDU3RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA5
MzAsNiArMTA5MzEsNyBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdl
RXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQz
MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRD
b250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRD
b250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTA1N0ZBMzEy
MjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3RkE0MTIyMDczMTEwMEE0NzZENSAv
KiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjY3MCw2ICsxNjY3Miw3IEBACiAJCQkJMUM2M0EyNDYwRjcxNjQ2NjAwQzA5RDVB
IC8qIFJ1bkxvb3BUaW1lci5oICovLAogCQkJCTUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBT
Y2hlbWVSZWdpc3RyeS5jcHAgKi8sCiAJCQkJNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmggKi8sCisJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJh
ci5oICovLAogCQkJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
aCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAq
LywKQEAgLTE5Nzg3LDYgKzE5NzkwLDcgQEAKIAkJCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYg
LyogU2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzBFMjBFRDM5RDZGMDBB
NjU4RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyOEMyODQ1MTBEODI1
MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNBM0JG
NjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1l
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyArMjUzLDcgQEAgdm9p
ZCBFbGVtZW50OjpzY3JvbGxCeVVuaXRzKGludCB1bml0cywgUwogICAgICAgICAgICAgICAgIGRp
cmVjdGlvbiA9IFNjcm9sbFVwOwogICAgICAgICAgICAgICAgIHVuaXRzID0gLXVuaXRzOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdG9SZW5kZXJCb3gocmVuZCktPmxheWVyKCktPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCB1bml0cyk7CisgICAgICAgICAgICB0b1JlbmRlckJv
eChyZW5kKS0+bGF5ZXIoKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIFByb2dyYW1t
YXRpYywgdW5pdHMpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjczLDggKzI3Myw4IEBAIHN0
YXRpYyBmbG9hdCBsb2NhbFpvb21Gb3JSZW5kZXJlcihSZW5kZXIKICAgICAvLyBGSVhNRTogVGhp
cyBkb2VzIHRoZSB3cm9uZyB0aGluZyBpZiB0d28gb3Bwb3Npbmcgem9vbXMgYXJlIGluIGVmZmVj
dCBhbmQgY2FuY2VsZWQgZWFjaAogICAgIC8vIG90aGVyIG91dCwgYnV0IHRoZSBhbHRlcm5hdGl2
ZSBpcyB0aGF0IHdlJ2QgaGF2ZSB0byBjcmF3bCB1cCB0aGUgd2hvbGUgcmVuZGVyIHRyZWUgZXZl
cnkKICAgICAvLyB0aW1lIChvciBzdG9yZSBhbiBhZGRpdGlvbmFsIGJpdCBpbiB0aGUgUmVuZGVy
U3R5bGUgdG8gaW5kaWNhdGUgdGhhdCBhIHpvb20gd2FzIHNwZWNpZmllZCkuCi0gICAgZmxvYXQg
em9vbUZhY3RvciA9IDEuMGY7Ci0gICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkgIT0gMS4wZikgeworICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxOworICAgIGlmIChyZW5k
ZXJlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEpIHsKICAgICAgICAgLy8gTmVlZCB0
byBmaW5kIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBSZW5kZXJPYmplY3QgdGhhdCBzZXQgdXAKICAg
ICAgICAgLy8gYSBkaWZmZXJpbmcgem9vbSwgYW5kIHRoZW4gd2UgZGl2aWRlIG91ciByZXN1bHQg
YnkgaXQgdG8gZWxpbWluYXRlIHRoZSB6b29tLgogICAgICAgICBSZW5kZXJPYmplY3QqIHByZXYg
PSByZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA2NTkzNCkKKysr
IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTMg
KzEzMCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2Nyb2xsTm9kZShmbG9hdCBkZWx0CiAgICAg
ZmxvYXQgYWJzRGVsdGEgPSBkZWx0YSA+IDAgPyBkZWx0YSA6IC1kZWx0YTsKICAgICAKICAgICBp
ZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGFnZSkKLSAgICAgICAgcmV0dXJuIGVuY2xv
c2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDogcG9zaXRpdmVE
aXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKKyAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9uIDog
cG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgV2hlZWwsIGFic0RlbHRhLCBzdG9wTm9k
ZSk7CiAKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6TGluZSkKLSAgICAgICAg
cmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZlRGlyZWN0aW9u
IDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
KyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZl
RGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgV2hlZWwsIGFic0Rl
bHRhLCBzdG9wTm9kZSk7CiAKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gV2hlZWxFdmVudDo6UGl4
ZWwpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAgPyBuZWdh
dGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVsLCBhYnNEZWx0
YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEg
PCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQaXhl
bCwgV2hlZWwsIGFic0RlbHRhLCBzdG9wTm9kZSk7CiAgICAgICAgIAogICAgIHJldHVybiBmYWxz
ZTsKIH0KQEAgLTk3NSw3ICs5NzUsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2V0TW91c2VQcmVz
c05vZGUoUGFzCiAgICAgbV9tb3VzZVByZXNzTm9kZSA9IG5vZGU7CiB9CiAKLWJvb2wgRXZlbnRI
YW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlKQorYm9vbCBFdmVudEhh
bmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBOb2RlKiBzdGFydGlu
Z05vZGUpCiB7CiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsKIApAQCAtOTg3LDcgKzk4
Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGwKICAgICAKICAg
ICBpZiAobm9kZSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSBub2RlLT5yZW5kZXJlcigp
OwotICAgICAgICBpZiAociAmJiAhci0+aXNMaXN0Qm94KCkgJiYgci0+ZW5jbG9zaW5nQm94KCkt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSkgeworICAgICAgICBpZiAociAmJiAhci0+
aXNMaXN0Qm94KCkgJiYgci0+ZW5jbG9zaW5nQm94KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBzb3VyY2UpKSB7CiAgICAgICAgICAgICBzZXRGcmFtZVdhc1Njcm9sbGVkQnlVc2Vy
KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtOTk2LDE3ICs5OTYs
MTcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBOb2Rl
KiBzdGFydGluZ05vZGUpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNj
cm9sbFNvdXJjZSBzb3VyY2UsIE5vZGUqIHN0YXJ0aW5nTm9kZSkKIHsKICAgICAvLyBUaGUgbGF5
b3V0IG5lZWRzIHRvIGJlIHVwIHRvIGRhdGUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzY3JvbGwu
IFdlIG1heSBiZQogICAgIC8vIGhlcmUgYmVjYXVzZSBvZiBhbiBvbkxvYWQgZXZlbnQsIGluIHdo
aWNoIGNhc2UgdGhlIGZpbmFsIGxheW91dCBoYXNuJ3QgYmVlbiBwZXJmb3JtZWQgeWV0LgogICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwotICAgIGJvb2wgaGFuZGxlZCA9IHNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIHN0YXJ0aW5nTm9kZSk7CisgICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3co
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBzdGFydGluZ05vZGUpOwogICAgIGlmICgh
aGFuZGxlZCkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2ZyYW1lOwogICAgICAgICBkbyB7
CiAgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgICAgICAg
ICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSkg
OiBmYWxzZTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSkgOiBmYWxzZTsKICAgICAgICAgICAgIGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgICAgIH0gd2hpbGUgKCFoYW5kbGVkICYmIGZy
YW1lKTsKICAgICAgfQpAQCAtMjY5Myw3ICsyNjkzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRl
ZmF1bHRTcGFjZUV2ZW50SGFuZAogdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50
SGFuZGxlcihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uID0gZXZlbnQtPnNoaWZ0S2V5KCkgPyBTY3JvbGxVcCA6IFNjcm9sbERvd247Ci0gICAg
aWYgKHNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKSkgeworICAgIGlmIChz
Y3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSwgS2V5cHJlc3MpKSB7CiAgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjcwMiw3ICsyNzAyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRTcGFjZUV2ZW50
SGFuZAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHZpZXctPnNj
cm9sbChkaXJlY3Rpb24sIFNjcm9sbEJ5UGFnZSkpCisgICAgaWYgKHZpZXctPnNjcm9sbChkaXJl
Y3Rpb24sIFNjcm9sbEJ5UGFnZSwgS2V5cHJlc3MpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gNjU5MzQpCisr
KyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw5ICsx
MzIsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFyZ2V0Tm9k
ZShOb2RlKik7CiAKLSAgICBib29sIHNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5nTm9kZSA9IDApOworICAgIGJvb2wgc2Nyb2xs
T3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNl
IHNvdXJjZSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CiAKLSAgICBib29sIHNjcm9sbFJlY3Vy
c2l2ZWx5KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0YXJ0aW5n
Tm9kZSA9IDApOworICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgTm9kZSogc3RhcnRpbmdOb2Rl
ID0gMCk7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIGJvb2wgc2hvdWxkRHJhZ0F1
dG9Ob2RlKE5vZGUqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAvLyAtd2Via2l0LXVzZXItZHJh
ZyA9PSBhdXRvCkluZGV4OiBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDY1
OTM0KQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQyLDcgKzQ0Miw5IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQog
fQogCiAvLyBJbiBhIGJvdHRvbS11cCB3YXksIHRoaXMgbWV0aG9kIHRyaWVzIHRvIHNjcm9sbCB8
ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0aW9uCi0vLyB8ZGlyZWN0aW9ufCwgZ29pbmcgdXAgaW4g
dGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5IGluIGNhc2UgaXQgZG9lcyBub3Qgc3VjY2VlZC4KKy8v
IHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUgZnJhbWUgdHJlZSBoaWVyYXJjaHkgaW4gY2Fz
ZSBpdCBkb2VzIG5vdAorLy8gc3VjY2VlZC4KKy8vIE5PVEU6IFRoaXMgZnVuY3Rpb24gYXNzdW1l
cyB0aGUgY2FsbGVyIGlzIHJlc3BvbmRpbmcgdG8gYSBrZXlib2FyZCBldmVudC4KIGJvb2wgc2Ny
b2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCiB7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTQ2
OCw5ICs0NzAsOSBAQCBib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jCiAg
ICAgfQogCiAgICAgaWYgKCFjYW5kaWRhdGUuaXNOdWxsKCkgJiYgaXNTY3JvbGxhYmxlQ29udGFp
bmVyTm9kZShjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCkpCi0gICAgICAgIHJldHVy
biBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsQnlMaW5lLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCk7CisgICAg
ICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBLZXlwcmVzcywgY2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3gpOwogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xs
UmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxCeUxpbmUpOworICAgIHJldHVybiBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9sbERpcmVjdGlvbiwg
U2Nyb2xsQnlMaW5lLCBLZXlwcmVzcyk7CiB9CiAKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVu
dCogZWxlbWVudCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcl9oCisjZGVmaW5lIFNjcm9sbEFu
aW1hdG9yX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudDsKKwor
Y2xhc3MgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3JvbGxBbmltYXRv
ciogcG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KFNjcm9sbGJhckNsaWVudCopOworCisgICAgdmly
dHVhbCB+U2Nyb2xsQW5pbWF0b3IoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBwb3NzaWJseUFu
aW1hdGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291
cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgZmxvYXQgbWF4UG9zLCBib29s
JiBjaGFuZ2VkU29tZXRoaW5nKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZs
b2F0KSB7IH0KK307CisKKyNpZiAhT1MoV0lORE9XUykKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxB
bmltYXRvcjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KFNjcm9sbGJhckNsaWVudCopCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworfQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
cldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldp
bi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2lu
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yV2luLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJD
bGllbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBzdGF0aWMKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6cG9zc2libHlDcmVh
dGVXaXRoQ2xpZW50KFNjcm9sbGJhckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcg
U2Nyb2xsQW5pbWF0b3JXaW4oY2xpZW50KTsKK30KKworY29uc3QgZG91YmxlIFNjcm9sbEFuaW1h
dG9yV2luOjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKKworU2Nyb2xsQW5pbWF0b3JXaW46
OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFyZW50KQorICAg
IDogbV9jdXJyZW50UG9zKDApCisgICAgLCBtX2Rlc2lyZWRQb3MoMCkKKyAgICAsIG1fY3VycmVu
dFZlbG9jaXR5KDApCisgICAgLCBtX2Rlc2lyZWRWZWxvY2l0eSgwKQorICAgICwgbV9sYXN0QW5p
bWF0aW9uVGltZSgwKQorICAgICwgbV9hbmltYXRpb25UaW1lcihwYXJlbnQsICZTY3JvbGxBbmlt
YXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworCitTY3JvbGxBbmltYXRvcldp
bjo6U2Nyb2xsQW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2Ns
aWVudChjbGllbnQpCisgICAgLCBtX2hvcml6b250YWxEYXRhKHRoaXMpCisgICAgLCBtX3ZlcnRp
Y2FsRGF0YSh0aGlzKQoreworfQorCitTY3JvbGxBbmltYXRvcldpbjo6flNjcm9sbEFuaW1hdG9y
V2luKCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0
YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKK30K
KworYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6cG9zc2libHlBbmltYXRlU2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxT
b3VyY2Ugc291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgZmxvYXQgbWF4
UG9zLCBib29sJiBjaGFuZ2VkU29tZXRoaW5nKQoreworICAgIC8vIERvbid0IGFuaW1hdGUganVt
cGluZyB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGdy
YW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0aWJsZSBzY3JvbGwuICBDYWxjdWxhdGUgdGhlIHNjcm9s
bCBkZWx0YS4KKyAgICBjaGFuZ2VkU29tZXRoaW5nID0gZmFsc2U7CisgICAgUGVyQXhpc0RhdGEq
IGRhdGEgPSAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3du
KSA/ICZtX3ZlcnRpY2FsRGF0YSA6ICZtX2hvcml6b250YWxEYXRhOworICAgIGZsb2F0IG5ld1Bv
cyA9IHN0ZDo6bWF4KHN0ZDo6bWluKGRhdGEtPm1fZGVzaXJlZFBvcyArIG11bHRpcGxpZWRTdGVw
LCBtYXhQb3MpLCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gbmV3UG9zOwor
CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVsb2NpdHkuCisgICAgaWYgKGRhdGEt
Pm1fY3VycmVudFBvcyA9PSBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGZsb2F0IGFuaW1hdGlvblN0ZXA7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0g
ZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIGlmICgoc291cmNlICE9IEtl
eXByZXNzKSAmJiAoc291cmNlICE9IFdoZWVsKSkgeworICAgICAgICAvLyBXaGVuIGF1dG9zY3Jv
bGxpbmcsIHRoZSBzY3JvbGxiYXIncyBhdXRvc2Nyb2xsIHRpbWVyIHdpbGwgY2FsbCB1cyB0bwor
ICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8IGV2ZXJ5
CisgICAgICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpIHNlY29uZHMuICBJZiB3ZQorICAgICAgICAvLyBzZXQgdGhlIGRlc2lyZWQgdmVs
b2NpdHkgdG8gZXhhY3RseSB0aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbAorICAgICAg
ICAvLyBuZWl0aGVyIHJhY2UgYWhlYWQgKGFuZCB0aGVuIGhhdmUgdG8gc2xvdyBkb3duKSBub3Ig
aW5jcmVhc2luZ2x5IGxhZworICAgICAgICAvLyBiZWhpbmQsIGJ1dCB3aWxsIGJlIHNtb290aCBh
bmQgc3luY2hyb25pemVkLgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlIHRoYXQgYmVjYXVz
ZSBvZiB0aGUgYWNjZWxlcmF0aW9uIHBlcmlvZCwgdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICAg
ICAgLy8gd2lsbCBsYWcgdGhlIGRlc2lyZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50IGFtb3Vu
dCAoc2VlIGNvbW1lbnRzIG9uCisgICAgICAgIC8vIGFuaW1hdGVTY3JvbGwoKSk7IHRoZSBleGFj
dCBhbW91bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRB
ICsgdEQpCisgICAgICAgIC8vIFdoZXJlCisgICAgICAgIC8vICAgdiA9IFRoZSBzdGVhZHktc3Rh
dGUgdmVsb2NpdHksCisgICAgICAgIC8vICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpu
YXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8vICAgdEEgPSBh
Y2NlbGVyYXRpb25UaW1lKCkKKyAgICAgICAgLy8gICB0RCA9IFRoZSB0aW1lIHdlIHByZXRlbmQg
aGFzIGFscmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRpbmcgdG8KKyAgICAgICAgLy8gICAgICAgIHNj
cm9sbCwgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMg
bGFnIHByb3ZpZGVzIHNvbWUgYnVmZmVyIGFnYWluc3QgdGltZXIgaml0dGVyIHNvIHdlJ3JlIGxl
c3MKKyAgICAgICAgLy8gbGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhbmQgc3Rv
cCAoYW5kIHRodXMgaGF2ZSB0bworICAgICAgICAvLyByZS1hY2NlbGVyYXRlLCBjYXVzaW5nIGEg
dmlzaWJsZSBoaXRjaCkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQKKyAgICAgICAgLy8gYXV0
b3Njcm9sbCBpbmNyZW1lbnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBzdGVwOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZvciBrZXlib2FyZCBhbmQgd2hlZWwgc2Nyb2xscywgd2UgZG9u
J3Qga25vdyB3aGVuIHRoZSBuZXh0IGluY3JlbWVudAorICAgICAgICAvLyB3aWxsIGJlIHJlcXVl
c3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIKKyAg
ICAgICAgLy8gYXdheSBmcm9tIHRoZSB0YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBr
ZXlib2FyZC93aGVlbCBldmVudHMKKyAgICAgICAgLy8gdGhhdCBjb21lIGZhc3RlciB0aGFuIHRo
ZSBhdXRvc2Nyb2xsIGRlbGF5LCB3ZSdsbCBhc3ltcHRvdGljYWxseQorICAgICAgICAvLyBhcHBy
b2FjaCB0aGUgdmVsb2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRo
ZSB1c2VyJ3MKKyAgICAgICAgLy8gYWN0aW9uczsgZm9yIGV2ZW50cyB0aGF0IGNvbWUgc2xvd2Vy
LCB3ZSdsbCBzY3JvbGwgb25lIGluY3JlbWVudCBhbmQKKyAgICAgICAgLy8gdGhlbiBwYXVzZSB1
bnRpbCB0aGUgbmV4dCBldmVudCBmaXJlcy4gIFRoaXMgbGF0dGVyIGJlaGF2aW9yIG1lYW5zCisg
ICAgICAgIC8vIHRoYXQgc2luZ2xlIGtleXByZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwgaGF2
ZSB0aGUgc2FtZSBhcHBlYXJhbmNlCisgICAgICAgIC8vIGFzIHNpbmdsZSBwcmVzc2VzIG9mIGEg
c2Nyb2xsYmFyIHBhcnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gZGF0
YS0+bV9jdXJyZW50UG9zKTsKKyAgICAgICAgLy8gSWYgYSBrZXkgaXMgaGVsZCBkb3duIChvciB0
aGUgd2hlZWwgY29udGludWFsbHkgc3B1biksIHRoZW4gb25jZSB3ZQorICAgICAgICAvLyBoYXZl
IHJlYWNoZWQgYSB2ZWxvY2l0eSBjbG9zZSB0byB0aGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LCB3
ZSdyZQorICAgICAgICAvLyBsaWtlbHkgdG8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFy
b3VuZCB0aGUgc2FtZSB0aW1lIHdlJ2QKKyAgICAgICAgLy8gZXhwZWN0IHRoZSBuZXh0IGluY3Jl
bWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVzZSBpdCBsZWFkcyB0bworICAgICAgICAvLyBoaXRj
aGluZyBhcyBkZXNjcmliZWQgYWJvdmUuICBTbyB3ZSB0cmltIHRoZSB2ZWxvY2l0eSBzbGlnaHRs
eSBzbworICAgICAgICAvLyB0aGF0IHdlIGhhdmUgYSBzbWFsbCBidWZmZXIsIHRvIGRlY3JlYXNl
IHRoZSBsaWtlbGlob29kIG9mIHRoaXMKKyAgICAgICAgLy8gb2NjdXJyaW5nLiAgTm90ZSB0aGF0
IHdlIHdvbid0IGZhbGwgc3RlYWRpbHkgZnVydGhlciBiZWhpbmQgaGVyZSwKKyAgICAgICAgLy8g
YmVjYXVzZSBpbiBzdWJzZXF1ZW50IHVwZGF0ZXMgd2UnbGwgYmUgY2FsY3VsYXRpbmcgb3VyIHZl
bG9jaXR5IGJhc2VkCisgICAgICAgIC8vIG9uIGEgbGFyZ2VyIGRlc2lyZWQgc3RlcCAtLSBzbyB0
aGUgcHJhY3RpY2FsIGVmZmVjdCBpcyB0aGF0IHdlIGxhZyBieQorICAgICAgICAvLyBhIHNtYWxs
LCBjb25zdGFudCBhbW91bnQgZGVwZW5kaW5nIG9uIHRoZSB0cmltIHZhbHVlIGFuZCB0aGUgcmF0
ZSBhdAorICAgICAgICAvLyB3aGljaCBpbmNyZW1lbnRzIG9jY3VyIGNvbXBhcmVkIHRvIHRoZSBh
dXRvc2Nyb2xsIHRpbWVyIGRlbGF5LiAgVGhlCisgICAgICAgIC8vIGV4YWN0IGFtb3VudCBpcyBn
aXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgociAvIGspIC0gMSkKKyAgICAg
ICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICByID0gVGhlIHJhdGlvIG9mIHRoZSBhdXRvc2Nyb2xs
IHJlcGVhdCBkZWxheSwKKyAgICAgICAgLy8gICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQorICAgICAgICAvLyAgICAgICBr
ZXkvd2hlZWwgcmVwZWF0IGRlbGF5IChpLmUuID4gMSB3aGVuIGtleXMgcmVwZWF0IGZhc3RlcikK
KyAgICAgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVsb3cK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgd2Ugd2FudCB0byBhY3QgYXMgbXVjaCBsaWtlIGF1
dG9zY3JvbGxpbmcgYXMgcG9zc2libGUsIHRoZW4gd2UKKyAgICAgICAgLy8gY2hvb3NlIGsgc3Vj
aCB0aGF0IGxhZyBpcyB0aGUgc2FtZSBhcyBhYm92ZSB3aGVuIHIgPSAxLiAgVGhlIGVxdWF0aW9u
CisgICAgICAgIC8vIGJlbG93IGRvZXMgdGhpcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGRvbid0IGRvIHRoaXMgd2hlbiB3ZSdyZSBub3QgYWxyZWFkeSBhbmltYXRpbmcs
IGkuZS4KKyAgICAgICAgLy8gZ2V0dGluZyByZXBlYXRlZCBldmVudHMuICBJZiB0aGUgdXNlciBz
aW1wbHkgcHJlc3NlZCBhIGtleSBvbmNlLCB3ZQorICAgICAgICAvLyB3YW50IHRvIGFuaW1hdGUg
YXQgbm9ybWFsIHNwZWVkIGxpa2Ugd2Ugd291bGQgYWJvdmUuICBJZiB3ZSdsbCBiZQorICAgICAg
ICAvLyBnZXR0aW5nIG1vcmUgZXZlbnRzIHRoYXQgd291bGQgcmVxdWlyZSB0aGUgdHJpbW1pbmcg
YmVsb3csIG91cgorICAgICAgICAvLyBpbml0aWFsIGFjY2VsZXJhdGlvbiBwZXJpb2Qgd2lsbCBn
aXZlIHVzIGVub3VnaCB0aW1lIGZvciB0aGVtIHRvCisgICAgICAgIC8vIGFycml2ZS4KKyAgICAg
ICAgaWYgKGFscmVhZHlBbmltYXRpbmcpCisgICAgICAgICAgICBhbmltYXRpb25TdGVwIC89ICgy
LjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkgKyBhbmltYXRpb25UaW1lckRl
bGF5KSkpOworICAgIH0KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IGFuaW1hdGlvblN0
ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXko
KTsKKyAgICBjaGFuZ2VkU29tZXRoaW5nID0gdHJ1ZTsKKworICAgIC8vIElmIHdlJ3JlIG5vdCBh
bHJlYWR5IHNjcm9sbGluZywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5nKQorICAg
ICAgICBhbmltYXRlU2Nyb2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0
YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6
b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKGRhdGEpOworICAgIGRhdGEtPm1fY3VycmVudFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2Rl
c2lyZWRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgIGRh
dGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsKK30KKworLy8gc3RhdGljCitkb3VibGUgU2Nyb2xs
QW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRpbWUoKQoreworICAgIC8vIFdlIGVsZWN0IHRvIHVz
ZSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBh
cworICAgIC8vIHRoZSBsZW5ndGggb2YgdGltZSB3ZSdsbCB0YWtlIHRvIGFjY2VsZXJhdGUgZnJv
bSAwIHRvIG91ciB0YXJnZXQKKyAgICAvLyB2ZWxvY2l0eS4gIENob29zaW5nIGEgbGFyZ2VyIHZh
bHVlIHdvdWxkIHByb2R1Y2UgYSBtb3JlIHByb25vdW5jZWQKKyAgICAvLyBhY2NlbGVyYXRpb24g
ZWZmZWN0LgorICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Nj
cm9sbFRpbWVyRGVsYXkoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9u
VGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4qIHRpbWVyKQoreworICAgIGFuaW1h
dGVTY3JvbGwoKHRpbWVyID09ICZtX2hvcml6b250YWxEYXRhLm1fYW5pbWF0aW9uVGltZXIpID8g
Jm1faG9yaXpvbnRhbERhdGEgOiAmbV92ZXJ0aWNhbERhdGEpOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSogZGF0YSkK
K3sKKyAgICBpZiAoZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBk
YXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldp
bjo6YW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0YSogZGF0YSkKK3sKKyAgICAvLyBOb3RlIG9uIHNt
b290aCBzY3JvbGxpbmcgcGVyZiB2ZXJzdXMgbm9uLXNtb290aCBzY3JvbGxpbmcgcGVyZjoKKyAg
ICAvLyBUaGUgdG90YWwgdGltZSB0byBwZXJmb3JtIGEgY29tcGxldGUgc2Nyb2xsIGlzIGdpdmVu
IGJ5CisgICAgLy8gICB0ID0gdDAgKyAwLjV0QSAtIHREICsgdFMKKyAgICAvLyBXaGVyZQorICAg
IC8vICAgdDAgPSBUaGUgdGltZSB0byBwZXJmb3JtIHRoZSBzY3JvbGwgd2l0aG91dCBzbW9vdGgg
c2Nyb2xsaW5nCisgICAgLy8gICB0QSA9IFRoZSBhY2NlbGVyYXRpb24gdGltZSwKKyAgICAvLyAg
ICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCkgKHNlZSBiZWxvdykKKyAgICAvLyAgIHREID0gfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAg
Ly8gICB0UyA9IEEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aW1lIHJlcXVpcmVk
IHRvIHBlcmZvcm0gYQorICAgIC8vICAgICAgICBzaW5nbGUgc2Nyb2xsIGluY3JlbWVudCwgaS5l
LiB0aGUgd29yayBkb25lIGR1ZSB0byBjYWxsaW5nCisgICAgLy8gICAgICAgIGNsaWVudCgpLT52
YWx1ZUNoYW5nZWQoKSAofjAgZm9yIHNpbXBsZSBwYWdlcywgbGFyZ2VyIGZvciBjb21wbGV4Cisg
ICAgLy8gICAgICAgIHBhZ2VzKS4KKyAgICAvLworICAgIC8vIEJlY2F1c2UgdEEgYW5kIHREIGFy
ZSBmYWlybHkgc21hbGwsIHRoZSB0b3RhbCBsYWcgKGFzIHVzZXJzIHBlcmNlaXZlIGl0KQorICAg
IC8vIGlzIG5lZ2xpZ2libGUgZm9yIHNpbXBsZSBwYWdlcyBhbmQgcm91Z2hseSB0UyBmb3IgY29t
cGxleCBwYWdlcy4gIFdpdGhvdXQKKyAgICAvLyBrbm93aW5nIGluIGFkdmFuY2UgaG93IGxhcmdl
IHRTIGlzIGl0J3MgaGFyZCB0byBkbyBiZXR0ZXIgdGhhbiB0aGlzLgorICAgIC8vIFBlcmhhcHMg
d2UgY291bGQgdHJ5IHRvIHJlbWVtYmVyIHByZXZpb3VzIHZhbHVlcyBhbmQgZm9yd2FyZC1jb21w
ZW5zYXRlLgorCisKKyAgICAvLyBXZSB3YW50IHRvIHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSB0aW1lIGl0J3MgYmVlbiBzaW5jZQorICAgIC8vIG91ciBsYXN0IHVwZGF0
ZS4gIFRoaXMgbWF5IGJlIGxvbmdlciB0aGFuIG91ciBpZGVhbCB0aW1lLCBlc3BlY2lhbGx5IGlm
CisgICAgLy8gdGhlIHBhZ2UgaXMgY29tcGxleCBvciB0aGUgc3lzdGVtIGlzIHNsb3cuCisgICAg
Ly8KKyAgICAvLyBUbyBhdm9pZCBmZWVsaW5nIGxhZ2d5LCBpZiB3ZSd2ZSBqdXN0IHN0YXJ0ZWQg
c21vb3RoIHNjcm9sbGluZyB3ZSBwcmV0ZW5kCisgICAgLy8gd2UndmUgYWxyZWFkeSBhY2NlbGVy
YXRlZCBmb3Igb25lIGlkZWFsIGludGVydmFsLCBzbyB0aGF0IHdlJ2xsIHNjcm9sbCBhdAorICAg
IC8vIGxlYXN0IHNvbWUgZGlzdGFuY2UgaW1tZWRpYXRlbHkuCisgICAgZG91YmxlIGxhc3RTY3Jv
bGxJbnRlcnZhbCA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID8gKFdURjo6Y3VycmVudFRpbWUo
KSAtIGRhdGEtPm1fbGFzdEFuaW1hdGlvblRpbWUpIDogYW5pbWF0aW9uVGltZXJEZWxheTsKKwor
ICAgIC8vIEZpZ3VyZSBvdXQgaG93IGZhciB3ZSd2ZSBhY3R1YWxseSB0cmF2ZWxlZCBhbmQgdXBk
YXRlIG91ciBjdXJyZW50CisgICAgLy8gdmVsb2NpdHkuCisgICAgZmxvYXQgZGlzdGFuY2VUcmF2
ZWxlZDsKKyAgICBpZiAoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPCBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eSkgeworICAgICAgICAvLyBXZSBhY2NlbGVyYXRlIGF0IGEgY29uc3RhbnQgcmF0ZSB1
bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgYWNjZWxl
cmF0aW9uUmF0ZSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5IC8gYWNjZWxlcmF0aW9uVGltZSgp
OworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hldGhlciBjb250YW50IGFjY2VsZXJhdGlvbiBo
YXMgY2F1c2VkIHVzIHRvIHJlYWNoIG91cgorICAgICAgICAvLyB0YXJnZXQgdmVsb2NpdHkuCisg
ICAgICAgIGZsb2F0IHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlID0gYWNjZWxlcmF0aW9uUmF0ZSAq
IGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsTmV3VmVsb2NpdHkg
PSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlOworICAg
ICAgICBpZiAocG90ZW50aWFsTmV3VmVsb2NpdHkgPiBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSkg
eworICAgICAgICAgICAgLy8gV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGF0IHNvbWUg
cG9pbnQgYmV0d2VlbiBvdXIgbGFzdAorICAgICAgICAgICAgLy8gdXBkYXRlIGFuZCBub3cuICBU
aGUgZGlzdGFuY2UgdHJhdmVsZWQgY2FuIGJlIGNhbGN1bGF0ZWQgaW4gdHdvCisgICAgICAgICAg
ICAvLyBwaWVjZXM6IHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB3aGlsZSBhY2NlbGVyYXRpbmcsIGFu
ZCB0aGUKKyAgICAgICAgICAgIC8vIGRpc3RhbmNlIHRyYXZlbGVkIGFmdGVyIHJlYWNoaW5nIHRo
ZSB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgICAgICBmbG9hdCBhY3R1YWxWZWxvY2l0eUNoYW5n
ZSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5IC0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHk7Cisg
ICAgICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25JbnRlcnZhbCA9IGFjdHVhbFZlbG9jaXR5Q2hh
bmdlIC8gYWNjZWxlcmF0aW9uUmF0ZTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5jZSB0cmF2
ZWxlZCB1bmRlciBjb25zdGFudCBhY2NlbGVyYXRpb24gaXMgdGhlIGFyZWEKKyAgICAgICAgICAg
IC8vIHVuZGVyIGEgbGluZSBzZWdtZW50IHdpdGggYSBjb25zdGFudCByaXNpbmcgc2xvcGUuICBC
cmVhayB0aGlzCisgICAgICAgICAgICAvLyBpbnRvIGEgdHJpYW5ndWxhciBwb3J0aW9uIGF0b3Ag
YSByZWN0YW5ndWxhciBwb3J0aW9uIGFuZCBzdW0uCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZl
bGVkID0gKChkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChhY3R1YWxWZWxvY2l0eUNoYW5nZSAv
IDIpKSAqIGFjY2VsZXJhdGlvbkludGVydmFsKTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5j
ZSB0cmF2ZWxlZCBhdCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGlzIHNpbXBseQorICAgICAgICAgICAg
Ly8gKHRhcmdldCB2ZWxvY2l0eSkgKiAocmVtYWluaW5nIHRpbWUgYWZ0ZXIgYWNjZWxlcmF0aW5n
KS4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgKz0gKGRhdGEtPm1fZGVzaXJlZFZlbG9j
aXR5ICogKGxhc3RTY3JvbGxJbnRlcnZhbCAtIGFjY2VsZXJhdGlvbkludGVydmFsKSk7CisgICAg
ICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ29uc3RhbnQgYWNjZWxlcmF0aW9u
IHRocm91Z2ggdGhlIGVudGlyZSB0aW1lIGludGVydmFsLgorICAgICAgICAgICAgZGlzdGFuY2VU
cmF2ZWxlZCA9IChkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChwb3RlbnRpYWxWZWxvY2l0eUNo
YW5nZSAvIDIpKSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgICAgIGRhdGEtPm1fY3Vy
cmVudFZlbG9jaXR5ID0gcG90ZW50aWFsTmV3VmVsb2NpdHk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0
eSwgc28gdGhlIGRpc3RhbmNlIHdlJ3ZlCisgICAgICAgIC8vIHRyYXZlbGVkIGlzIHNpbXBseSAo
Y3VycmVudCB2ZWxvY2l0eSkgKiAoZWxhcHNlZCB0aW1lKS4KKyAgICAgICAgZGlzdGFuY2VUcmF2
ZWxlZCA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICogbGFzdFNjcm9sbEludGVydmFsOworICAg
ICAgICAvLyBJZiBvdXIgZGVzaXJlZCB2ZWxvY2l0eSBoYXMgZGVjcmVhc2VkLCBkcm9wIHRoZSBj
dXJyZW50IHZlbG9jaXR5IHRvby4KKyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBk
YXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICB9CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSBz
Y3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGRpc3RhbmNlIHRyYXZlbGVkLgorICAgIGlmIChk
aXN0YW5jZVRyYXZlbGVkID49IGFicyhkYXRhLT5tX2Rlc2lyZWRQb3MgLSBkYXRhLT5tX2N1cnJl
bnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZlbGVkIGZhciBlbm91Z2ggdG8gcmVhY2gg
dGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290aAorICAgICAgICAvLyBzY3JvbGxpbmcu
CisgICAgICAgIGRhdGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAg
ICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFy
Z2V0IHBvc2l0aW9uLiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAg
Ly8gbmV4dCB1cGRhdGUuCisgICAgICAgIGlmIChkYXRhLT5tX2N1cnJlbnRQb3MgPiBkYXRhLT5t
X2Rlc2lyZWRQb3MpCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gLWRpc3RhbmNlVHJh
dmVsZWQ7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFBvcyArPSBkaXN0YW5jZVRyYXZlbGVkOwor
ICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1l
ckRlbGF5KTsKKyAgICAgICAgZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24oSW50UG9pbnQobV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsIG1fdmVydGljYWxEYXRh
Lm1fY3VycmVudFBvcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvcldpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsQW5pbWF0b3JXaW5faAorI2RlZmluZSBTY3JvbGxBbmltYXRvcldpbl9oCisKKyNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JXaW4gOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3Ig
eworcHVibGljOgorICAgIFNjcm9sbEFuaW1hdG9yV2luKFNjcm9sbGJhckNsaWVudCopOworICAg
IHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yV2luKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcG9zc2li
bHlBbmltYXRlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9s
bFNvdXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllZFN0ZXAsIGZsb2F0IG1heFBvcywg
Ym9vbCYgY2hhbmdlZFNvbWV0aGluZyk7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2
YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9s
bEFuaW1hdG9yV2luKiBwYXJlbnQpOworCisgICAgICAgIGZsb2F0IG1fY3VycmVudFBvczsKKyAg
ICAgICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxvY2l0
eTsKKyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBtX2xh
c3RBbmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9hbmlt
YXRpb25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25UaW1l
KCk7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAg
dm9pZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOworICAg
IHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2b2lk
IGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFNjcm9sbGJhckNsaWVudCogbV9j
bGllbnQ7CisgICAgUGVyQXhpc0RhdGEgbV9ob3Jpem9udGFsRGF0YTsKKyAgICBQZXJBeGlzRGF0
YSBtX3ZlcnRpY2FsRGF0YTsKK307CisKK30KKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgJKHJldmlzaW9u
IDY1OTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcm9sbEJ5
UGl4ZWwKICAgICB9OwogCisgICAgZW51bSBTY3JvbGxTb3VyY2UgeworICAgICAgICBLZXlwcmVz
cywKKyAgICAgICAgV2hlZWwsCisgICAgICAgIFNjcm9sbGJhclBhcnRPck1lbnUsICAvLyAiU2Ny
b2xsYmFyIiBhbG9uZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgUHJvZ3Jh
bW1hdGljCisgICAgfTsKKwogICAgIGVudW0gU2Nyb2xsYmFyT3JpZW50YXRpb24geyBIb3Jpem9u
dGFsU2Nyb2xsYmFyLCBWZXJ0aWNhbFNjcm9sbGJhciB9OwogCiAgICAgZW51bSBTY3JvbGxiYXJN
b2RlIHsgU2Nyb2xsYmFyQXV0bywgU2Nyb2xsYmFyQWx3YXlzT2ZmLCBTY3JvbGxiYXJBbHdheXNP
biB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA2NTkzNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2ICsy
NzMsMTQgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aQogICAgIHJl
dHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRoKCksIG1heGltdW1PZmZzZXQuaGVpZ2h0
KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIHRy
dWUpOworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBTY3JvbGxWaWV3
Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgLy8gRmlndXJlIG91
dCBpZiB3ZSByZWFsbHkgbW92ZWQuCkBAIC0zMTUsMTcgKzMyMywxNyBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0CiAgICAgdXBkYXRlU2Nyb2xsYmFycyhJbnRTaXpl
KG5ld1Njcm9sbFBvc2l0aW9uLngoKSwgbmV3U2Nyb2xsUG9zaXRpb24ueSgpKSk7CiB9CiAKLWJv
b2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQorYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNv
dXJjZSBzb3VyY2UpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVy
biBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKIAogICAgIGlmIChkaXJl
Y3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKICAgICAgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgcmV0
dXJuIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBz
b3VyY2UpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIp
Ci0gICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSk7CisgICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlKTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpAQCAtNDQxLDcgKzQ0OSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBk
YXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsK
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRo
LCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZh
bHVlKHNjcm9sbC53aWR0aCgpKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRW
YWx1ZShzY3JvbGwud2lkdGgoKSwgZmFsc2UpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3Vw
cHJlc3NlZCkKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJ
bnZhbGlkYXRpb24oZmFsc2UpOyAKICAgICB9IApAQCAtNDYzLDcgKzQ3MSw3IEBAIHZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFn
ZVN0ZXApOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dEhlaWdodCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSwgZmFsc2UpOwogICAgICAgICBpZiAobV9zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAgICB9CkBAIC02NjksMTEgKzY3NywxNiBAQCB2b2lk
IFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlCiAgICAgICAgIGlmIChlLmdyYW51
bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdlV2hlZWxFdmVudCkgewogICAgICAgICAgICAgQVNTRVJU
KGRlbHRhWCA9PSAwKTsKICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVkgPCAwOwot
ICAgICAgICAgICAgZGVsdGFZID0gbWF4KG1heDxpbnQ+KHZpc2libGVIZWlnaHQoKSAqIFNjcm9s
bGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHZpc2libGVIZWlnaHQoKSAtIFNj
cm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisgICAgICAgICAgICBkZWx0
YVkgPSBtYXgobWF4KHN0YXRpY19jYXN0PGZsb2F0Pih2aXNpYmxlSGVpZ2h0KCkpICogU2Nyb2xs
YmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZp
c2libGVIZWlnaHQoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSksIDEu
MGYpOwogICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgIGRlbHRhWSA9
IC1kZWx0YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAt
ZGVsdGFZKSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFjayBvbiBzY3JvbGxCeSgp
IGlmIHRoZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVybyBkZWx0YT8KKyAgICAgICAg
aWYgKGRlbHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBXaGVlbCwgZGVsdGFZ
KTsKKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBp
eGVsLCBXaGVlbCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5o
CShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw4IEBAIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lk
Z2V0LCBwdWJsaWMKIHB1YmxpYzoKICAgICB+U2Nyb2xsVmlldygpOwogCi0gICAgLy8gU2Nyb2xs
YmFyQ2xpZW50IGZ1bmN0aW9uLiBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlciB0d28uCisg
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhl
IG90aGVycy4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4g
VGhlIFNjcm9sbFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0
aGUKQEAgLTE1NCw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxCeShjb25zdCBJ
bnRTaXplJiBzKSB7IHJldHVybiBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsg
cyk7IH0KIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gc2Nyb2xscyBieSBsaW5lcywgcGFnZXMgb3Ig
cGl4ZWxzLgotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVh
bCBjb250ZW50cyBvZiB0aGUgdmlldyAoZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBh
cyBuZWVkZWQpLgogICAgIHZvaWQgc2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNjU5MzQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMiAr
MTAxLDEyIEBAIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3Rl
clNjcm9sbGJhcih0aGlzKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQor
Ym9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24p
CiB7CiAgICAgdiA9IG1heChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7
CiAgICAgaWYgKHZhbHVlKCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFs
dWUgc3RheWVkIHRoZSBzYW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVu
dFBvcyh2LCAhZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEyOCw3ICsxMjgsNyBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0U3RlcHMoaW50IGxpbmVTdGVwLCBp
CiAgICAgbV9waXhlbFN0ZXAgPSAxLjBmIC8gcGl4ZWxzUGVyU3RlcDsKIH0KIAotYm9vbCBTY3Jv
bGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgU2Nyb2xsYmFyOjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAjaWYgSEFWRShBQ0NF
U1NJQklMSVRZKQogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KSB7CkBAIC0xNDIsMjQgKzE0MiwyOCBAQCBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkCiAgICAgfQogI2VuZGlmCiAKLSAgICBmbG9hdCBzdGVwID0gMDsKLSAgICBpZiAo
KGRpcmVjdGlvbiA9PSBTY3JvbGxVcCAmJiBtX29yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xs
YmFyKSB8fCAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQgJiYgbV9vcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgc3RlcCA9IC0xOwotICAgIGVsc2UgaWYgKChkaXJl
Y3Rpb24gPT0gU2Nyb2xsRG93biAmJiBtX29yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFy
KSB8fCAoZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikpCi0gICAgICAgIHN0ZXAgPSAxOworICAgIC8vIElnbm9yZSBwZXJwZW5k
aWN1bGFyIHNjcm9sbHMuCisgICAgaWYgKChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpID8gKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93
bikgOiAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQgfHwgZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgZmxvYXQgc3RlcDsKICAgICBpZiAoZ3Jh
bnVsYXJpdHkgPT0gU2Nyb2xsQnlMaW5lKQotICAgICAgICBzdGVwICo9IG1fbGluZVN0ZXA7Cisg
ICAgICAgIHN0ZXAgPSBtX2xpbmVTdGVwOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNj
cm9sbEJ5UGFnZSkKLSAgICAgICAgc3RlcCAqPSBtX3BhZ2VTdGVwOworICAgICAgICBzdGVwID0g
bV9wYWdlU3RlcDsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50
KQotICAgICAgICBzdGVwICo9IG1fdG90YWxTaXplOworICAgICAgICBzdGVwID0gbV90b3RhbFNp
emU7CiAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKLSAgICAgICAg
c3RlcCAqPSBtX3BpeGVsU3RlcDsKLQotICAgIGZsb2F0IG5ld1BvcyA9IG1fY3VycmVudFBvcyAr
IHN0ZXAgKiBtdWx0aXBsaWVyOworICAgICAgICBzdGVwID0gbV9waXhlbFN0ZXA7CisgICAgaWYg
KGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAg
ICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOworICAgIGZsb2F0IG11bHRpcGxpZWRTdGVwID0g
c3RlcCAqIG11bHRpcGxpZXI7CiAgICAgZmxvYXQgbWF4UG9zID0gbV90b3RhbFNpemUgLSBtX3Zp
c2libGVTaXplOwotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obmV3UG9zLCBtYXhQ
b3MpLCAwLjBmKSk7CisgICAgYm9vbCBjaGFuZ2VkU29tZXRoaW5nOworICAgIGlmIChjbGllbnQo
KSAmJiBjbGllbnQoKS0+cG9zc2libHlBbmltYXRlU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllZFN0ZXAsIG1heFBvcywgY2hhbmdlZFNvbWV0aGlu
ZykpCisgICAgICAgIHJldHVybiBjaGFuZ2VkU29tZXRoaW5nOworCisgICAgcmV0dXJuIHNldEN1
cnJlbnRQb3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyBtdWx0aXBsaWVkU3RlcCwgbWF4UG9zKSwg
MC4wZiksIHRydWUpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpAQCAtMjIx
LDcgKzIyNSw3IEBAIHZvaWQgU2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQoZG8KICAg
ICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGFycm93cyBhbmQgdHJhY2suCi0gICAgaWYgKHNjcm9s
bChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFy
aXR5KCkpKQorICAgIGlmIChzY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJl
c3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpLCBTY3JvbGxiYXJQYXJ0T3JNZW51KSkKICAgICAg
ICAgc3RhcnRUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjkxLDExICsyOTUsMTQgQEAg
dm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQogICAgIGVsc2UgaWYgKGRlbHRhIDwg
MCkKICAgICAgICAgZGVsdGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7CiAgICAgaWYgKGRlbHRh
KQotICAgICAgICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRl
bHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7CisgICAgICAgIHNldEN1
cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgp
IC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pLCB0cnVlKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNl
dEN1cnJlbnRQb3MoZmxvYXQgcG9zKQorYm9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxv
YXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKQogeworICAgIGlmIChub3RpZnlTY3Jv
bGxBbmltYXRvciAmJiBjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBwb3MpOworCiAgICAgaWYgKHBvcyA9
PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQwLDcgKzM0Nyw3
IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3IKIHsKICAgICBpZiAo
bV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKICAgICAgICAgaWYgKHRoZW1lKCktPnNob3Vs
ZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2dCkpCi0gICAgICAgICAgICBzZXRDdXJyZW50
UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdp
biwgdHJ1ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRodW1iKG1fb3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkpLngoKSA6CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgJKHJldmlzaW9uIDY1OTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAKICAgICB2b2lkIHNldFN0ZXBz
KGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxzUGVyU3RlcCA9IDEpOwotICAg
IGJvb2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVlKGludCwgYm9vbCBmcm9tU2Ny
b2xsQW5pbWF0aW9uKTsKICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBp
bnQgdG90YWxTaXplKTsKICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2Vk
UG9zID0gcDsgfQogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlw
bGllciA9IDEpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKIApAQCAtMTQyLDcgKzE0Miw3IEBAIHByb3Rl
Y3RlZDoKICAgICBTY3JvbGxHcmFudWxhcml0eSBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5
KCk7CiAgICAgCiAgICAgdm9pZCBtb3ZlVGh1bWIoaW50IHBvcyk7Ci0gICAgYm9vbCBzZXRDdXJy
ZW50UG9zKGZsb2F0IHBvcyk7CisgICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgYm9v
bCBub3RpZnlTY3JvbGxBbmltYXRvcik7CiAKICAgICBTY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50
OwogICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDY1OTM0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2lm
bmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCisjaW5j
bHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKQEAgLTM0LDcgKzM2LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Ny
b2xsYmFyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQoKSB7
fQorICAgIFNjcm9sbGJhckNsaWVudCgpIDogbV9zY3JvbGxBbmltYXRvcihTY3JvbGxBbmltYXRv
cjo6cG9zc2libHlDcmVhdGVXaXRoQ2xpZW50KHRoaXMpKSB7IH0KKyAgICB2aXJ0dWFsIH5TY3Jv
bGxiYXJDbGllbnQoKSB7IH0KKworICAgIGJvb2wgcG9zc2libHlBbmltYXRlU2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3Jv
bGxTb3VyY2Ugc291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVkU3RlcCwgZmxvYXQg
bWF4UG9zLCBib29sJiBjaGFuZ2VkU29tZXRoaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2Nyb2xsQW5pbWF0b3IgPyBtX3Njcm9sbEFuaW1hdG9yLT5wb3NzaWJseUFuaW1hdGVTY3JvbGwo
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBzdGVwLCBtdWx0aXBsaWVkU3RlcCwgbWF4
UG9zLCBjaGFuZ2VkU29tZXRoaW5nKSA6IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgc2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBmbG9hdCBwb3MpCisgICAgeworICAgICAgICBpZiAobV9zY3JvbGxBbmltYXRvcikKKyAg
ICAgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3ItPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbihvcmllbnRhdGlvbiwgcG9zKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKKwogICAgIHZpcnR1
YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9IDA7
CkBAIC02Nyw2ICs4NCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxi
YXItPldpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAgICAg
fQorCitwcml2YXRlOgorICAgIE93blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRv
cjsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lv
biA2NTkzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MiwxMyArODIsMTMgQEAgYm9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNv
bnN0IFBsYXRmbwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEJvdHRv
bSkKICAgICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxl
Y3RlZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVm
dDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFs
ID8gU2Nyb2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgU2Nyb2xsYmFyUGFydE9yTWVu
dSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURvd24pCi0gICAgICAg
IHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBh
Z2UsIDEpOworICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xs
RG93biwgU2Nyb2xsQnlQYWdlLCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChh
Y3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwg
PyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSwgMSk7CisgICAgICAgIHNjcm9s
bChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUsIFNjcm9s
bGJhclBhcnRPck1lbnUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9s
bERvd24pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxE
b3duLCBTY3JvbGxCeUxpbmUsIDEpOworICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9s
bFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsK
ICNlbmRpZiAvLyBRVF9OT19DT05URVhUTUVOVQogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA2NTkzNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
NCw2ICs2NjQsMTIgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmCiAg
ICAgICAgIDo6UmVsZWFzZURDKG1fcG9wdXAsIGxvY2FsREMpOwogfQogCit2b2lkIFBvcHVwTWVu
dVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0
KQoreworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVl
KG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciogc2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CkBAIC05
NzksNyArOTg1LDcgQEAgTFJFU1VMVCBQb3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBoV25kLAog
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDog
U2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOworICAgICAgICAgICAgc2Nyb2xsYmFy
KCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBX
aGVlbCwgYWJzKGkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIp
IHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KIAogICAgIC8vIFNjcm9sbEJhckNs
aWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0
IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjU5MzQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEs
MTAgKzQyMSwxMCBAQCBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0CiAg
ICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJCb3g6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5kZXJCb3g6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BO
b2RlKQogewogICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCAmJiBsLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAobCAm
JiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKSkg
ewogICAgICAgICBpZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDM1LDcgKzQzNSw3IEBAIGJvb2wgUmVuZGVyQm94
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFp
bmluZ0Jsb2NrKCk7CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICBy
ZXR1cm4gYi0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BO
b2RlKTsKKyAgICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBz
b3VyY2UsIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwogICAg
IGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyID0gMS4wZiwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0
IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNhbkJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5C
ZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBh
dXRvc2Nyb2xsKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCShyZXZp
c2lvbiA2NTkzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCwxMiBAQCB2b2lkIFJlbmRlckRhdGFHcmlkOjpwYWlu
dENvbHVtbkhlYWRlcihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlv
bnMKK3ZvaWQgUmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXIt
PnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3
LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MRGF0YUdyaWRFbGVtZW50KiBncmlkRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRhR3JpZEVsZW1lbnQqPihub2RlKCkpOyB9
CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAkocmV2aXNpb24gNjU5MzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOSArMTM2Myw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFRvT2Zmc2V0KGludCB4LAogCiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAgICAg
ICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNl
dCgpKTsKKyAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxz
ZSk7CiAgICAgICAgIGlmIChtX3ZCYXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1f
c2Nyb2xsWSk7CisgICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSwgZmFsc2Up
OwogICAgIH0KIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgpAQCAtMTYx
OCw2ICsxNjE4LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0K
ICAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwg
dGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNv
ciBpbiB2aWV3LgogfQogCit2b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAg
ICAgbV9oQmFyLT5zZXRWYWx1ZShvZmZzZXQueCgpLCB0cnVlKTsKKyAgICBpZiAobV92QmFyKQor
ICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJl
bmRlckxheWVyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAvLyBVcGRhdGUgc2Ny
b2xsIHBvc2l0aW9uIGZyb20gc2Nyb2xsYmFycy4KQEAgLTIwNjgsNyArMjA3Niw3IEBAIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAgICAgLy8gc28gdGhpcyBp
cyBuZWVkZWQgdG8ga2VlcCBldmVyeXRoaW5nIHdvcmtpbmcgKHNlZSBob3cgc2Nyb2xsWE9mZnNl
dCgpCiAgICAgICAgIC8vIGRpZmZlcnMgZnJvbSBzY3JvbGxZT2Zmc2V0KCkgdG8gZ2V0IGFuIGlk
ZWEgb2Ygd2h5IHRoZSBob3Jpem9udGFsIGFuZAogICAgICAgICAvLyB2ZXJ0aWNhbCBzY3JvbGxi
YXJzIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseSkuCi0gICAgICAgIG1faEJhci0+c2V0
VmFsdWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxY
T2Zmc2V0KCksIGZhbHNlKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikgewogICAgICAgICBpbnQg
Y2xpZW50SGVpZ2h0ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKQEAgLTIyMjksNyArMjIzNyw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2wKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jv
b2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlw
bGllcikKIHsKICAgICBib29sIGRpZEhvcml6b250YWxTY3JvbGwgPSBmYWxzZTsKICAgICBib29s
IGRpZFZlcnRpY2FsU2Nyb2xsID0gZmFsc2U7CkBAIC0yMjM4LDEzICsyMjQ2LDEzIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24KICAgICAgICAgaWYgKGdyYW51bGFy
aXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpIHsKICAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSBm
b3IgdGhlIFNjcm9sbEJ5RG9jdW1lbnQgZ3JhbnVsYXJpdHkuIEEgZG9jdW1lbnQgc2Nyb2xsIGNh
biBvbmx5IGJlIHVwIAogICAgICAgICAgICAgLy8gb3IgZG93biBhbmQgaW4gYm90aCBjYXNlcyB0
aGUgaG9yaXpvbnRhbCBiYXIgZ29lcyBhbGwgdGhlIHdheSB0byB0aGUgbGVmdC4KLSAgICAgICAg
ICAgIGRpZEhvcml6b250YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3Jv
bGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGRpZEhvcml6b250YWxTY3Jv
bGwgPSBtX2hCYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeURvY3VtZW50LCBzb3VyY2Us
IG11bHRpcGxpZXIpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRpZEhvcml6b250YWxT
Y3JvbGwgPSBtX2hCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKKyAgICAgICAgICAgIGRpZEhvcml6b250YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIpOwogICAgIH0KIAogICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIGRpZFZlcnRpY2FsU2Nyb2xsID0gbV92QmFyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgICAgIGRpZFZlcnRpY2FsU2Ny
b2xsID0gbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0
aXBsaWVyKTsKIAogICAgIHJldHVybiAoZGlkSG9yaXpvbnRhbFNjcm9sbCB8fCBkaWRWZXJ0aWNh
bFNjcm9sbCk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDY1OTM0
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
Mjc0LDcgKzI3NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBs
aWVyKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoKTsKIAogICAgIHZvaWQgcmVzaXplKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEludFNpemUmKTsKQEAgLTUxOCw2ICs1MTgsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAKIAogICAg
IC8vIFNjcm9sbEJhckNsaWVudCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3Jv
bGxUb1JldmVhbEVsZW1lbgogCiAgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKICAgICBp
ZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQpOworICAg
ICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIGZhbHNlKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtNTEwLDkgKzUxMCw5IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bGlzdElu
ZGV4SXNWaXNpYmxlKGkKICAgICByZXR1cm4gaW5kZXggPj0gbV9pbmRleE9mZnNldCAmJiBpbmRl
eCA8IG1faW5kZXhPZmZzZXQgKyBudW1WaXNpYmxlSXRlbXMoKTsKIH0KIAotYm9vbCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKikKK2Jvb2wgUmVuZGVyTGlz
dEJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2Rl
KiopCiB7Ci0gICAgcmV0dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcik7CiB9CiAKIHZv
aWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKQEAgLTUy
Myw2ICs1MjMsMTIgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZQog
ICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCit2b2lk
IFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVl
KG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdl
ZChTY3JvbGxiYXIqKQogewogICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZhbHVlKCk7CkBA
IC01NzgsNyArNTg0LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
dwogICAgICAgICByZXR1cm47CiAgICAgbV9pbmRleE9mZnNldCA9IGluZGV4OwogICAgIGlmICht
X3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgpOworICAgICAgICBtX3ZCYXIt
PnNldFZhbHVlKGluZGV4LCBmYWxzZSk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNjU5MzQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDcgKzY4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50SW5PdmVyZmxv
d0NvbnRyb2woSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwog
Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAg
ICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxp
bmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsKQEAg
LTk2LDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgLy8g
U2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNjU5MzQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcxLDEyICsxMDcxLDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRT
Y3IKICAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRTY3JvbGxUb3AobmV3VG9wKTsKIH0K
IAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0
b3BOb2RlKQogewogICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+
cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgaWYgKGxheWVyICYmIGxheWVy
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOworICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGll
ciwgc3RvcE5vZGUpOwogfQogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5oCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
VG9wKGludCk7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgTm9kZSoqIHN0b3BOb2RlID0g
MCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSA9
IDApOwogCiAgICAgaW50IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9h
dCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY1OTM1KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDEwLTA4LTI0ICBQZXRlciBLYXN0aW5nICA8cGthc3Rp
bmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1NgorCisgICAgICAgICogcHVibGljL1dlYlNjcm9sbGJhci5oOiBQbHVtYiBzY3Jv
bGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXI6Oik6Cisg
ICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFu
ZCBzb3VyY2VzLgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOiBQbHVtYiBzY3JvbGwg
Y29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVD
b21tYW5kKToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHA6IFBsdW1iIG5ldyBT
Y3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLiAg
QWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4gIEZpeCBjb21waWxhdGlvbiB3YXJu
aW5ncy4KKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNj
cm9sbGJhckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJh
ckltcGw6Om9uS2V5RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJ
bXBsLmg6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwg
Y29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6IFBsdW1iIHNj
cm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3Jv
bGxWaWV3V2l0aEtleWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnByb3Bh
Z2F0ZVNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6IFBsdW1iIHNjcm9sbCBj
b21tYW5kIHNvdXJjZXMuCisgICAgICAgICogc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5j
cHA6IFVwZGF0ZSBjb21tZW50cyBub3cgdGhhdCB3ZSBoYXZlIHNtb290aCBzY3JvbGxpbmcuCisg
ICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZlbnRGYWN0b3J5Ojptb3VzZVdoZWVsRXZlbnQpOgor
CisyMDEwLTA4LTI0ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNj
cm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAg
ICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQpOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxWaWV3V2l0aEtleWJvYXJkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnByb3BhZ2F0ZVNjcm9sbCk6CisgICAgICAgICogc3Jj
L1dlYlZpZXdJbXBsLmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICog
c3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6IFVwZGF0ZSBjb21tZW50cyBub3cgdGhh
dCB3ZSBoYXZlIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZl
bnRGYWN0b3J5Ojptb3VzZVdoZWVsRXZlbnQpOgorCiAyMDEwLTA4LTI0ICBNYXJjdXMgQnVsYWNo
ICA8YnVsYWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Js
b3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgJKHJldmlzaW9uIDY1
OTM0KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNiArNTksMTMgQEAgcHVibGljOgogICAgICAgICBTY3JvbGxCeVBpeGVsCiAg
ICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291cmNlIHsKKyAgICAgICAgS2V5cHJlc3MsCisgICAg
ICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxiYXJQYXJ0T3JNZW51LCAgLy8gIlNjcm9sbGJhciIg
YWxvbmUgY2xhc2hlcyB3aXRoIHRoZSBjbGFzcyBuYW1lCisgICAgICAgIFByb2dyYW1tYXRpYwor
ICAgIH07CisKICAgICAvLyBDcmVhdGVzIGEgV2ViU2Nyb2xsYmFyLgogICAgIFdFQktJVF9BUEkg
c3RhdGljIFdlYlNjcm9sbGJhciogY3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVudGF0
aW9uKTsKIApAQCAtNzQsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgdmFsdWUo
KSBjb25zdCA9IDA7CiAKICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHZhbHVlLgotICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZShpbnQgcG9zaXRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWUoaW50IHBvc2l0aW9uLCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pID0gMDsKIAogICAg
IC8vIFNldHMgdGhlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgcmVnaW9uIGluIHBpeGVscy4gIGku
ZS4gaWYgYSBkb2N1bWVudCBpcwogICAgIC8vIDgwMHgxMDAwMCBwaXhlbHMgYW5kIHRoZSB2aWV3
cG9ydCBpcyAxMDAweDEwMDAgcGl4ZWxzLCB0aGVuIHNldExvY2F0aW9uCkBAIC04NCw3ICs5MSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXplKSA9
IDA7CiAKICAgICAvLyBTY3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVuIGdyYW51
bGFyaXR5LgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9h
dCBtdWx0aXBsaWVyKSA9IDA7CiAKICAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOwpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCShyZXZp
c2lvbiA2NTkzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsMTEgQEAgQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJTY3JvbGxiYQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJT
Y3JvbGxiYXI6OlNjcm9sbEJ5RG9jdW1lbnQsIFNjcm9sbEJ5RG9jdW1lbnQpOwogQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5UGl4ZWwsIFNjcm9sbEJ5
UGl4ZWwpOwogCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6S2V5
cHJlc3MsIEtleXByZXNzKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xs
YmFyOjpXaGVlbCwgV2hlZWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3Jv
bGxiYXI6OlNjcm9sbGJhclBhcnRPck1lbnUsIFNjcm9sbGJhclBhcnRPck1lbnUpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlByb2dyYW1tYXRpYywgUHJvZ3Jh
bW1hdGljKTsKKwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTZXR0aW5nczo6RWRp
dGluZ0JlaGF2aW9yTWFjLCBFZGl0aW5nTWFjQmVoYXZpb3IpOwogQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJTZXR0aW5nczo6RWRpdGluZ0JlaGF2aW9yV2luLCBFZGl0aW5nV2luZG93
c0JlaGF2aW9yKTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2
aXNpb24gNjU5MzQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNTIsMTAgKzExNTIsMTAgQEAgYm9vbCBXZWJGcmFtZUltcGw6OmV4
ZWN1dGVDb21tYW5kKGNvbnN0CiAgICAgLy8gbW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCBhbmQg
bW92ZVRvRW5kZkRvY3VtZW50IGFyZSBvbmx5IGhhbmRsZWQgYnkgV2ViS2l0CiAgICAgLy8gZm9y
IGVkaXRhYmxlIG5vZGVzLgogICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPmNhbkVkaXQoKSAm
JiB3ZWJOYW1lID09ICJtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IikKLSAgICAgICAgcmV0dXJu
IHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7
CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsVXAsIFNj
cm9sbEJ5RG9jdW1lbnQsIFByb2dyYW1tYXRpYyk7CiAKICAgICBpZiAoIWZyYW1lKCktPmVkaXRv
cigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvRW5kT2ZEb2N1bWVudCIpCi0gICAg
ICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xs
QnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwo
U2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgUHJvZ3JhbW1hdGljKTsKIAogICAgIHJldHVy
biBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZCh3ZWJOYW1lKS5leGVjdXRlKHZhbHVlKTsKIH0K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2aXNpb24g
NjU5MzQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9j
YXRpb24oY29uc3QKICAgICAgIG1fc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAKICAgICBpbnQg
bGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDogbV9zY3JvbGxiYXItPmhlaWdodCgpOwotICAgIGlu
dCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihsZW5ndGggKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9u
VG9TdGVwV2hlblBhZ2luZygpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVu
UGFnZXMoKSksIDEpOworICAgIGludCBwYWdlU3RlcCA9IG1heChtYXgoc3RhdGljX2Nhc3Q8aW50
PihzdGF0aWNfY2FzdDxmbG9hdD4obGVuZ3RoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0
ZXBXaGVuUGFnaW5nKCkpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSksIDEpOwogICAgIG1fc2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICBtX3Njcm9sbGJhci0+c2V0RW5hYmxlZChtX3Nj
cm9sbGJhci0+dG90YWxTaXplKCkgPiBsZW5ndGgpOwogICAgIG1fc2Nyb2xsYmFyLT5zZXRQcm9w
b3J0aW9uKGxlbmd0aCwgbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpKTsKQEAgLTkyLDkgKzkyLDkg
QEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gbV9zY3Jv
bGxiYXItPnZhbHVlKCk7CiB9CiAKLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUoaW50
IHBvc2l0aW9uKQordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24s
IGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikKIHsKLSAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUo
cG9zaXRpb24pOworICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShwb3NpdGlvbiwgZnJvbVNjcm9s
bEFuaW1hdGlvbik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0RG9jdW1lbnRTaXpl
KGludCBzaXplKQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0
RG9jdW1lbnRTaXplKGkKICAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgsIHNp
emUpOwogfQogCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
cikKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBm
bG9hdCBtdWx0aXBsaWVyKQogewogICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBkaXI7CiAg
ICAgYm9vbCBob3Jpem9udGFsID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcjsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6
OnNjcm9sbChTY3JvbGxEaXJlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxSaWdo
dCA6IFNjcm9sbERvd247CiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Ny
b2xsTGVmdCA6IFNjcm9sbFVwOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVy
KTsKKyAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Ny
b2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xs
U291cmNlPihzb3VyY2UpLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBs
OjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKQEAgLTIxNCwx
MSArMjE0LDExIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnMKICAg
ICAgICAgICAgIGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgewogICAgICAgICAgICAgICAg
IEFTU0VSVChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcik7
CiAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhIDwgMDsKLSAgICAgICAgICAg
ICAgICBkZWx0YSA9IG1heChtYXg8aW50PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAqIFNj
cm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIG1fc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAg
ICAgICAgICAgICAgICBkZWx0YSA9IG1heChtYXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xs
YmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFn
aW5nKCksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIFNj
cm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSksIDEuMGYpOwogICAgICAgICAgICAg
ICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGEgKj0gLTE7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUobV9zY3JvbGxiYXIt
PnZhbHVlKCkgLSBkZWx0YSk7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKChtX3Nj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IFdlYkNvcmU6
OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Nyb2xsQnlQaXhlbCwg
V2ViQ29yZTo6V2hlZWwsIGRlbHRhKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKQEAgLTI1NywxMSArMjU3LDE2IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25LZXlE
b3duKGNvbnN0IFcKICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3Jh
bnVsYXJpdHk7CiAgICAgICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChr
ZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7CiAgICAgICAg
ICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24ndCBjb21w
YXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCi0gICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxi
YXItPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3Njcm9sbGJhci0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3Jh
bnVsYXJpdHksIFdlYkNvcmU6OktleXByZXNzKTsKICAgICAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgIG1fc2Nyb2xsYmFyLT5z
ZXRWYWx1ZSgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgV2ViU2Nyb2xs
YmFySW1wbDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopCiB7CiAgICAgbV9jbGll
bnQtPnZhbHVlQ2hhbmdlZCh0aGlzKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xs
YmFySW1wbC5oCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMyArNTEsMTQgQEAgcHVibGljOgog
ICAgIC8vIFdlYktpdDo6V2ViU2Nyb2xsYmFyIG1ldGhvZHMKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TG9jYXRpb24oY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGludCBwb3NpdGlvbik7CisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlKGludCBwb3NpdGlvbiwgYm9vbCBmcm9tU2Nyb2xsQW5pbWF0aW9uKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXplKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNv
cmU6OlNjcm9sbGJhckNsaWVudCBtZXRob2RzCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNjU5MzQpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYyLDcg
Kzc2Miw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQKICAgICBT
Y3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKICAgICBpZiAoIW1hcEtleUNvZGVG
b3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwcm9wYWdhdGVTY3JvbGwoc2Nyb2xs
RGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAgcmV0dXJuIHByb3BhZ2F0ZVNjcm9s
bChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5LCBLZXlwcmVzcyk7CiB9CiAKIGJv
b2wgV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoaW50IGtleUNvZGUsCkBAIC04MTYs
MTkgKzgxNiwxNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpoaWRlU2VsZWN0UG9wdXAoKQogfQogCiBi
b29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERp
cmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxHcmFudWxh
cml0eSBzY3JvbGxHcmFudWxhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTY3JvbGxTb3VyY2Ugc2Nyb2xsU291cmNlKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHNjcm9sbEhhbmRsZWQgPQotICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KHNjcm9sbERpcmVjdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxHcmFudWxhcml0
eSk7CisgICAgYm9vbCBzY3JvbGxIYW5kbGVkID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxPdmVyZmxvdyhzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5LCBzY3JvbGxTb3Vy
Y2UpOwogICAgIEZyYW1lKiBjdXJyZW50RnJhbWUgPSBmcmFtZTsKICAgICB3aGlsZSAoIXNjcm9s
bEhhbmRsZWQgJiYgY3VycmVudEZyYW1lKSB7Ci0gICAgICAgIHNjcm9sbEhhbmRsZWQgPSBjdXJy
ZW50RnJhbWUtPnZpZXcoKS0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkp
OworICAgICAgICBzY3JvbGxIYW5kbGVkID0gY3VycmVudEZyYW1lLT52aWV3KCktPnNjcm9sbChz
Y3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5LCBzY3JvbGxTb3VyY2UpOwogICAgICAg
ICBjdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgfQog
ICAgIHJldHVybiBzY3JvbGxIYW5kbGVkOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAkocmV2aXNpb24gNjU5MzQpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNSw3ICszMDUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUcmll
cyB0byBzY3JvbGwgYSBmcmFtZSBvciBhbnkgcGFyZW50IG9mIGEgZnJhbWUuIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdmlldwogICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAgICBib29sIHByb3BhZ2F0ZVNj
cm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5
KTsKKyAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdl
YkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5LCBXZWJDb3JlOjpTY3JvbGxTb3VyY2UpOwogCiAgICAg
Ly8gTm90aWZpY2F0aW9uIHRoYXQgYSBwb3B1cCB3YXMgb3BlbmVkL2Nsb3NlZC4KICAgICB2b2lk
IHBvcHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcik7Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3Rvcnku
Y3BwCShyZXZpc2lvbiA2NTkzNCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0
RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEzICszOTYsMTYgQEAgV2Vi
TW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogCiAgICAgLy8gQ29udmVydCB3
aGVlbCBkZWx0YSBhbW91bnQgdG8gYSBudW1iZXIgb2YgcGl4ZWxzIHRvIHNjcm9sbC4KICAgICAv
LwotICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgR2Vj
a28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQotICAgIC8vIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVh
bnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91Z2ggdGhlCi0gICAgLy8g
cGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMuICBJRSA3IGlzIH41MCBweC9saW5lLCBhbHRo
b3VnaCB0aGUgdmFsdWUKLSAgICAvLyBzZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5k
IHpvb20gbGV2ZWwuICBTaW5jZSBJRSA3IGhhcyBhIHNtb290aGluZwotICAgIC8vIGFsZ29yaXRo
bSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdodGx5IGxhcmdlciBzY3Jv
bGwgdmFsdWVzCi0gICAgLy8gd2l0aG91dCBmZWVsaW5nIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAw
IHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQKLSAgICAvLyBzY3JvbGwgYW1vdW50IGlz
IHRocmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBIb3cgbWFueSBwaXhlbHMgc2hv
dWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEZpcmVmb3ggdXNlcyB0aGUgaGVpZ2h0IG9mCisgICAg
Ly8gdGhlIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMg
YXMgeW91IGdvIHRocm91Z2gKKyAgICAvLyB0aGUgcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFn
ZXMuICBJRSA4IGlzIH42MCBweC9saW5lLCBhbHRob3VnaCB0aGUKKyAgICAvLyB2YWx1ZSBzZWVt
cyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwuICBBbHNvLCBJRSBkZWZh
dWx0cworICAgIC8vIHRvIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0LCBz
byBpdCBjYW4gZ2V0IGF3YXkgd2l0aAorICAgIC8vIHNvbWV3aGF0IGxhcmdlciBzY3JvbGwgdmFs
dWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMAorICAgIC8vIHB4
IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5l
cyBwZXIgd2hlZWwKKyAgICAvLyB0aWNrKS4gIEV2ZW4gdGhvdWdoIHdlIGhhdmUgc21vb3RoIHNj
cm9sbGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxhcmdlCisgICAgLy8gYXMgSUUgYmVjYXVz
ZSBzdWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBzY3JvbGxzIGZhcnRoZXIgdGhhbiB5b3Ug
d2FudAorICAgIC8vIHdoaWxlIHJlYWRpbmcgYXJ0aWNsZXMuCiAgICAgc3RhdGljIGNvbnN0IGZs
b2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAzLjBmOwogICAgIHdoZWVsRGVs
dGEgLz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRhOwpJ
bmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY1OTM1KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0yNCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0
aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzIzNTYKKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDogUGx1bWIg
c2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21v
dmVfY3Vyc29yKToKKwogMjAxMC0wOC0yNCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDY1OTM0KQorKysgV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDUsOCArMTE0NSw4IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9tb3YKICAgICB9CiAKICAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJm
bG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKQotICAgICAgICBmcmFtZS0+dmlldygpLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgaWYgKCFmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKSkKKyAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXBy
ZXNzKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1OTM1KQorKysg
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAx
MC0wOC0yNCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxp
bmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIFdl
YlZpZXcvV2ViRnJhbWVWaWV3Lm1tOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAg
ICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246Z3JhbnVsYXJp
dHk6c291cmNlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRvQmVnaW5uaW5n
T2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRvRW5kT2ZEb2N1
bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VWZXJ0aWNhbGx5Ol0pOgorICAg
ICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VIb3Jpem9udGFsbHk6XSk6CisgICAgICAgICgtW1dl
YkZyYW1lVmlldyBfc2Nyb2xsTGluZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1l
VmlldyBfc2Nyb2xsTGluZUhvcml6b250YWxseTpdKToKKwogMjAxMC0wOC0yNCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJ
bmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCShyZXZpc2lvbiA2NTkzNCkKKysrIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxOCw3
ICs1MTgsNyBAQCAtICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKICAgICBbc3VwZXIgdmlld0Rp
ZE1vdmVUb1dpbmRvd107CiB9CiAKLS0gKEJPT0wpX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246
KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFNjcm9sbEdyYW51bGFyaXR5
KWdyYW51bGFyaXR5CistIChCT09MKV9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvbGxE
aXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihTY3JvbGxHcmFudWxhcml0eSlncmFudWxh
cml0eSBzb3VyY2U6KFNjcm9sbFNvdXJjZSlzb3VyY2UKIHsKICAgICAvLyBzY3JvbGxpbmcgb3Zl
cmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRN
TFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1bWVudFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhU
TUxWaWV3IGNsYXNzXV0pCkBAIC01MjYsMTIgKzUyNiwxMiBAQCAtIChCT09MKV9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOihTY3JvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJG
cmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4g
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFy
aXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UpOwogfQogCiAtIChCT09MKV9zY3JvbGxUb0Jl
Z2lubmluZ09mRG9jdW1lbnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJl
Y3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtz
ZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9s
bEJ5RG9jdW1lbnQgc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBp
ZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQogICAgICAgICByZXR1cm4gTk87CkBAIC01NDEsNyAr
NTQxLDcgQEAgLSAoQk9PTClfc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50CiAKIC0gKEJPT0wp
X3Njcm9sbFRvRW5kT2ZEb2N1bWVudAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJ
bkRpcmVjdGlvbjpTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnRdKQorICAg
IGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxEb3duIGdyYW51bGFy
aXR5OlNjcm9sbEJ5RG9jdW1lbnQgc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlF
UzsKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQogICAgICAgICByZXR1cm4gTk87CkBA
IC02MTcsNyArNjE3LDcgQEAgLSAoZmxvYXQpX2hvcml6b250YWxQYWdlU2Nyb2xsRGlzdGFuY2UK
IAogLSAoQk9PTClfcGFnZVZlcnRpY2FsbHk6KEJPT0wpdXAKIHsKLSAgICBpZiAoW3NlbGYgX3Nj
cm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVs
YXJpdHk6U2Nyb2xsQnlQYWdlXSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJl
Y3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdl
IHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgaWYgKCFb
c2VsZiBfaXNTY3JvbGxhYmxlXSkKQEAgLTYyOSw3ICs2MjksNyBAQCAtIChCT09MKV9wYWdlVmVy
dGljYWxseTooQk9PTCl1cAogCiAtIChCT09MKV9wYWdlSG9yaXpvbnRhbGx5OihCT09MKWxlZnQK
IHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9s
bExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2VdKQorICAgIGlmIChb
c2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9s
bFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZSBzb3VyY2U6S2V5cHJlc3NdKQogICAgICAg
ICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkKQEAgLTY0MSw3
ICs2NDEsNyBAQCAtIChCT09MKV9wYWdlSG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIAogLSAoQk9P
TClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wpdXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9s
bE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJp
dHk6U2Nyb2xsQnlMaW5lXSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rp
b246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lIHNv
dXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9p
c1Njcm9sbGFibGVdKQpAQCAtNjUzLDcgKzY1Myw3IEBAIC0gKEJPT0wpX3Njcm9sbExpbmVWZXJ0
aWNhbGx5OihCT09MKXVwCiAKIC0gKEJPT0wpX3Njcm9sbExpbmVIb3Jpem9udGFsbHk6KEJPT0wp
bGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8g
U2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZV0pCisgICAg
aWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDog
U2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lIHNvdXJjZTpLZXlwcmVzc10pCiAg
ICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQpJbmRl
eDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTkzNSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0yNCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuCisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9sbGluZyk6CisK
IDIwMTAtMDgtMjQgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUBpbmYudS1zemVnZWQuaHU+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2
aXNpb24gNjU5MzQpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM4Miw3ICsxMzgyLDcgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9s
bGluZyhRSwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgS2V5cHJlc3MpOwogfQogCiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O
X0NIRUNLKDQsIDYsIDApCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNjU5MzUpCisrKyBXZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI0ICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogV2ViVmlldy5jcHA6IFBs
dW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJWaWV3OjprZXlEb3duKToK
KwogMjAxMC0wOC0yMiAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDY1OTM0KQorKysg
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzNyw3ICsxOTM3LDcg
QEAgYm9vbCBXZWJWaWV3OjprZXlEb3duKFdQQVJBTSB2aXJ0dWFsS2V5QwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVybiBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIEtleXByZXNzKTsKIH0KIAogYm9vbCBXZWJWaWV3OjprZXlQcmVzcyhXUEFSQU0gY2hh
ckNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtleURvd24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65459</attachid>
            <date>2010-08-25 11:57:34 -0700</date>
            <delta_ts>2010-08-25 12:05:35 -0700</delta_ts>
            <desc>patch v4.0</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>97265</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNSAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjAyOSkK
KysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDggQEAgaWYgYnVpbGRfcG9y
dCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAgICAg
ICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAgICAn
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAg
ICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0IGNy
YXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNlIHRo
ZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAgICAg
ICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTApLgpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2MDMwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMDEgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEJ5VW5pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bG9jYWxab29tRm9yUmVuZGVyZXIpOiBGaXggc3R5bGUgZ3VpZGUgdmlvbGF0
aW9uLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1h
bmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8g
YW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9w
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
OjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JXaW46OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JXaW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldp
bjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDogQWRkIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3Vy
Y2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4gIEZpeCBjb21waWxhdGlv
biB3YXJuaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBj
b21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDogQWxsb3cg
U2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgcHJlc2VudC4gIFBsdW1iIHNjcm9s
bCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW92ZVRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOiBBbGxvdyBTY3JvbGxBbmltYXRvciB0byBo
YW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aXNTY3JvbGxiYXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOiBBZGQgaG9va3MgZm9yIFNjcm9sbEFuaW1hdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuICBVc2Ugc2Nyb2xsKCkgaW4gcHJlZmVyZW5jZSB0byBzZXRWYWx1ZSgpLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250ZXh0TWVudSk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVXaW46OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51
V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVdpbjo6d25kUHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogSW1wbGVt
ZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4g
IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogSW1wbGVtZW50IG5ldyBT
Y3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IEltcGxlbWVudCBuZXcgU2Ny
b2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExp
c3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Lmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisKIDIwMTAtMDgtMjUgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDYgKzE5NTAsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBAIC0yNTcxLDYgKzI1NzMsOCBAQCBlbmRpZgogCiBp
ZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvcldpbi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzEw
OSw2ICszMTA5LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuaCcsCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw4ICsxMjIyLDEwIEBACiAgICAgICAgICAg
J3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAog
ICAgICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKLSAgICAgICAgICAgIFsnaW5j
bHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRl
JywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9T
a2lhRm9udFdpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJl
bmN5V2luXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAg
ICAgICAgICAgICAjIE1hdGNoIFNhZmFyaSBhbmQgTW96aWxsYSBvbiBXaW5kb3dzLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0
MjU3LDYgKzI0MjU3LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9s
bEFuaW1hdG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxB
bmltYXRvcldpbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTExMiw2ICs1MTEyLDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAw
NTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNj
cm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87
IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJB
RTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlw
dENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDk0Miw2
ICsxMDk0NCw4IEBACiAJCUM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFB
MjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Ny
b2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5p
bWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAw
QzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQx
MjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg0LDYgKzE2Njg4LDggQEAKIAkJCQkxQzYzQTI0
NjBGNzE2NDY2MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3
N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3
RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlDQTNCRjY3QjEwRDk5QkFF
MDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAorCQkJCUNBM0JGNjdEMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4
MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyog
U2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNj
cm9sbGJhclRoZW1lLmggKi8sCkBAIC0xOTgwMCw2ICsxOTgwNiw3IEBACiAJCQkJNDE2RjQ1RjAw
RUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0
Q0MwRTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxi
YXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMzNSw2ICsyMjM0Miw3IEBA
CiAJCQkJOUY3MjMwNTAxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxMjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8q
IFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAw
MDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRUY4NjlGMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnNjcm9sbEJ5VW5pdHMoaW50IHVuaXRzLCBTCiAgICAgICAgICAgICAgICAgZGlyZWN0
aW9uID0gU2Nyb2xsVXA7CiAgICAgICAgICAgICAgICAgdW5pdHMgPSAtdW5pdHM7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0b1JlbmRlckJveChyZW5kKS0+bGF5ZXIoKS0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIHVuaXRzKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQm94KHJl
bmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgUHJvZ3JhbW1hdGlj
LCB1bml0cyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzMsOCArMjczLDggQEAgc3RhdGlj
IGZsb2F0IGxvY2FsWm9vbUZvclJlbmRlcmVyKFJlbmRlcgogICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXMgdGhlIHdyb25nIHRoaW5nIGlmIHR3byBvcHBvc2luZyB6b29tcyBhcmUgaW4gZWZmZWN0IGFu
ZCBjYW5jZWxlZCBlYWNoCiAgICAgLy8gb3RoZXIgb3V0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgd2UnZCBoYXZlIHRvIGNyYXdsIHVwIHRoZSB3aG9sZSByZW5kZXIgdHJlZSBldmVyeQog
ICAgIC8vIHRpbWUgKG9yIHN0b3JlIGFuIGFkZGl0aW9uYWwgYml0IGluIHRoZSBSZW5kZXJTdHls
ZSB0byBpbmRpY2F0ZSB0aGF0IGEgem9vbSB3YXMgc3BlY2lmaWVkKS4KLSAgICBmbG9hdCB6b29t
RmFjdG9yID0gMS4wZjsKLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSAhPSAxLjBmKSB7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CisgICAgaWYgKHJlbmRlcmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgIT0gMSkgewogICAgICAgICAvLyBOZWVkIHRvIGZp
bmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIFJlbmRlck9iamVjdCB0aGF0IHNldCB1cAogICAgICAg
ICAvLyBhIGRpZmZlcmluZyB6b29tLCBhbmQgdGhlbiB3ZSBkaXZpZGUgb3VyIHJlc3VsdCBieSBp
dCB0byBlbGltaW5hdGUgdGhlIHpvb20uCiAgICAgICAgIFJlbmRlck9iamVjdCogcHJldiA9IHJl
bmRlcmVyOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMyArMTMw
LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHQKICAgICBmbG9h
dCBhYnNEZWx0YSA9IGRlbHRhID4gMCA/IGRlbHRhIDogLWRlbHRhOwogICAgIAogICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBXaGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
IAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1
cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBw
b3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAg
ICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJl
Y3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzRGVsdGEs
IHN0b3BOb2RlKTsKIAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkK
LSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZl
RGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBz
dG9wTm9kZSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAg
PyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVsLCBX
aGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtOTc1LDcgKzk3NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZXRNb3VzZVByZXNzTm9k
ZShQYXMKICAgICBtX21vdXNlUHJlc3NOb2RlID0gbm9kZTsKIH0KIAotYm9vbCBFdmVudEhhbmRs
ZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUpCitib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIE5vZGUqIHN0YXJ0aW5nTm9k
ZSkKIHsKICAgICBOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOwogCkBAIC05ODcsNyArOTg3LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAgIGlm
IChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5pc0xp
c3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSkpIHsKICAgICAgICAgICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05OTYsMTcgKzk5NiwxNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE5vZGUqIHN0
YXJ0aW5nTm9kZSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xs
U291cmNlIHNvdXJjZSwgTm9kZSogc3RhcnRpbmdOb2RlKQogewogICAgIC8vIFRoZSBsYXlvdXQg
bmVlZHMgdG8gYmUgdXAgdG8gZGF0ZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNjcm9sbC4gV2Ug
bWF5IGJlCiAgICAgLy8gaGVyZSBiZWNhdXNlIG9mIGFuIG9uTG9hZCBldmVudCwgaW4gd2hpY2gg
Y2FzZSB0aGUgZmluYWwgbGF5b3V0IGhhc24ndCBiZWVuIHBlcmZvcm1lZCB5ZXQuCiAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgc3RhcnRpbmdOb2RlKTsKKyAgICBib29sIGhhbmRsZWQgPSBzY3JvbGxPdmVyZmxvdyhkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIHN0YXJ0aW5nTm9kZSk7CiAgICAgaWYgKCFoYW5k
bGVkKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7CiAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgICAgICAgICBo
YW5kbGVkID0gdmlldyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSA6IGZh
bHNlOworICAgICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgc291cmNlKSA6IGZhbHNlOwogICAgICAgICAgICAgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgfSB3aGlsZSAoIWhhbmRsZWQgJiYgZnJhbWUp
OwogICAgICB9CkBAIC0yNjkzLDcgKzI2OTMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dFNwYWNlRXZlbnRIYW5kCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBldmVudC0+c2hpZnRLZXkoKSA/IFNjcm9sbFVwIDogU2Nyb2xsRG93bjsKLSAgICBpZiAo
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UpKSB7CisgICAgaWYgKHNjcm9s
bE92ZXJmbG93KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpIHsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
NzAyLDcgKzI3MDIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodmlldy0+c2Nyb2xs
KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKSkKKyAgICBpZiAodmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw5
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5v
ZGUqKTsKIAotICAgIGJvb2wgc2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CisgICAgYm9vbCBzY3JvbGxPdmVy
ZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291
cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKIAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2Rl
ID0gMCk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAw
KTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgYm9vbCBzaG91bGREcmFnQXV0b05v
ZGUoTm9kZSosIGNvbnN0IEludFBvaW50JikgY29uc3Q7IC8vIC13ZWJraXQtdXNlci1kcmFnID09
IGF1dG8KSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNjYwMjkp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDIsNyArNDQyLDkgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiB9CiAK
IC8vIEluIGEgYm90dG9tLXVwIHdheSwgdGhpcyBtZXRob2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFt
ZXwgaW4gYSBnaXZlbiBkaXJlY3Rpb24KLS8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUg
ZnJhbWUgdHJlZSBoaWVyYXJjaHkgaW4gY2FzZSBpdCBkb2VzIG5vdCBzdWNjZWVkLgorLy8gfGRp
cmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFtZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0
IGRvZXMgbm90CisvLyBzdWNjZWVkLgorLy8gTk9URTogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRo
ZSBjYWxsZXIgaXMgcmVzcG9uZGluZyB0byBhIGtleWJvYXJkIGV2ZW50LgogYm9vbCBzY3JvbGxJ
bkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
Rm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKIHsKICAgICBpZiAoIWZyYW1lKQpAQCAtNDY4LDkg
KzQ3MCw5IEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2MKICAgICB9
CiAKICAgICBpZiAoIWNhbmRpZGF0ZS5pc051bGwoKSAmJiBpc1Njcm9sbGFibGVDb250YWluZXJO
b2RlKGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KSkKLSAgICAgICAgcmV0dXJuIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxCeUxpbmUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KTsKKyAgICAgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxCeUxpbmUsIEtleXByZXNzLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xs
YWJsZUJveCk7CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1
cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSk7CisgICAgcmV0dXJuIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxCeUxpbmUsIEtleXByZXNzKTsKIH0KIAogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50KiBl
bGVtZW50KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgZmxvYXQq
IGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9j
dXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4
KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKKyAgICBp
ZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmN1
cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykK
K3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
bV9jdXJyZW50UG9zWCA9IHBvczsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFBvc1kgPSBw
b3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2Nyb2xsQW5pbWF0b3JfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJT
Y3JvbGxUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNs
aWVudDsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3Jv
bGxBbmltYXRvciogY3JlYXRlKFNjcm9sbGJhckNsaWVudCopOworCisgICAgU2Nyb2xsQW5pbWF0
b3IoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2
aXJ0dWFsIH5TY3JvbGxBbmltYXRvcigpIHsgfQorCisgICAgLy8gQ29tcHV0ZXMgYSBzY3JvbGwg
ZGVzdGluYXRpb24gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgUmV0dXJucyBmYWxzZSBpZgor
ICAgIC8vIGFscmVhZHkgYXQgdGhlIGRlc3RpbmF0aW9uLiAgT3RoZXJ3aXNlLCBzdGFydHMgc2Ny
b2xsaW5nIHRvd2FyZHMgdGhlCisgICAgLy8gZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4g
IFNjcm9sbGluZyBtYXkgYmUgaW1tZWRpYXRlIG9yIGFuaW1hdGVkLgorICAgIC8vIFRoZSBiYXNl
IGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBh
bmltYXRlcy4KKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKTsKKworICAgIC8vIFN0b3BzIGFueSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGRpcmVjdGlv
biBhbmQgdXBkYXRlcyB0aGUgU2Nyb2xsQW5pbWF0b3IKKyAgICAvLyB3aXRoIHRoZSBjdXJyZW50
IHNjcm9sbCBwb3NpdGlvbi4gIFRoaXMgZG9lcyBub3QgY2F1c2UgYSBjYWxsYmFjayB0byB0aGUK
KyAgICAvLyBTY3JvbGxiYXJDbGllbnQuCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworCitwcm90
ZWN0ZWQ6CisgICAgU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBmbG9hdCBtX2N1cnJl
bnRQb3NYOyAgLy8gV2UgYXZvaWQgdXNpbmcgYSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVj
ZQorICAgIGZsb2F0IG1fY3VycmVudFBvc1k7ICAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHku
Cit9OworCisjaWYgIU9TKFdJTkRPV1MpCitTY3JvbGxBbmltYXRvciogU2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqKQoreworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0
b3IoY2xpZW50KTsKK30KKyNlbmRpZgorCit9CisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2lu
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JXaW4uaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNs
aWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIHN0YXRpYworU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBTY3JvbGxBbmltYXRvcldpbihj
bGllbnQpOworfQorCitjb25zdCBkb3VibGUgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRp
bWVyRGVsYXkgPSAwLjAxOworCitTY3JvbGxBbmltYXRvcldpbjo6UGVyQXhpc0RhdGE6OlBlckF4
aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJlbnQsIGZsb2F0KiBjdXJyZW50UG9zKQorICAg
IDogbV9jdXJyZW50UG9zKGN1cnJlbnRQb3MpCisgICAgLCBtX2Rlc2lyZWRQb3MoMCkKKyAgICAs
IG1fY3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX2Rlc2lyZWRWZWxvY2l0eSgwKQorICAgICwg
bV9sYXN0QW5pbWF0aW9uVGltZSgwKQorICAgICwgbV9hbmltYXRpb25UaW1lcihwYXJlbnQsICZT
Y3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sKK30KKworCitTY3JvbGxB
bmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCisg
ICAgOiBTY3JvbGxBbmltYXRvcihjbGllbnQpCisgICAgLCBtX2hvcml6b250YWxEYXRhKHRoaXMs
ICZtX2N1cnJlbnRQb3NYKQorICAgICwgbV92ZXJ0aWNhbERhdGEodGhpcywgJm1fY3VycmVudFBv
c1kpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yV2luOjp+U2Nyb2xsQW5pbWF0b3JXaW4oKQorewor
ICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsKKyAgICBz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEpOworfQorCitib29sIFNj
cm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9h
dCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIC8vIERvbid0IGFuaW1hdGUganVtcGlu
ZyB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGdyYW51
bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBzdGVwLCBtdWx0aXBs
aWVyKTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuICBDYWxjdWxhdGUg
dGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9
PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9udGFsRGF0
YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rlc2lyZWRQ
b3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNj
cm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0gZGF0YS0+
bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS0+bV9kZXNpcmVk
UG9zID0gbmV3UG9zOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVsb2NpdHku
CisgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZmxvYXQgYW5pbWF0aW9uU3RlcDsKKyAgICBib29sIGFs
cmVhZHlBbmltYXRpbmcgPSBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCk7CisgICAg
aWYgKChzb3VyY2UgIT0gS2V5cHJlc3MpICYmIChzb3VyY2UgIT0gV2hlZWwpKSB7CisgICAgICAg
IC8vIFdoZW4gYXV0b3Njcm9sbGluZywgdGhlIHNjcm9sbGJhcidzIGF1dG9zY3JvbGwgdGltZXIg
d2lsbCBjYWxsIHVzIHRvCisgICAgICAgIC8vIGluY3JlbWVudCB0aGUgZGVzaXJlZCBwb3NpdGlv
biBieSB8c3RlcHwgZXZlcnkKKyAgICAgICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1l
KCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgc2Vjb25kcy4gIElmIHdlCisgICAgICAgIC8vIHNl
dCB0aGUgZGVzaXJlZCB2ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9s
bGluZyB3aWxsCisgICAgICAgIC8vIG5laXRoZXIgcmFjZSBhaGVhZCAoYW5kIHRoZW4gaGF2ZSB0
byBzbG93IGRvd24pIG5vciBpbmNyZWFzaW5nbHkgbGFnCisgICAgICAgIC8vIGJlaGluZCwgYnV0
IHdpbGwgYmUgc21vb3RoIGFuZCBzeW5jaHJvbml6ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8v
IE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBhY2NlbGVyYXRpb24gcGVyaW9kLCB0aGUgY3VycmVu
dCBwb3NpdGlvbgorICAgICAgICAvLyB3aWxsIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFs
bCwgY29uc3RhbnQgYW1vdW50IChzZWUgY29tbWVudHMgb24KKyAgICAgICAgLy8gYW5pbWF0ZVNj
cm9sbCgpKTsgdGhlIGV4YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9
IHxzdGVwfCAtIHYoMC41dEEgKyB0RCkKKyAgICAgICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICB2
ID0gVGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwKKyAgICAgICAgLy8gICAgICAgfHN0ZXB8IC8g
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKKyAg
ICAgICAgLy8gICB0QSA9IGFjY2VsZXJhdGlvblRpbWUoKQorICAgICAgICAvLyAgIHREID0gVGhl
IHRpbWUgd2UgcHJldGVuZCBoYXMgYWxyZWFkeSBwYXNzZWQgd2hlbiBzdGFydGluZyB0bworICAg
ICAgICAvLyAgICAgICAgc2Nyb2xsLCB8YW5pbWF0aW9uVGltZXJEZWxheXwKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhpcyBsYWcgcHJvdmlkZXMgc29tZSBidWZmZXIgYWdhaW5zdCB0aW1lciBq
aXR0ZXIgc28gd2UncmUgbGVzcworICAgICAgICAvLyBsaWtlbHkgdG8gaGl0IHRoZSBkZXNpcmVk
IHBvc2l0aW9uIGFuZCBzdG9wIChhbmQgdGh1cyBoYXZlIHRvCisgICAgICAgIC8vIHJlLWFjY2Vs
ZXJhdGUsIGNhdXNpbmcgYSB2aXNpYmxlIGhpdGNoKSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4
dAorICAgICAgICAvLyBhdXRvc2Nyb2xsIGluY3JlbWVudC4KKyAgICAgICAgYW5pbWF0aW9uU3Rl
cCA9IHN0ZXA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yIGtleWJvYXJkIGFuZCB3aGVl
bCBzY3JvbGxzLCB3ZSBkb24ndCBrbm93IHdoZW4gdGhlIG5leHQgaW5jcmVtZW50CisgICAgICAg
IC8vIHdpbGwgYmUgcmVxdWVzdGVkLiAgSWYgd2Ugc2V0IHRoZSB0YXJnZXQgdmVsb2NpdHkgYmFz
ZWQgb24gaG93IGZhcgorICAgICAgICAvLyBhd2F5IGZyb20gdGhlIHRhcmdldCBwb3NpdGlvbiB3
ZSBhcmUsIHRoZW4gZm9yIGtleWJvYXJkL3doZWVsIGV2ZW50cworICAgICAgICAvLyB0aGF0IGNv
bWUgZmFzdGVyIHRoYW4gdGhlIGF1dG9zY3JvbGwgZGVsYXksIHdlJ2xsIGFzeW1wdG90aWNhbGx5
CisgICAgICAgIC8vIGFwcHJvYWNoIHRoZSB2ZWxvY2l0eSBuZWVkZWQgdG8gc3RheSBzbW9vdGhs
eSBpbiBzeW5jIHdpdGggdGhlIHVzZXIncworICAgICAgICAvLyBhY3Rpb25zOyBmb3IgZXZlbnRz
IHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9sbCBvbmUgaW5jcmVtZW50IGFuZAorICAgICAg
ICAvLyB0aGVuIHBhdXNlIHVudGlsIHRoZSBuZXh0IGV2ZW50IGZpcmVzLiAgVGhpcyBsYXR0ZXIg
YmVoYXZpb3IgbWVhbnMKKyAgICAgICAgLy8gdGhhdCBzaW5nbGUga2V5cHJlc3NlcyBvciB3aGVl
bCBmbGlja3Mgd2lsbCBoYXZlIHRoZSBzYW1lIGFwcGVhcmFuY2UKKyAgICAgICAgLy8gYXMgc2lu
Z2xlIHByZXNzZXMgb2YgYSBzY3JvbGxiYXIgcGFydC4KKyAgICAgICAgYW5pbWF0aW9uU3RlcCA9
IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9jdXJyZW50UG9zKTsKKyAgICAgICAgLy8gSWYgYSBrZXkg
aXMgaGVsZCBkb3duIChvciB0aGUgd2hlZWwgY29udGludWFsbHkgc3B1biksIHRoZW4gb25jZSB3
ZQorICAgICAgICAvLyBoYXZlIHJlYWNoZWQgYSB2ZWxvY2l0eSBjbG9zZSB0byB0aGUgc3RlYWR5
LXN0YXRlIHZlbG9jaXR5LCB3ZSdyZQorICAgICAgICAvLyBsaWtlbHkgdG8gaGl0IHRoZSBkZXNp
cmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1lIHdlJ2QKKyAgICAgICAgLy8gZXhw
ZWN0IHRoZSBuZXh0IGluY3JlbWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVzZSBpdCBsZWFkcyB0
bworICAgICAgICAvLyBoaXRjaGluZyBhcyBkZXNjcmliZWQgYWJvdmUuICBTbyB3ZSB0cmltIHRo
ZSB2ZWxvY2l0eSBzbGlnaHRseSBzbworICAgICAgICAvLyB0aGF0IHdlIGhhdmUgYSBzbWFsbCBi
dWZmZXIsIHRvIGRlY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIHRoaXMKKyAgICAgICAgLy8gb2Nj
dXJyaW5nLiAgTm90ZSB0aGF0IHdlIHdvbid0IGZhbGwgc3RlYWRpbHkgZnVydGhlciBiZWhpbmQg
aGVyZSwKKyAgICAgICAgLy8gYmVjYXVzZSBpbiBzdWJzZXF1ZW50IHVwZGF0ZXMgd2UnbGwgYmUg
Y2FsY3VsYXRpbmcgb3VyIHZlbG9jaXR5IGJhc2VkCisgICAgICAgIC8vIG9uIGEgbGFyZ2VyIGRl
c2lyZWQgc3RlcCAtLSBzbyB0aGUgcHJhY3RpY2FsIGVmZmVjdCBpcyB0aGF0IHdlIGxhZyBieQor
ICAgICAgICAvLyBhIHNtYWxsLCBjb25zdGFudCBhbW91bnQgZGVwZW5kaW5nIG9uIHRoZSB0cmlt
IHZhbHVlIGFuZCB0aGUgcmF0ZSBhdAorICAgICAgICAvLyB3aGljaCBpbmNyZW1lbnRzIG9jY3Vy
IGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGRlbGF5LiAgVGhlCisgICAgICAgIC8v
IGV4YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgo
ciAvIGspIC0gMSkKKyAgICAgICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICByID0gVGhlIHJhdGlv
IG9mIHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAgICAgLy8gICAgICAgU2Nyb2xs
YmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQor
ICAgICAgICAvLyAgICAgICBrZXkvd2hlZWwgcmVwZWF0IGRlbGF5IChpLmUuID4gMSB3aGVuIGtl
eXMgcmVwZWF0IGZhc3RlcikKKyAgICAgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29u
c3RhbnQgZ2l2ZW4gYmVsb3cKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgd2Ugd2FudCB0byBh
Y3QgYXMgbXVjaCBsaWtlIGF1dG9zY3JvbGxpbmcgYXMgcG9zc2libGUsIHRoZW4gd2UKKyAgICAg
ICAgLy8gY2hvb3NlIGsgc3VjaCB0aGF0IGxhZyBpcyB0aGUgc2FtZSBhcyBhYm92ZSB3aGVuIHIg
PSAxLiAgVGhlIGVxdWF0aW9uCisgICAgICAgIC8vIGJlbG93IGRvZXMgdGhpcy4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRvIHRoaXMgd2hlbiB3ZSdyZSBub3Qg
YWxyZWFkeSBhbmltYXRpbmcsIGkuZS4KKyAgICAgICAgLy8gZ2V0dGluZyByZXBlYXRlZCBldmVu
dHMuICBJZiB0aGUgdXNlciBzaW1wbHkgcHJlc3NlZCBhIGtleSBvbmNlLCB3ZQorICAgICAgICAv
LyB3YW50IHRvIGFuaW1hdGUgYXQgbm9ybWFsIHNwZWVkIGxpa2Ugd2Ugd291bGQgYWJvdmUuICBJ
ZiB3ZSdsbCBiZQorICAgICAgICAvLyBnZXR0aW5nIG1vcmUgZXZlbnRzIHRoYXQgd291bGQgcmVx
dWlyZSB0aGUgdHJpbW1pbmcgYmVsb3csIG91cgorICAgICAgICAvLyBpbml0aWFsIGFjY2VsZXJh
dGlvbiBwZXJpb2Qgd2lsbCBnaXZlIHVzIGVub3VnaCB0aW1lIGZvciB0aGVtIHRvCisgICAgICAg
IC8vIGFycml2ZS4KKyAgICAgICAgaWYgKGFscmVhZHlBbmltYXRpbmcpCisgICAgICAgICAgICBh
bmltYXRpb25TdGVwIC89ICgyLjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkg
KyBhbmltYXRpb25UaW1lckRlbGF5KSkpOworICAgIH0KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0
b3Njcm9sbFRpbWVyRGVsYXkoKTsKKworICAgIC8vIElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9s
bGluZywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRl
U2Nyb2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9y
V2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChv
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDog
Jm1fdmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOwor
ICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0g
cG9zOworICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2ly
ZWRWZWxvY2l0eSA9IDA7Cit9CisKKy8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2lu
OjphY2NlbGVyYXRpb25UaW1lKCkKK3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0
aGUgbGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIg
dGFyZ2V0CisgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBw
cm9kdWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAg
ICByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRl
bGF5KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQo
VGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0
aW1lciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250
YWxEYXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6
c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYg
KGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmlt
YXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVT
Y3JvbGwoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xs
aW5nIHBlcmYgdmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRv
dGFsIHRpbWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8v
ICAgdCA9IHQwICsgMC41dEEgLSB0RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0g
VGhlIHRpbWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZwor
ICAgIC8vICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9s
bGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVs
b3cpCisgICAgLy8gICB0RCA9IHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBB
IHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3Jt
IGEKKyAgICAvLyAgICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsg
ZG9uZSBkdWUgdG8gY2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2Vk
KCkgKH4wIGZvciBzaW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAg
ICBwYWdlcykuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNt
YWxsLCB0aGUgdG90YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWds
aWdpYmxlIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMu
ICBXaXRob3V0CisgICAgLy8ga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdz
IGhhcmQgdG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRy
eSB0byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKwor
CisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0
aGUgdGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1h
eSBiZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRo
ZSBwYWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8g
VG8gYXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3Jv
bGxpbmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9u
ZSBpZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBz
b21lIGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwg
PSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5t
X2xhc3RBbmltYXRpb25UaW1lKSA6IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3Vy
cmVudAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAg
aWYgKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsK
KyAgICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVh
Y2ggdGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUg
PSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAg
ICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1
cyB0byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9h
dCBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xs
SW50ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBv
dGVudGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdl
ZW4gb3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNl
IHRyYXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2Vz
OiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAg
ICAgICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZl
bG9jaXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5t
X2Rlc2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAg
ZmxvYXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2Vs
ZXJhdGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIg
Y29uc3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBh
IGxpbmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcwor
ICAgICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3Vs
YXIgcG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0
YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2Nl
bGVyYXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQg
YXQgdGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQg
dmVsb2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAg
ICAgICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0
U2Nyb2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0
YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRo
ZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAo
ZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkg
KiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0
eSA9IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBk
aXN0YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVs
b2NpdHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYg
b3VyIGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxv
Y2l0eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNp
cmVkVmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0
aW9uIGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2
ZWxlZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsK
KyAgICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJl
ZCBwb3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAg
KmRhdGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9
IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0
aW9uLiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1
cGRhdGUuCisgICAgICAgIGlmICgqZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVk
UG9zKQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOwor
ICAgICAgICAqZGF0YS0+bV9jdXJyZW50UG9zICs9IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAg
IGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkp
OworICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgp
OworICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQ
b2ludCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1
cnJlbnRQb3MpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JXaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFu
aW1hdG9yV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1
YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0
dWFsIH5TY3JvbGxBbmltYXRvcldpbigpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3Jv
bGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQg
c3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2
YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9s
bEFuaW1hdG9yV2luKiBwYXJlbnQsIGZsb2F0KiBjdXJyZW50UG9zKTsKKworICAgICAgICBmbG9h
dCogbV9jdXJyZW50UG9zOworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRQb3M7CisgICAgICAgIGZs
b2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRWZWxvY2l0eTsK
KyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblRpbWU7CisgICAgICAgIFRpbWVyPFNjcm9s
bEFuaW1hdG9yV2luPiBtX2FuaW1hdGlvblRpbWVyOworICAgIH07CisKKyAgICBzdGF0aWMgZG91
YmxlIGFjY2VsZXJhdGlvblRpbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGFuaW1hdGlv
blRpbWVyRGVsYXk7CisKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xs
QW5pbWF0b3JXaW4+Kik7CisgICAgdm9pZCBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJB
eGlzRGF0YSopOworICAgIHZvaWQgYW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0YSopOworCisgICAg
UGVyQXhpc0RhdGEgbV9ob3Jpem9udGFsRGF0YTsKKyAgICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2Fs
RGF0YTsKK307CisKK30KKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgJKHJldmlzaW9uIDY2MDI5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNjcm9sbEJ5UGl4ZWwKICAgICB9
OwogCisgICAgZW51bSBTY3JvbGxTb3VyY2UgeworICAgICAgICBLZXlwcmVzcywKKyAgICAgICAg
V2hlZWwsCisgICAgICAgIFNjcm9sbGJhclBhcnRPck1lbnUsICAvLyAiU2Nyb2xsYmFyIiBhbG9u
ZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgUHJvZ3JhbW1hdGljCisgICAg
fTsKKwogICAgIGVudW0gU2Nyb2xsYmFyT3JpZW50YXRpb24geyBIb3Jpem9udGFsU2Nyb2xsYmFy
LCBWZXJ0aWNhbFNjcm9sbGJhciB9OwogCiAgICAgZW51bSBTY3JvbGxiYXJNb2RlIHsgU2Nyb2xs
YmFyQXV0bywgU2Nyb2xsYmFyQWx3YXlzT2ZmLCBTY3JvbGxiYXJBbHdheXNPbiB9OwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsMjAgQEAgSW50
UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2lu
dChtYXhpbXVtT2Zmc2V0LndpZHRoKCksIG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCitp
bnQgU2Nyb2xsVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3QKK3sKKyAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNj
cm9sbGJhcikuZ2V0KCk7CisgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNp
emUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFNjcm9sbFZp
ZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
K3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIHRydWUpOworICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQu
eSgpLCB0cnVlKTsKK30KKwogdm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCiB7CiAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCkBA
IC0zMTUsMTcgKzMyOSwxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNv
bnN0CiAgICAgdXBkYXRlU2Nyb2xsYmFycyhJbnRTaXplKG5ld1Njcm9sbFBvc2l0aW9uLngoKSwg
bmV3U2Nyb2xsUG9zaXRpb24ueSgpKSk7CiB9CiAKLWJvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQor
Ym9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7CiAgICAgaWYg
KHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKIAogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGly
ZWN0aW9uID09IFNjcm9sbERvd24pIHsKICAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIp
Ci0gICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgc291cmNlKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDQx
LDcgKzQ1NSw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0
cnVlKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSwgZmFs
c2UpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAKICAg
ICB9IApAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdAogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNIZWlnaHQo
KSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQo
KSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQo
KSwgZmFsc2UpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsK
ICAgICB9CkBAIC02NjksMTEgKzY4MywxNiBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlCiAgICAgICAgIGlmIChlLmdyYW51bGFyaXR5KCkgPT0gU2Nyb2xsQnlQYWdl
V2hlZWxFdmVudCkgewogICAgICAgICAgICAgQVNTRVJUKGRlbHRhWCA9PSAwKTsKICAgICAgICAg
ICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YVkgPCAwOwotICAgICAgICAgICAgZGVsdGFZID0gbWF4
KG1heDxpbnQ+KHZpc2libGVIZWlnaHQoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBX
aGVuUGFnaW5nKCksIHZpc2libGVIZWlnaHQoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdl
ZW5QYWdlcygpKSwgMSk7CisgICAgICAgICAgICBkZWx0YVkgPSBtYXgobWF4KHN0YXRpY19jYXN0
PGZsb2F0Pih2aXNpYmxlSGVpZ2h0KCkpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdo
ZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZpc2libGVIZWlnaHQoKSAtIFNjcm9sbGJh
cjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSksIDEuMGYpOwogICAgICAgICAgICAgaWYgKG5l
Z2F0aXZlKQogICAgICAgICAgICAgICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAgICAgIH0KLSAg
ICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisKKyAgICAgICAgLy8g
U2hvdWxkIHdlIGZhbGwgYmFjayBvbiBzY3JvbGxCeSgpIGlmIHRoZXJlIGlzIG5vIHNjcm9sbGJh
ciBmb3IgYSBub24temVybyBkZWx0YT8KKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9s
bFVwLCBTY3JvbGxCeVBpeGVsLCBXaGVlbCwgZGVsdGFZKTsKKyAgICAgICAgaWYgKGRlbHRhWSAm
JiBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBXaGVlbCwgZGVsdGFYKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw5
IEBAIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMKIHB1YmxpYzoKICAg
ICB+U2Nyb2xsVmlldygpOwogCi0gICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiBGcmFt
ZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlciB0d28uCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgCiAg
ICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4gVGhlIFNjcm9sbFZp
ZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0aGUKQEAgLTE1NCw3
ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJiBzKSB7
IHJldHVybiBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgcyk7IH0KIAogICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2Nyb2xscyBieSBsaW5lcywgcGFnZXMgb3IgcGl4ZWxzLgotICAg
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJj
ZSBzb3VyY2UpOwogICAgICAgICAKICAgICAvLyBTY3JvbGwgdGhlIGFjdHVhbCBjb250ZW50cyBv
ZiB0aGUgdmlldyAoZWl0aGVyIGJsaXR0aW5nIG9yIGludmFsaWRhdGluZyBhcyBuZWVkZWQpLgog
ICAgIHZvaWQgc2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMiArMTAxLDEyIEBAIFNj
cm9sbGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0
aGlzKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxi
YXI6OnNldFZhbHVlKGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9
IG1heChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZh
bHVlKCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRo
ZSBzYW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJv
bVNjcm9sbEFuaW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEyOCw3ICsxMjgs
NyBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0U3RlcHMoaW50IGxpbmVTdGVwLCBpCiAgICAgbV9waXhl
bFN0ZXAgPSAxLjBmIC8gcGl4ZWxzUGVyU3RlcDsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgU2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJj
ZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQog
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CkBAIC0xNDIs
MjQgKzE0MiwyNSBAQCBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAg
ICAgfQogI2VuZGlmCiAKLSAgICBmbG9hdCBzdGVwID0gMDsKLSAgICBpZiAoKGRpcmVjdGlvbiA9
PSBTY3JvbGxVcCAmJiBtX29yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoZGly
ZWN0aW9uID09IFNjcm9sbExlZnQgJiYgbV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSkKLSAgICAgICAgc3RlcCA9IC0xOwotICAgIGVsc2UgaWYgKChkaXJlY3Rpb24gPT0gU2Ny
b2xsRG93biAmJiBtX29yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoZGlyZWN0
aW9uID09IFNjcm9sbFJpZ2h0ICYmIG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikpCi0gICAgICAgIHN0ZXAgPSAxOworICAgIC8vIElnbm9yZSBwZXJwZW5kaWN1bGFyIHNjcm9s
bHMuCisgICAgaWYgKChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gKGRp
cmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgOiAoZGlyZWN0
aW9uID09IFNjcm9sbExlZnQgfHwgZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgZmxvYXQgc3RlcDsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0g
U2Nyb2xsQnlMaW5lKQotICAgICAgICBzdGVwICo9IG1fbGluZVN0ZXA7CisgICAgICAgIHN0ZXAg
PSBtX2xpbmVTdGVwOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGFnZSkK
LSAgICAgICAgc3RlcCAqPSBtX3BhZ2VTdGVwOworICAgICAgICBzdGVwID0gbV9wYWdlU3RlcDsK
ICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICBz
dGVwICo9IG1fdG90YWxTaXplOworICAgICAgICBzdGVwID0gbV90b3RhbFNpemU7CiAgICAgZWxz
ZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQaXhlbCkKLSAgICAgICAgc3RlcCAqPSBtX3Bp
eGVsU3RlcDsKKyAgICAgICAgc3RlcCA9IG1fcGl4ZWxTdGVwOworICAgIGlmIChkaXJlY3Rpb24g
PT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCisgICAgICAgIG11bHRpcGxp
ZXIgPSAtbXVsdGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIHJldHVybiBjbGll
bnQoKS0+c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIHN0ZXAsIG11
bHRpcGxpZXIpOwogCi0gICAgZmxvYXQgbmV3UG9zID0gbV9jdXJyZW50UG9zICsgc3RlcCAqIG11
bHRpcGxpZXI7Ci0gICAgZmxvYXQgbWF4UG9zID0gbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXpl
OwotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obmV3UG9zLCBtYXhQb3MpLCAwLjBm
KSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyAoc3Rl
cCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90b3RhbFNpemUgLSBtX3Zpc2li
bGVTaXplKSksIDAuMGYpLCBmYWxzZSk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjp1cGRhdGVUaHVt
YigpCkBAIC0yMjEsNyArMjIyLDcgQEAgdm9pZCBTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2Vk
UGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUgYXJyb3dzIGFuZCB0cmFjay4KLSAg
ICBpZiAoc2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Ny
b2xsR3JhbnVsYXJpdHkoKSkpCisgICAgaWYgKHNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVj
dGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCksIFNjcm9sbGJhclBhcnRPck1l
bnUpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yOTEsMTEg
KzI5MiwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBp
ZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAg
ICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRo
dW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAg
ICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkg
KiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29sIFNj
cm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3Vy
cmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAgaWYg
KG5vdGlmeVNjcm9sbEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisKICAg
ICBpZiAocG9zID09IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0z
NDAsNyArMzQ0LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcgog
ewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAodGhl
bWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAgICAg
IHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQb3Mo
bV9kcmFnT3JpZ2luLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1
bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAg
ICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTEgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0KTsKIAogICAgIHZv
aWQgc2V0U3RlcHMoaW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0ZXAsIGludCBwaXhlbHNQZXJTdGVw
ID0gMSk7Ci0gICAgYm9vbCBzZXRWYWx1ZShpbnQpOworICAgIGJvb2wgc2V0VmFsdWUoaW50LCBi
b29sIGZyb21TY3JvbGxBbmltYXRpb24pOwogICAgIHZvaWQgc2V0UHJvcG9ydGlvbihpbnQgdmlz
aWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0UHJlc3NlZFBvcyhpbnQgcCkg
eyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7CisgICAgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBm
bG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xMjQsOSArMTI0
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KIHBy
b3RlY3RlZDoKICAgICBTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJUaGVtZSogPSAwKTsKIApAQCAt
MTQyLDcgKzEzOSw2IEBAIHByb3RlY3RlZDoKICAgICBTY3JvbGxHcmFudWxhcml0eSBwcmVzc2Vk
UGFydFNjcm9sbEdyYW51bGFyaXR5KCk7CiAgICAgCiAgICAgdm9pZCBtb3ZlVGh1bWIoaW50IHBv
cyk7Ci0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CiAKICAgICBTY3JvbGxiYXJD
bGllbnQqIG1fY2xpZW50OwogICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247
CkBAIC0xNjcsNiArMTYzLDExIEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fb3ZlcmxhcHNSZXNp
emVyOwogICAgIAogICAgIGJvb2wgbV9zdXBwcmVzc0ludmFsaWRhdGlvbjsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1h
dG9yKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVm
aW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzQsNyArMzYsMjMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXJDbGllbnQgewogcHVibGljOgotICAg
IHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHt9CisgICAgU2Nyb2xsYmFyQ2xpZW50KCkgOiBt
X3Njcm9sbEFuaW1hdG9yKFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUodGhpcykpIHsgfQorICAgIHZp
cnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHsgfQorCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3ItPnNjcm9sbChvcmllbnRhdGlvbiwgZ3Jh
bnVsYXJpdHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllcik7CisgICAgfQorCisgICAgdm9pZCBz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIGZsb2F0IHBvcykKKyAgICB7CisgICAgICAgIG1fc2Nyb2xsQW5pbWF0b3ItPnNl
dFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihvcmllbnRhdGlvbiwgcG9zKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9IDA7CkBAIC02Nyw2ICs4
NSw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAgICAgfQorCitwcml2YXRl
OgorICAgIE93blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIH07CiAKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA2NjAyOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MiwyMyArNzIsMjEgQEAgYm9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBsYXRmbwog
ICAgIGNvbnN0IFFQb2ludCBnbG9iYWxQb3MgPSBRUG9pbnQoZXZlbnQuZ2xvYmFsWCgpLCBldmVu
dC5nbG9iYWxZKCkpOwogICAgIFFBY3Rpb24qIGFjdGlvblNlbGVjdGVkID0gbWVudS5leGVjKGds
b2JhbFBvcyk7CiAKLSAgICBpZiAoIWFjdGlvblNlbGVjdGVkKQotICAgICAgICB7IC8qIERvIG5v
dGhpbmcgKi8gfQotICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEhlcmUp
IHsKKyAgICBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsSGVyZSkgewogICAgICAgICBj
b25zdCBRUG9pbnQgcG9zID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2ZW50LnBvcygp
KTsKICAgICAgICAgbW92ZVRodW1iKGhvcml6b250YWwgPyBwb3MueCgpIDogcG9zLnkoKSk7CiAg
ICAgfSBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxUb3ApCi0gICAgICAgIHNl
dFZhbHVlKDApOworICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3Jv
bGxVcCwgU2Nyb2xsQnlEb2N1bWVudCwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxzZSBp
ZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsQm90dG9tKQotICAgICAgICBzZXRWYWx1ZSht
YXhpbXVtKCkpOworICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Ny
b2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxz
ZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZVVwKQotICAgICAgICBzY3JvbGwoaG9yaXpv
bnRhbCA/IFNjcm9sbExlZnQ6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UsIDEpOworICAgICAgICBz
Y3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlLCBT
Y3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQ
YWdlRG93bikKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9s
bERvd24sIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UsIFNjcm9sbGJhclBhcnRPck1lbnUp
OwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVwKQotICAgICAgICBz
Y3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lLCAx
KTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNj
cm9sbEJ5TGluZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2Vs
ZWN0ZWQgPT0gYWN0U2Nyb2xsRG93bikKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3Jv
bGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgMSk7CisgICAgICAgIHNjcm9sbCho
b3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIFNjcm9s
bGJhclBhcnRPck1lbnUpOwogI2VuZGlmIC8vIFFUX05PX0NPTlRFWFRNRU5VCiAgICAgcmV0dXJu
IHRydWU7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlz
aW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjY0LDYgKzY2NCwxNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQo
Y29uc3QgSW50UmVjdCYKICAgICAgICAgOjpSZWxlYXNlREMobV9wb3B1cCwgbG9jYWxEQyk7CiB9
CiAKK2ludCBQb3B1cE1lbnVXaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0Cit7CisgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNj
cm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1f
c2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7Cisg
ICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0
LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgUG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xs
YmFyKiBzY3JvbGxCYXIpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKQEAgLTk3OSw3ICs5
OTAsNyBAQCBMUkVTVUxUIFBvcHVwTWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQsCiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzY3JvbGxiYXIoKS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxE
b3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CisgICAgICAgICAgICBzY3JvbGxiYXIoKS0+c2Ny
b2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIFdoZWVsLCBh
YnMoaSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUG9wdXBNZW51V2luLmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUG9wdXBNZW51V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKGJvb2wgYikgeyBtX3Nj
cm9sbGJhckNhcHR1cmluZ01vdXNlID0gYjsgfQogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50Cisg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2NjAy
OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyMSwxMCArNDIxLDEwIEBAIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQKICAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigp
LT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCi1ib29sIFJlbmRlckJveDo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlckJv
eDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiog
c3RvcE5vZGUpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwotICAgIGlmIChsICYm
IGwtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgeworICAgIGlm
IChsICYmIGwtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxp
ZXIpKSB7CiAgICAgICAgIGlmIChzdG9wTm9kZSkKICAgICAgICAgICAgICpzdG9wTm9kZSA9IG5v
ZGUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00MzUsNyArNDM1LDcgQEAgYm9vbCBSZW5k
ZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZAogCiAgICAgUmVuZGVyQmxvY2sqIGIgPSBj
b250YWluaW5nQmxvY2soKTsKICAgICBpZiAoYiAmJiAhYi0+aXNSZW5kZXJWaWV3KCkpCi0gICAg
ICAgIHJldHVybiBiLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcE5vZGUpOworICAgICAgICByZXR1cm4gYi0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7
CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwg
ZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogICAgIGJvb2wgY2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGF1dG9zY3JvbGwoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJ
KHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDE3IEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6
OnBhaW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1
bmN0aW9ucworaW50IFJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbGxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJh
ci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckRhdGFHcmlkOjpzZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYg
KG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30K
Kwogdm9pZCBSZW5kZXJEYXRhR3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFH
cmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAko
cmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgSFRNTERhdGFHcmlk
RWxlbWVudCogZ3JpZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRGF0
YUdyaWRFbGVtZW50Kj4obm9kZSgpKTsgfQogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVy
ZmFjZS4KKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2MDI5KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYzLDkgKzEzNjMsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwK
IAogICAgIGlmICh1cGRhdGVTY3JvbGxiYXJzKSB7CiAgICAgICAgIGlmIChtX2hCYXIpCi0gICAg
ICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgICAgICBt
X2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgZmFsc2UpOwogICAgICAgICBpZiAobV92
QmFyKQotICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFkpOworICAgICAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFksIGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBT
Y2hlZHVsZSB0aGUgc2Nyb2xsIERPTSBldmVudC4KQEAgLTE2MTgsNiArMTYxOCwyMCBAQCB2b2lk
IFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJhZGFy
IDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNz
YXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAoraW50
IFJlbmRlckxheWVyOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcikgPyBtX2hCYXIgOiBtX3ZCYXIpLmdldCgpOworICByZXR1cm4gc2Ny
b2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXpl
KCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hCYXIpCisgICAgICAg
IG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5k
ZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9s
bCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0yMDY4LDcgKzIwODIsNyBAQCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIC8vIHNvIHRoaXMgaXMg
bmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nIChzZWUgaG93IHNjcm9sbFhPZmZzZXQo
KQogICAgICAgICAvLyBkaWZmZXJzIGZyb20gc2Nyb2xsWU9mZnNldCgpIHRvIGdldCBhbiBpZGVh
IG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBhbmQKICAgICAgICAgLy8gdmVydGljYWwgc2Nyb2xsYmFy
cyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkpLgotICAgICAgICBtX2hCYXItPnNldFZh
bHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9m
ZnNldCgpLCBmYWxzZSk7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50IGNs
aWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCk7CkBAIC0yMjI5LDcgKzIyNDMsNyBAQCBi
b29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9sCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxp
ZXIpCiB7CiAgICAgYm9vbCBkaWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7CiAgICAgYm9vbCBk
aWRWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlOwpAQCAtMjIzOCwxMyArMjI1MiwxMyBAQCBib29sIFJl
bmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uCiAgICAgICAgIGlmIChncmFudWxhcml0
eSA9PSBTY3JvbGxCeURvY3VtZW50KSB7CiAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgZm9y
IHRoZSBTY3JvbGxCeURvY3VtZW50IGdyYW51bGFyaXR5LiBBIGRvY3VtZW50IHNjcm9sbCBjYW4g
b25seSBiZSB1cCAKICAgICAgICAgICAgIC8vIG9yIGRvd24gYW5kIGluIGJvdGggY2FzZXMgdGhl
IGhvcml6b250YWwgYmFyIGdvZXMgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQuCi0gICAgICAgICAg
ICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xs
QnlEb2N1bWVudCwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xs
ID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgc291cmNlLCBt
dWx0aXBsaWVyKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Ny
b2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7
CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKTsKICAgICB9CiAKICAgICBpZiAo
bV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAgICBkaWRWZXJ0aWNhbFNjcm9s
bCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlw
bGllcik7CiAKICAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3JvbGwgfHwgZGlkVmVydGljYWxT
Y3JvbGwpOwogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA2NjAyOSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
NCw3ICsyNzQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxh
eW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGll
cik7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKCk7CiAKICAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBJbnRTaXplJik7CkBAIC01MTgsNiArNTE4LDggQEAgcHJp
dmF0ZToKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsgCiAKICAgICAv
LyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0
dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBAIGJvb2wgUmVuZGVyTGlz
dEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW4KIAogICAgIG1faW5kZXhPZmZzZXQgPSBuZXdPZmZz
ZXQ7CiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zm
c2V0KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0LCBmYWxzZSk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUxMCw5ICs1MTAsOSBAQCBib29sIFJlbmRlckxpc3RC
b3g6Omxpc3RJbmRleElzVmlzaWJsZShpCiAgICAgcmV0dXJuIGluZGV4ID49IG1faW5kZXhPZmZz
ZXQgJiYgaW5kZXggPCBtX2luZGV4T2Zmc2V0ICsgbnVtVmlzaWJsZUl0ZW1zKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCitib29s
IFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlw
bGllciwgTm9kZSoqKQogewotICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fdkJhciAmJiBt
X3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIp
OwogfQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgpCkBAIC01MjMsNiArNTIzLDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2Vk
KHVuc2lnbmUKICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsK
IH0KIAoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZp
c2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJh
cikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9p
ZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICBpbnQgbmV3
T2Zmc2V0ID0gbV92QmFyLT52YWx1ZSgpOwpAQCAtNTc4LDcgKzU4OSw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwogICAgIG1faW5k
ZXhPZmZzZXQgPSBpbmRleDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZh
bHVlKGluZGV4KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgZmFsc2UpOwogfQog
CiBib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYs
IE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVy
LCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRo
cygpOwogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJv
b2wgaXNSb290TGluZUJveCkgY29uc3Q7CkBAIC05Niw2ICs5Niw4IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCisg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MSwxMiArMTA3MSwxMiBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVy
VGV4dEVsZW1lbnQoKS0+c2V0U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9w
Tm9kZSkKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNv
dXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXll
cigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpKQorICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcikpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKIH0K
IAogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2
aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxMZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291
cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIGludCB0
ZXh0QmxvY2tXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRo
KEF0b21pY1N0cmluZyBmYW1pbHkpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjAzMCkK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MCBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290
aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAg
ICAgICAqIHB1YmxpYy9XZWJTY3JvbGxiYXIuaDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNl
cy4KKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFyOjopOgorICAgICAgICAqIHNyYy9Bc3Nl
cnRNYXRjaGluZ0VudW1zLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAg
ICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlQ29tbWFuZCk6CisgICAgICAg
ICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4gIEFsbG93IHdoZWVsIHNjcm9s
bHMgdG8gYmUgYW5pbWF0ZWQuICBGaXggY29tcGlsYXRpb24gd2FybmluZ3MuCisgICAgICAgIChX
ZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxi
YXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbk1v
dXNlV2hlZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOiBQbHVtYiBuZXcg
U2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3Vy
Y2VzLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXlib2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwpOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgor
ICAgICAgICAqIHNyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwOiBVcGRhdGUgY29tbWVu
dHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVlbEV2ZW50KToKKwogMjAxMC0wOC0yNSAgU2F0
aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAko
cmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFNjcm9s
bEJ5UGl4ZWwKICAgICB9OwogCisgICAgZW51bSBTY3JvbGxTb3VyY2UgeworICAgICAgICBLZXlw
cmVzcywKKyAgICAgICAgV2hlZWwsCisgICAgICAgIFNjcm9sbGJhclBhcnRPck1lbnUsICAvLyAi
U2Nyb2xsYmFyIiBhbG9uZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgUHJv
Z3JhbW1hdGljCisgICAgfTsKKwogICAgIC8vIENyZWF0ZXMgYSBXZWJTY3JvbGxiYXIuCiAgICAg
V0VCS0lUX0FQSSBzdGF0aWMgV2ViU2Nyb2xsYmFyKiBjcmVhdGUoV2ViU2Nyb2xsYmFyQ2xpZW50
KiwgT3JpZW50YXRpb24pOwogCkBAIC03NCw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGludCB2YWx1ZSgpIGNvbnN0ID0gMDsKIAogICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgdmFsdWUu
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGludCBwb3NpdGlvbikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZShpbnQgcG9zaXRpb24sIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikg
PSAwOwogCiAgICAgLy8gU2V0cyB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSByZWdpb24gaW4g
cGl4ZWxzLiAgaS5lLiBpZiBhIGRvY3VtZW50IGlzCiAgICAgLy8gODAweDEwMDAwIHBpeGVscyBh
bmQgdGhlIHZpZXdwb3J0IGlzIDEwMDB4MTAwMCBwaXhlbHMsIHRoZW4gc2V0TG9jYXRpb24KQEAg
LTg0LDcgKzkxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXREb2N1bWVudFNpemUo
aW50IHNpemUpID0gMDsKIAogICAgIC8vIFNjcm9sbCBiYWNrIG9yIGZvcndhcmQgd2l0aCB0aGUg
Z2l2ZW4gZ3JhbnVsYXJpdHkuCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxT
b3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpID0gMDsKIAogICAgIC8vIFBhaW50IHRoZSBnaXZlbiBy
ZWN0YW5nbGUuCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJl
Y3QmKSA9IDA7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVt
cy5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRj
aGluZ0VudW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDYgKzM0MywxMSBAQCBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhCiBDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYlNjcm9sbGJhcjo6U2Nyb2xsQnlEb2N1bWVudCwgU2Nyb2xsQnlEb2N1bWVudCk7
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6U2Nyb2xsQnlQaXhl
bCwgU2Nyb2xsQnlQaXhlbCk7CiAKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Ny
b2xsYmFyOjpLZXlwcmVzcywgS2V5cHJlc3MpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJTY3JvbGxiYXI6OldoZWVsLCBXaGVlbCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYlNjcm9sbGJhcjo6U2Nyb2xsYmFyUGFydE9yTWVudSwgU2Nyb2xsYmFyUGFydE9yTWVu
dSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6UHJvZ3JhbW1h
dGljLCBQcm9ncmFtbWF0aWMpOworCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNl
dHRpbmdzOjpFZGl0aW5nQmVoYXZpb3JNYWMsIEVkaXRpbmdNYWNCZWhhdmlvcik7CiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNldHRpbmdzOjpFZGl0aW5nQmVoYXZpb3JXaW4sIEVk
aXRpbmdXaW5kb3dzQmVoYXZpb3IpOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1MiwxMCArMTE1MiwxMCBAQCBib29sIFdlYkZy
YW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QKICAgICAvLyBtb3ZlVG9CZWdpbm5pbmdPZkRv
Y3VtZW50IGFuZCBtb3ZlVG9FbmRmRG9jdW1lbnQgYXJlIG9ubHkgaGFuZGxlZCBieSBXZWJLaXQK
ICAgICAvLyBmb3IgZWRpdGFibGUgbm9kZXMuCiAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpICYmIHdlYk5hbWUgPT0gIm1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiKQotICAg
ICAgICByZXR1cm4gdmlld0ltcGwoKS0+cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxC
eURvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChT
Y3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCwgUHJvZ3JhbW1hdGljKTsKIAogICAgIGlmICghZnJh
bWUoKS0+ZWRpdG9yKCktPmNhbkVkaXQoKSAmJiB3ZWJOYW1lID09ICJtb3ZlVG9FbmRPZkRvY3Vt
ZW50IikKLSAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxE
b3duLCBTY3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHZpZXdJbXBsKCktPnByb3Bh
Z2F0ZVNjcm9sbChTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50LCBQcm9ncmFtbWF0aWMpOwog
CiAgICAgcmV0dXJuIGZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKHdlYk5hbWUpLmV4ZWN1dGUo
dmFsdWUpOwogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3Bw
CShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjpzZXRMb2NhdGlvbihjb25zdAogICAgICAgbV9zY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
IAogICAgIGludCBsZW5ndGggPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPndpZHRoKCkgOiBtX3Njcm9sbGJhci0+aGVpZ2h0
KCk7Ci0gICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGxlbmd0aCAqIFNjcm9sbGJhcjo6
bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGxlbmd0aCAtIFNjcm9sbGJhcjo6bWF4T3Zl
cmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heChzdGF0
aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGZsb2F0PihsZW5ndGgpICogU2Nyb2xsYmFyOjptaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSksIGxlbmd0aCAtIFNjcm9sbGJhcjo6bWF4T3Zlcmxh
cEJldHdlZW5QYWdlcygpKSwgMSk7CiAgICAgbV9zY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgIG1fc2Nyb2xsYmFyLT5zZXRF
bmFibGVkKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSA+IGxlbmd0aCk7CiAgICAgbV9zY3JvbGxi
YXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBtX3Njcm9sbGJhci0+dG90YWxTaXplKCkpOwpAQCAt
OTIsOSArOTIsOSBAQCBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAogICAgIHJl
dHVybiBtX3Njcm9sbGJhci0+dmFsdWUoKTsKIH0KIAotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpz
ZXRWYWx1ZShpbnQgcG9zaXRpb24pCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKGlu
dCBwb3NpdGlvbiwgYm9vbCBmcm9tU2Nyb2xsQW5pbWF0aW9uKQogewotICAgIG1fc2Nyb2xsYmFy
LT5zZXRWYWx1ZShwb3NpdGlvbik7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9u
LCBmcm9tU2Nyb2xsQW5pbWF0aW9uKTsKIH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRE
b2N1bWVudFNpemUoaW50IHNpemUpCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBXZWJTY3JvbGxi
YXJJbXBsOjpzZXREb2N1bWVudFNpemUoaQogICAgIG1fc2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KGxlbmd0aCwgc2l6ZSk7CiB9CiAKLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyKQordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJj
ZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0
aW9uIGRpcjsKICAgICBib29sIGhvcml6b250YWwgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgV2ViU2Ny
b2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9sbERpcmUKICAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/
IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93bjsKICAgICBlbHNlCiAgICAgICAgIGRpciA9IGhvcml6
b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXA7Ci0gICAgbV9zY3JvbGxiYXItPnNjcm9sbChk
aXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSks
IG11bHRpcGxpZXIpOworICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpTY3JvbGxTb3VyY2U+KHNvdXJjZSksIG11bHRpcGxpZXIpOwogfQogCiB2b2lkIFdlYlNj
cm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0
KQpAQCAtMjE0LDExICsyMTQsMTEgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hl
ZWwoY29ucwogICAgICAgICAgICAgaWYgKG1vdXNld2hlZWwuc2Nyb2xsQnlQYWdlKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGEgPCAwOwot
ICAgICAgICAgICAgICAgIGRlbHRhID0gbWF4KG1heDxpbnQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxl
U2l6ZSgpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgbV9zY3Jv
bGxiYXItPnZpc2libGVTaXplKCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSksIDEpOworICAgICAgICAgICAgICAgIGRlbHRhID0gbWF4KG1heChzdGF0aWNfY2FzdDxmbG9h
dD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRv
U3RlcFdoZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxl
U2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpKSwgMS4wZik7CiAg
ICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgICAgICBkZWx0YSAq
PSAtMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZSht
X3Njcm9sbGJhci0+dmFsdWUoKSAtIGRlbHRhKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5z
Y3JvbGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIp
ID8gV2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwLCBXZWJDb3JlOjpTY3Jv
bGxCeVBpeGVsLCBXZWJDb3JlOjpXaGVlbCwgZGVsdGEpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KIApAQCAtMjU3LDExICsyNTcsMjEgQEAgYm9vbCBXZWJTY3JvbGxiYXJJ
bXBsOjpvbktleURvd24oY29uc3QgVwogICAgICAgICBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0
eSBzY3JvbGxHcmFudWxhcml0eTsKICAgICAgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2Rl
Rm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkp
IHsKICAgICAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24g
d2Fzbid0IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KLSAgICAgICAgICAgIHJldHVy
biBtX3Njcm9sbGJhci0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkp
OworICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9u
LCBzY3JvbGxHcmFudWxhcml0eSwgV2ViQ29yZTo6S2V5cHJlc3MpOwogICAgICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsU2l6ZShXZWJD
b3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1
cm4gKG9yaWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKSA/IChtX3Njcm9s
bGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQor
Cit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFs
dWUoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
b2Zmc2V0LngoKSA6IG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFdlYlNjcm9sbGJhcklt
cGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQogewogICAgIG1fY2xpZW50LT52
YWx1ZUNoYW5nZWQodGhpcyk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJh
ckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhcklt
cGwuaAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJh
ckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTMgKzUxLDE1IEBAIHB1YmxpYzoKICAgICAv
LyBXZWJLaXQ6OldlYlNjcm9sbGJhciBtZXRob2RzCiAgICAgdmlydHVhbCB2b2lkIHNldExvY2F0
aW9uKGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIGludCB2YWx1ZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShpbnQgcG9zaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZShpbnQgcG9zaXRpb24sIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgdmly
dHVhbCB2b2lkIHNldERvY3VtZW50U2l6ZShpbnQgc2l6ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGllcik7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAKICAgICAvLyBXZWJDb3JlOjpT
Y3JvbGxiYXJDbGllbnQgbWV0aG9kcworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoV2ViQ29y
ZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xs
YmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2
ZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9u
IDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2Myw3ICs3NjMsNyBAQCBib29sIFdlYlZpZXdJbXBsOjpzY3JvbGxWaWV3V2l0
aEtleWJvYXJkCiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7CiAgICAg
aWYgKCFtYXBLZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3Jv
bGxHcmFudWxhcml0eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcHJvcGFn
YXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIHJldHVy
biBwcm9wYWdhdGVTY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgS2V5
cHJlc3MpOwogfQogCiBib29sIFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGludCBr
ZXlDb2RlLApAQCAtODE3LDE5ICs4MTcsMTcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVNlbGVj
dFBvcHVwKCkKIH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBzY3JvbGxEaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsU291cmNlIHNjcm9sbFNvdXJj
ZSkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2ViQ29yZUZyYW1lKCk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBzY3JvbGxIYW5kbGVk
ID0KLSAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhzY3JvbGxE
aXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9IGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxh
cml0eSwgc2Nyb2xsU291cmNlKTsKICAgICBGcmFtZSogY3VycmVudEZyYW1lID0gZnJhbWU7CiAg
ICAgd2hpbGUgKCFzY3JvbGxIYW5kbGVkICYmIGN1cnJlbnRGcmFtZSkgewotICAgICAgICBzY3Jv
bGxIYW5kbGVkID0gY3VycmVudEZyYW1lLT52aWV3KCktPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbEdyYW51bGFyaXR5KTsKKyAgICAgICAgc2Nyb2xsSGFuZGxlZCA9IGN1cnJlbnRGcmFtZS0+
dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSwgc2Nyb2xs
U291cmNlKTsKICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLT50cmVlKCktPnBh
cmVudCgpOwogICAgIH0KICAgICByZXR1cm4gc2Nyb2xsSGFuZGxlZDsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsNyArMzA1LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gVHJpZXMgdG8gc2Nyb2xsIGEgZnJhbWUgb3IgYW55IHBhcmVudCBvZiBhIGZy
YW1lLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZpZXcKICAgICAvLyB3YXMgc2Nyb2xsZWQuCi0gICAg
Ym9vbCBwcm9wYWdhdGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpT
Y3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBwcm9wYWdhdGVTY3JvbGwoV2ViQ29yZTo6U2Ny
b2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSwgV2ViQ29yZTo6U2Nyb2xs
U291cmNlKTsKIAogICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IGEgcG9wdXAgd2FzIG9wZW5lZC9j
bG9zZWQuCiAgICAgdm9pZCBwb3B1cE9wZW5lZChXZWJDb3JlOjpQb3B1cENvbnRhaW5lciogcG9w
dXBDb250YWluZXIpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVu
dEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklu
cHV0RXZlbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niwx
MyArMzk2LDE2IEBAIFdlYk1vdXNlV2hlZWxFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeToKIAog
ICAgIC8vIENvbnZlcnQgd2hlZWwgZGVsdGEgYW1vdW50IHRvIGEgbnVtYmVyIG9mIHBpeGVscyB0
byBzY3JvbGwuCiAgICAgLy8KLSAgICAvLyBIb3cgbWFueSBwaXhlbHMgc2hvdWxkIHdlIHNjcm9s
bCBwZXIgbGluZT8gIEdlY2tvIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUKLSAgICAvLyBjdXJyZW50
IGxpbmUsIHdoaWNoIG1lYW5zIHNjcm9sbCBkaXN0YW5jZSBjaGFuZ2VzIGFzIHlvdSBnbyB0aHJv
dWdoIHRoZQotICAgIC8vIHBhZ2Ugb3IgZ28gdG8gZGlmZmVyZW50IHBhZ2VzLiAgSUUgNyBpcyB+
NTAgcHgvbGluZSwgYWx0aG91Z2ggdGhlIHZhbHVlCi0gICAgLy8gc2VlbXMgdG8gdmFyeSBzbGln
aHRseSBieSBwYWdlIGFuZCB6b29tIGxldmVsLiAgU2luY2UgSUUgNyBoYXMgYSBzbW9vdGhpbmcK
LSAgICAvLyBhbGdvcml0aG0gb24gc2Nyb2xsaW5nLCBpdCBjYW4gZ2V0IGF3YXkgd2l0aCBzbGln
aHRseSBsYXJnZXIgc2Nyb2xsIHZhbHVlcwotICAgIC8vIHdpdGhvdXQgZmVlbGluZyBqZXJreS4g
IEhlcmUgd2UgdXNlIDEwMCBweCBwZXIgdGhyZWUgbGluZXMgKHRoZSBkZWZhdWx0Ci0gICAgLy8g
c2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGljaykuCisgICAgLy8gSG93
IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVyIGxpbmU/ICBGaXJlZm94IHVzZXMgdGhl
IGhlaWdodCBvZgorICAgIC8vIHRoZSBjdXJyZW50IGxpbmUsIHdoaWNoIG1lYW5zIHNjcm9sbCBk
aXN0YW5jZSBjaGFuZ2VzIGFzIHlvdSBnbyB0aHJvdWdoCisgICAgLy8gdGhlIHBhZ2Ugb3IgZ28g
dG8gZGlmZmVyZW50IHBhZ2VzLiAgSUUgOCBpcyB+NjAgcHgvbGluZSwgYWx0aG91Z2ggdGhlCisg
ICAgLy8gdmFsdWUgc2VlbXMgdG8gdmFyeSBzbGlnaHRseSBieSBwYWdlIGFuZCB6b29tIGxldmVs
LiAgQWxzbywgSUUgZGVmYXVsdHMKKyAgICAvLyB0byBzbW9vdGggc2Nyb2xsaW5nIHdoaWxlIEZp
cmVmb3ggZG9lc24ndCwgc28gaXQgY2FuIGdldCBhd2F5IHdpdGgKKyAgICAvLyBzb21ld2hhdCBs
YXJnZXIgc2Nyb2xsIHZhbHVlcyB3aXRob3V0IGZlZWxpbmcgYXMgamVya3kuICBIZXJlIHdlIHVz
ZSAxMDAKKyAgICAvLyBweCBwZXIgdGhyZWUgbGluZXMgKHRoZSBkZWZhdWx0IHNjcm9sbCBhbW91
bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsCisgICAgLy8gdGljaykuICBFdmVuIHRob3VnaCB3
ZSBoYXZlIHNtb290aCBzY3JvbGxpbmcsIHdlIGRvbid0IG1ha2UgdGhpcyBhcyBsYXJnZQorICAg
IC8vIGFzIElFIGJlY2F1c2Ugc3ViamVjdGl2ZWx5IElFIGZlZWxzIGxpa2UgaXQgc2Nyb2xscyBm
YXJ0aGVyIHRoYW4geW91IHdhbnQKKyAgICAvLyB3aGlsZSByZWFkaW5nIGFydGljbGVzLgogICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBmIC8gMy4w
ZjsKICAgICB3aGVlbERlbHRhIC89IFdIRUVMX0RFTFRBOwogICAgIGZsb2F0IHNjcm9sbERlbHRh
ID0gd2hlZWxEZWx0YTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjAzMCkKKysrIFdlYktpdC9ndGsvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjUgIFBldGVy
IEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywg
YW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfcmVhbF9tb3ZlX2N1cnNvcik6CisKIDIwMTAtMDgtMjUgIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8g
Tm9yb25oYSBTaWx2YS4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZp
c2lvbiA2NjAyOSkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQ1LDggKzExNDUsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dl
Yl92aWV3X3JlYWxfbW92CiAgICAgfQogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3
KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5
KSkKLSAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkp
OworICAgIGlmICghZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBLZXlwcmVzcykpCisgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBLZXlwcmVzcyk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2NjAzMCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxw
a2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93
cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbTogUGx1
bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3Jv
bGxPdmVyZmxvd0luRGlyZWN0aW9uOmdyYW51bGFyaXR5OnNvdXJjZTpdKToKKyAgICAgICAgKC1b
V2ViRnJhbWVWaWV3IF9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnRdKToKKyAgICAgICAgKC1b
V2ViRnJhbWVWaWV3IF9zY3JvbGxUb0VuZE9mRG9jdW1lbnRdKToKKyAgICAgICAgKC1bV2ViRnJh
bWVWaWV3IF9wYWdlVmVydGljYWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9wYWdl
SG9yaXpvbnRhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbExpbmVWZXJ0
aWNhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbExpbmVIb3Jpem9udGFs
bHk6XSk6CisKIDIwMTAtMDgtMjQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWVWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZVZpZXcubW0JKHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTE4LDcgKzUxOCw3IEBAIC0gKHZvaWQpdmlld0Rp
ZE1vdmVUb1dpbmRvdwogICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKIH0KIAotLSAo
Qk9PTClfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlv
biBncmFudWxhcml0eTooU2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0gKEJPT0wpX3Nj
cm9sbE92ZXJmbG93SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVs
YXJpdHk6KFNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IHNvdXJjZTooU2Nyb2xsU291cmNl
KXNvdXJjZQogewogICAgIC8vIHNjcm9sbGluZyBvdmVyZmxvd3MgaXMgb25seSBhcHBsaWNhYmxl
IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBXZWJIVE1MVmlldwogICAgIGlmICghW1tzZWxmIGRv
Y3VtZW50Vmlld10gaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKQEAgLTUyNiwx
MiArNTI2LDEyIEBAIC0gKEJPT0wpX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246KFNjcm8KICAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuIE5POwotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNj
cm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVybiBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNv
dXJjZSk7CiB9CiAKIC0gKEJPT0wpX3Njcm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudAogewotICAg
IGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxVcCBncmFudWxhcml0
eTpTY3JvbGxCeURvY3VtZW50XSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJl
Y3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBzb3VyY2U6S2V5cHJl
c3NdKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0p
CiAgICAgICAgIHJldHVybiBOTzsKQEAgLTU0MSw3ICs1NDEsNyBAQCAtIChCT09MKV9zY3JvbGxU
b0JlZ2lubmluZ09mRG9jdW1lbnQKIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRvY3VtZW50CiB7
Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3Jh
bnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxv
d0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudCBzb3Vy
Y2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2lzU2Ny
b2xsYWJsZV0pCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTYxNyw3ICs2MTcsNyBAQCAtIChmbG9h
dClfaG9yaXpvbnRhbFBhZ2VTY3JvbGxEaXN0YW5jZQogCiAtIChCT09MKV9wYWdlVmVydGljYWxs
eTooQk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1
cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2VdKQorICAg
IGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Ny
b2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2Ugc291cmNlOktleXByZXNzXSkKICAgICAg
ICAgcmV0dXJuIFlFUzsKICAgICAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQpAQCAt
NjI5LDcgKzYyOSw3IEBAIC0gKEJPT0wpX3BhZ2VWZXJ0aWNhbGx5OihCT09MKXVwCiAKIC0gKEJP
T0wpX3BhZ2VIb3Jpem9udGFsbHk6KEJPT0wpbGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xs
T3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51
bGFyaXR5OlNjcm9sbEJ5UGFnZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGly
ZWN0aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xs
QnlQYWdlIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAo
IVtzZWxmIF9pc1Njcm9sbGFibGVdKQpAQCAtNjQxLDcgKzY0MSw3IEBAIC0gKEJPT0wpX3BhZ2VI
b3Jpem9udGFsbHk6KEJPT0wpbGVmdAogCiAtIChCT09MKV9zY3JvbGxMaW5lVmVydGljYWxseToo
Qk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/
IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeUxpbmVdKQorICAgIGlm
IChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xs
RG93biBncmFudWxhcml0eTpTY3JvbGxCeUxpbmUgc291cmNlOktleXByZXNzXSkKICAgICAgICAg
cmV0dXJuIFlFUzsKIAogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCkBAIC02NTMsNyAr
NjUzLDcgQEAgLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wpdXAKIAogLSAoQk9P
TClfc2Nyb2xsTGluZUhvcml6b250YWxseTooQk9PTClsZWZ0CiB7Ci0gICAgaWYgKFtzZWxmIF9z
Y3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQg
Z3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93
SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpT
Y3JvbGxCeUxpbmUgc291cmNlOktleXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAg
IGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMwKQorKysgV2Vi
S2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4
LTI1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBm
cmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFFXZWJQ
YWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xsaW5nKToKKwogMjAxMC0wOC0yNSAgTGVvIFlhbmcgIDxs
ZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4Miw3ICsxMzgyLDcgQEAg
Ym9vbCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9sbGluZyhRSwogICAgICAgICB9CiAgICAg
fQogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHko
ZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpOwog
fQogCiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCkluZGV4OiBX
ZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwko
cmV2aXNpb24gNjYwMzApCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MjM1NgorCisgICAgICAgICogV2ViVmlldy5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJj
ZXMuCisgICAgICAgIChXZWJWaWV3OjprZXlEb3duKToKKwogMjAxMC0wOC0yNCAgQWRhIENoYW4g
IDxhZGFjaGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBGYWxrZW5i
dXJnLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzcsNyArMTkzNyw3IEBAIGJvb2wgV2ViVmlldzo6a2V5
RG93bihXUEFSQU0gdmlydHVhbEtleUMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBLZXlwcmVzcyk7CiB9
CiAKIGJvb2wgV2ViVmlldzo6a2V5UHJlc3MoV1BBUkFNIGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0
YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65461</attachid>
            <date>2010-08-25 12:05:35 -0700</date>
            <delta_ts>2010-08-25 12:47:04 -0700</delta_ts>
            <desc>patch v4.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>97249</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNSAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjAyOSkK
KysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDggQEAgaWYgYnVpbGRfcG9y
dCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAgICAg
ICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAgICAn
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAg
ICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0IGNy
YXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNlIHRo
ZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAgICAg
ICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTApLgpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2MDMwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMDEgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEJ5VW5pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bG9jYWxab29tRm9yUmVuZGVyZXIpOiBGaXggc3R5bGUgZ3VpZGUgdmlvbGF0
aW9uLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1h
bmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8g
YW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9w
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
OjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JXaW46OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JXaW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldp
bjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDogQWRkIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3Vy
Y2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4gIEZpeCBjb21waWxhdGlv
biB3YXJuaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBj
b21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDogQWxsb3cg
U2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgcHJlc2VudC4gIFBsdW1iIHNjcm9s
bCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW92ZVRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOiBBbGxvdyBTY3JvbGxBbmltYXRvciB0byBo
YW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aXNTY3JvbGxiYXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOiBBZGQgaG9va3MgZm9yIFNjcm9sbEFuaW1hdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuICBVc2Ugc2Nyb2xsKCkgaW4gcHJlZmVyZW5jZSB0byBzZXRWYWx1ZSgpLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250ZXh0TWVudSk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVXaW46OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51
V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVdpbjo6d25kUHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogSW1wbGVt
ZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4g
IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogSW1wbGVtZW50IG5ldyBT
Y3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IEltcGxlbWVudCBuZXcgU2Ny
b2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExp
c3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Lmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisKIDIwMTAtMDgtMjUgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDYgKzE5NTAsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBAIC0yNTcxLDYgKzI1NzMsOCBAQCBlbmRpZgogCiBp
ZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvcldpbi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzEw
OSw2ICszMTA5LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuaCcsCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw4ICsxMjIyLDEwIEBACiAgICAgICAgICAg
J3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAog
ICAgICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKLSAgICAgICAgICAgIFsnaW5j
bHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRl
JywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9T
a2lhRm9udFdpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJl
bmN5V2luXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAg
ICAgICAgICAgICAjIE1hdGNoIFNhZmFyaSBhbmQgTW96aWxsYSBvbiBXaW5kb3dzLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0
MjU3LDYgKzI0MjU3LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9s
bEFuaW1hdG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxB
bmltYXRvcldpbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTExMiw2ICs1MTEyLDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAw
NTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNj
cm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87
IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJB
RTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlw
dENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDk0Miw2
ICsxMDk0NCw4IEBACiAJCUM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFB
MjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Ny
b2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5p
bWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAw
QzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQx
MjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg0LDYgKzE2Njg4LDggQEAKIAkJCQkxQzYzQTI0
NjBGNzE2NDY2MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3
N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3
RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlDQTNCRjY3QjEwRDk5QkFF
MDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAorCQkJCUNBM0JGNjdEMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4
MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyog
U2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNj
cm9sbGJhclRoZW1lLmggKi8sCkBAIC0xOTgwMCw2ICsxOTgwNiw3IEBACiAJCQkJNDE2RjQ1RjAw
RUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0
Q0MwRTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxi
YXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMzNSw2ICsyMjM0Miw3IEBA
CiAJCQkJOUY3MjMwNTAxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxMjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8q
IFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAw
MDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRUY4NjlGMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnNjcm9sbEJ5VW5pdHMoaW50IHVuaXRzLCBTCiAgICAgICAgICAgICAgICAgZGlyZWN0
aW9uID0gU2Nyb2xsVXA7CiAgICAgICAgICAgICAgICAgdW5pdHMgPSAtdW5pdHM7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0b1JlbmRlckJveChyZW5kKS0+bGF5ZXIoKS0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIHVuaXRzKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQm94KHJl
bmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgUHJvZ3JhbW1hdGlj
LCB1bml0cyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzMsOCArMjczLDggQEAgc3RhdGlj
IGZsb2F0IGxvY2FsWm9vbUZvclJlbmRlcmVyKFJlbmRlcgogICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXMgdGhlIHdyb25nIHRoaW5nIGlmIHR3byBvcHBvc2luZyB6b29tcyBhcmUgaW4gZWZmZWN0IGFu
ZCBjYW5jZWxlZCBlYWNoCiAgICAgLy8gb3RoZXIgb3V0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgd2UnZCBoYXZlIHRvIGNyYXdsIHVwIHRoZSB3aG9sZSByZW5kZXIgdHJlZSBldmVyeQog
ICAgIC8vIHRpbWUgKG9yIHN0b3JlIGFuIGFkZGl0aW9uYWwgYml0IGluIHRoZSBSZW5kZXJTdHls
ZSB0byBpbmRpY2F0ZSB0aGF0IGEgem9vbSB3YXMgc3BlY2lmaWVkKS4KLSAgICBmbG9hdCB6b29t
RmFjdG9yID0gMS4wZjsKLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSAhPSAxLjBmKSB7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CisgICAgaWYgKHJlbmRlcmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgIT0gMSkgewogICAgICAgICAvLyBOZWVkIHRvIGZp
bmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIFJlbmRlck9iamVjdCB0aGF0IHNldCB1cAogICAgICAg
ICAvLyBhIGRpZmZlcmluZyB6b29tLCBhbmQgdGhlbiB3ZSBkaXZpZGUgb3VyIHJlc3VsdCBieSBp
dCB0byBlbGltaW5hdGUgdGhlIHpvb20uCiAgICAgICAgIFJlbmRlck9iamVjdCogcHJldiA9IHJl
bmRlcmVyOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMyArMTMw
LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHQKICAgICBmbG9h
dCBhYnNEZWx0YSA9IGRlbHRhID4gMCA/IGRlbHRhIDogLWRlbHRhOwogICAgIAogICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBXaGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
IAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1
cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBw
b3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAg
ICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJl
Y3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzRGVsdGEs
IHN0b3BOb2RlKTsKIAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkK
LSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZl
RGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBz
dG9wTm9kZSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAg
PyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVsLCBX
aGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtOTc1LDcgKzk3NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZXRNb3VzZVByZXNzTm9k
ZShQYXMKICAgICBtX21vdXNlUHJlc3NOb2RlID0gbm9kZTsKIH0KIAotYm9vbCBFdmVudEhhbmRs
ZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUpCitib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIE5vZGUqIHN0YXJ0aW5nTm9k
ZSkKIHsKICAgICBOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOwogCkBAIC05ODcsNyArOTg3LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAgIGlm
IChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5pc0xp
c3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSkpIHsKICAgICAgICAgICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05OTYsMTcgKzk5NiwxNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE5vZGUqIHN0
YXJ0aW5nTm9kZSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xs
U291cmNlIHNvdXJjZSwgTm9kZSogc3RhcnRpbmdOb2RlKQogewogICAgIC8vIFRoZSBsYXlvdXQg
bmVlZHMgdG8gYmUgdXAgdG8gZGF0ZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNjcm9sbC4gV2Ug
bWF5IGJlCiAgICAgLy8gaGVyZSBiZWNhdXNlIG9mIGFuIG9uTG9hZCBldmVudCwgaW4gd2hpY2gg
Y2FzZSB0aGUgZmluYWwgbGF5b3V0IGhhc24ndCBiZWVuIHBlcmZvcm1lZCB5ZXQuCiAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgc3RhcnRpbmdOb2RlKTsKKyAgICBib29sIGhhbmRsZWQgPSBzY3JvbGxPdmVyZmxvdyhkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIHN0YXJ0aW5nTm9kZSk7CiAgICAgaWYgKCFoYW5k
bGVkKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7CiAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgICAgICAgICBo
YW5kbGVkID0gdmlldyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSA6IGZh
bHNlOworICAgICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgc291cmNlKSA6IGZhbHNlOwogICAgICAgICAgICAgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgfSB3aGlsZSAoIWhhbmRsZWQgJiYgZnJhbWUp
OwogICAgICB9CkBAIC0yNjkzLDcgKzI2OTMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dFNwYWNlRXZlbnRIYW5kCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBldmVudC0+c2hpZnRLZXkoKSA/IFNjcm9sbFVwIDogU2Nyb2xsRG93bjsKLSAgICBpZiAo
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UpKSB7CisgICAgaWYgKHNjcm9s
bE92ZXJmbG93KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpIHsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
NzAyLDcgKzI3MDIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodmlldy0+c2Nyb2xs
KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKSkKKyAgICBpZiAodmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw5
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5v
ZGUqKTsKIAotICAgIGJvb2wgc2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CisgICAgYm9vbCBzY3JvbGxPdmVy
ZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291
cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKIAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2Rl
ID0gMCk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAw
KTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgYm9vbCBzaG91bGREcmFnQXV0b05v
ZGUoTm9kZSosIGNvbnN0IEludFBvaW50JikgY29uc3Q7IC8vIC13ZWJraXQtdXNlci1kcmFnID09
IGF1dG8KSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNjYwMjkp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDIsNyArNDQyLDkgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiB9CiAK
IC8vIEluIGEgYm90dG9tLXVwIHdheSwgdGhpcyBtZXRob2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFt
ZXwgaW4gYSBnaXZlbiBkaXJlY3Rpb24KLS8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUg
ZnJhbWUgdHJlZSBoaWVyYXJjaHkgaW4gY2FzZSBpdCBkb2VzIG5vdCBzdWNjZWVkLgorLy8gfGRp
cmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFtZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0
IGRvZXMgbm90CisvLyBzdWNjZWVkLgorLy8gTk9URTogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRo
ZSBjYWxsZXIgaXMgcmVzcG9uZGluZyB0byBhIGtleWJvYXJkIGV2ZW50LgogYm9vbCBzY3JvbGxJ
bkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
Rm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKIHsKICAgICBpZiAoIWZyYW1lKQpAQCAtNDY4LDkg
KzQ3MCw5IEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2MKICAgICB9
CiAKICAgICBpZiAoIWNhbmRpZGF0ZS5pc051bGwoKSAmJiBpc1Njcm9sbGFibGVDb250YWluZXJO
b2RlKGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KSkKLSAgICAgICAgcmV0dXJuIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxCeUxpbmUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KTsKKyAgICAgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxCeUxpbmUsIEtleXByZXNzLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xs
YWJsZUJveCk7CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1
cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSk7CisgICAgcmV0dXJuIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxCeUxpbmUsIEtleXByZXNzKTsKIH0KIAogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50KiBl
bGVtZW50KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgZmxvYXQq
IGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9j
dXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4
KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKKyAgICBp
ZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmN1
cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykK
K3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
bV9jdXJyZW50UG9zWCA9IHBvczsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFBvc1kgPSBw
b3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyQ2xpZW50OworCitjbGFzcyBTY3JvbGxBbmltYXRv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBjcmVhdGUoU2Nyb2xsYmFy
Q2xpZW50Kik7CisKKyAgICBTY3JvbGxBbmltYXRvcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkg
OiBtX2NsaWVudChjbGllbnQpIHsgfQorICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yKCkgeyB9
CisKKyAgICAvLyBDb21wdXRlcyBhIHNjcm9sbCBkZXN0aW5hdGlvbiBmb3IgdGhlIGdpdmVuIHBh
cmFtZXRlcnMuICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gYWxyZWFkeSBhdCB0aGUgZGVzdGlu
YXRpb24uICBPdGhlcndpc2UsIHN0YXJ0cyBzY3JvbGxpbmcgdG93YXJkcyB0aGUKKyAgICAvLyBk
ZXN0aW5hdGlvbiBhbmQgcmV0dXJucyB0cnVlLiAgU2Nyb2xsaW5nIG1heSBiZSBpbW1lZGlhdGUg
b3IgYW5pbWF0ZWQuCisgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24gYWx3YXlz
IHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgorICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3Vy
Y2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworCisgICAgLy8gU3RvcHMgYW55IGFu
aW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmlt
YXRvcgorICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhpcyBkb2Vz
IG5vdCBjYXVzZSBhIGNhbGxiYWNrIHRvIHRoZQorICAgIC8vIFNjcm9sbGJhckNsaWVudC4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBmbG9hdCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJDbGllbnQq
IG1fY2xpZW50OworICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEg
RmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAv
LyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCit9OworCisjaWYgIU9TKFdJTkRPV1MpCitTY3Jv
bGxBbmltYXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqKQorewor
ICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50KTsKK30KKyNlbmRpZgorCit9Cisj
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JXaW4u
aCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworU2Nyb2xsQW5pbWF0b3IqIFNj
cm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0
dXJuIG5ldyBTY3JvbGxBbmltYXRvcldpbihjbGllbnQpOworfQorCitjb25zdCBkb3VibGUgU2Ny
b2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAxOworCitTY3JvbGxBbmlt
YXRvcldpbjo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJl
bnQsIGZsb2F0KiBjdXJyZW50UG9zKQorICAgIDogbV9jdXJyZW50UG9zKGN1cnJlbnRQb3MpCisg
ICAgLCBtX2Rlc2lyZWRQb3MoMCkKKyAgICAsIG1fY3VycmVudFZlbG9jaXR5KDApCisgICAgLCBt
X2Rlc2lyZWRWZWxvY2l0eSgwKQorICAgICwgbV9sYXN0QW5pbWF0aW9uVGltZSgwKQorICAgICwg
bV9hbmltYXRpb25UaW1lcihwYXJlbnQsICZTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGlt
ZXJGaXJlZCkKK3sKK30KKworCitTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4o
U2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCisgICAgOiBTY3JvbGxBbmltYXRvcihjbGllbnQpCisg
ICAgLCBtX2hvcml6b250YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYKQorICAgICwgbV92ZXJ0
aWNhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1kpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4oKQoreworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVk
KCZtX2hvcml6b250YWxEYXRhKTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92
ZXJ0aWNhbERhdGEpOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQorewor
ICAgIC8vIERvbid0IGFuaW1hdGUganVtcGluZyB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0
aGUgZG9jdW1lbnQuCisgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisg
ICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc291cmNlLCBzdGVwLCBtdWx0aXBsaWVyKTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5p
bWF0YWJsZSBzY3JvbGwuICBDYWxjdWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlz
RGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0
aWNhbERhdGEgOiAmbV9ob3Jpem9udGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1h
eChzdGQ6Om1pbihkYXRhLT5tX2Rlc2lyZWRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0
aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYp
OworICAgIGlmIChuZXdQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gbmV3UG9zOworCisgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBhbmltYXRpb24gdmVsb2NpdHkuCisgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3Mg
PT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZmxvYXQg
YW5pbWF0aW9uU3RlcDsKKyAgICBib29sIGFscmVhZHlBbmltYXRpbmcgPSBkYXRhLT5tX2FuaW1h
dGlvblRpbWVyLmlzQWN0aXZlKCk7CisgICAgaWYgKChzb3VyY2UgIT0gS2V5cHJlc3MpICYmIChz
b3VyY2UgIT0gV2hlZWwpKSB7CisgICAgICAgIC8vIFdoZW4gYXV0b3Njcm9sbGluZywgdGhlIHNj
cm9sbGJhcidzIGF1dG9zY3JvbGwgdGltZXIgd2lsbCBjYWxsIHVzIHRvCisgICAgICAgIC8vIGlu
Y3JlbWVudCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBieSB8c3RlcHwgZXZlcnkKKyAgICAgICAgLy8g
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgc2Vj
b25kcy4gIElmIHdlCisgICAgICAgIC8vIHNldCB0aGUgZGVzaXJlZCB2ZWxvY2l0eSB0byBleGFj
dGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsCisgICAgICAgIC8vIG5laXRoZXIg
cmFjZSBhaGVhZCAoYW5kIHRoZW4gaGF2ZSB0byBzbG93IGRvd24pIG5vciBpbmNyZWFzaW5nbHkg
bGFnCisgICAgICAgIC8vIGJlaGluZCwgYnV0IHdpbGwgYmUgc21vb3RoIGFuZCBzeW5jaHJvbml6
ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBhY2Nl
bGVyYXRpb24gcGVyaW9kLCB0aGUgY3VycmVudCBwb3NpdGlvbgorICAgICAgICAvLyB3aWxsIGxh
ZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IChzZWUgY29tbWVu
dHMgb24KKyAgICAgICAgLy8gYW5pbWF0ZVNjcm9sbCgpKTsgdGhlIGV4YWN0IGFtb3VudCBpcyBn
aXZlbiBieQorICAgICAgICAvLyAgIGxhZyA9IHxzdGVwfCAtIHYoMC41dEEgKyB0RCkKKyAgICAg
ICAgLy8gV2hlcmUKKyAgICAgICAgLy8gICB2ID0gVGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwK
KyAgICAgICAgLy8gICAgICAgfHN0ZXB8IC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkt
PmF1dG9zY3JvbGxUaW1lckRlbGF5KCkKKyAgICAgICAgLy8gICB0QSA9IGFjY2VsZXJhdGlvblRp
bWUoKQorICAgICAgICAvLyAgIHREID0gVGhlIHRpbWUgd2UgcHJldGVuZCBoYXMgYWxyZWFkeSBw
YXNzZWQgd2hlbiBzdGFydGluZyB0bworICAgICAgICAvLyAgICAgICAgc2Nyb2xsLCB8YW5pbWF0
aW9uVGltZXJEZWxheXwKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBsYWcgcHJvdmlkZXMg
c29tZSBidWZmZXIgYWdhaW5zdCB0aW1lciBqaXR0ZXIgc28gd2UncmUgbGVzcworICAgICAgICAv
LyBsaWtlbHkgdG8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGFuZCBzdG9wIChhbmQgdGh1cyBo
YXZlIHRvCisgICAgICAgIC8vIHJlLWFjY2VsZXJhdGUsIGNhdXNpbmcgYSB2aXNpYmxlIGhpdGNo
KSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4dAorICAgICAgICAvLyBhdXRvc2Nyb2xsIGluY3Jl
bWVudC4KKyAgICAgICAgYW5pbWF0aW9uU3RlcCA9IHN0ZXA7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gRm9yIGtleWJvYXJkIGFuZCB3aGVlbCBzY3JvbGxzLCB3ZSBkb24ndCBrbm93IHdoZW4g
dGhlIG5leHQgaW5jcmVtZW50CisgICAgICAgIC8vIHdpbGwgYmUgcmVxdWVzdGVkLiAgSWYgd2Ug
c2V0IHRoZSB0YXJnZXQgdmVsb2NpdHkgYmFzZWQgb24gaG93IGZhcgorICAgICAgICAvLyBhd2F5
IGZyb20gdGhlIHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUsIHRoZW4gZm9yIGtleWJvYXJkL3doZWVs
IGV2ZW50cworICAgICAgICAvLyB0aGF0IGNvbWUgZmFzdGVyIHRoYW4gdGhlIGF1dG9zY3JvbGwg
ZGVsYXksIHdlJ2xsIGFzeW1wdG90aWNhbGx5CisgICAgICAgIC8vIGFwcHJvYWNoIHRoZSB2ZWxv
Y2l0eSBuZWVkZWQgdG8gc3RheSBzbW9vdGhseSBpbiBzeW5jIHdpdGggdGhlIHVzZXIncworICAg
ICAgICAvLyBhY3Rpb25zOyBmb3IgZXZlbnRzIHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9s
bCBvbmUgaW5jcmVtZW50IGFuZAorICAgICAgICAvLyB0aGVuIHBhdXNlIHVudGlsIHRoZSBuZXh0
IGV2ZW50IGZpcmVzLiAgVGhpcyBsYXR0ZXIgYmVoYXZpb3IgbWVhbnMKKyAgICAgICAgLy8gdGhh
dCBzaW5nbGUga2V5cHJlc3NlcyBvciB3aGVlbCBmbGlja3Mgd2lsbCBoYXZlIHRoZSBzYW1lIGFw
cGVhcmFuY2UKKyAgICAgICAgLy8gYXMgc2luZ2xlIHByZXNzZXMgb2YgYSBzY3JvbGxiYXIgcGFy
dC4KKyAgICAgICAgYW5pbWF0aW9uU3RlcCA9IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9jdXJyZW50
UG9zKTsKKyAgICAgICAgLy8gSWYgYSBrZXkgaXMgaGVsZCBkb3duIChvciB0aGUgd2hlZWwgY29u
dGludWFsbHkgc3B1biksIHRoZW4gb25jZSB3ZQorICAgICAgICAvLyBoYXZlIHJlYWNoZWQgYSB2
ZWxvY2l0eSBjbG9zZSB0byB0aGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LCB3ZSdyZQorICAgICAg
ICAvLyBsaWtlbHkgdG8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2Ft
ZSB0aW1lIHdlJ2QKKyAgICAgICAgLy8gZXhwZWN0IHRoZSBuZXh0IGluY3JlbWVudCB0byBvY2N1
ciAtLSBiYWQgYmVjYXVzZSBpdCBsZWFkcyB0bworICAgICAgICAvLyBoaXRjaGluZyBhcyBkZXNj
cmliZWQgYWJvdmUuICBTbyB3ZSB0cmltIHRoZSB2ZWxvY2l0eSBzbGlnaHRseSBzbworICAgICAg
ICAvLyB0aGF0IHdlIGhhdmUgYSBzbWFsbCBidWZmZXIsIHRvIGRlY3JlYXNlIHRoZSBsaWtlbGlo
b29kIG9mIHRoaXMKKyAgICAgICAgLy8gb2NjdXJyaW5nLiAgTm90ZSB0aGF0IHdlIHdvbid0IGZh
bGwgc3RlYWRpbHkgZnVydGhlciBiZWhpbmQgaGVyZSwKKyAgICAgICAgLy8gYmVjYXVzZSBpbiBz
dWJzZXF1ZW50IHVwZGF0ZXMgd2UnbGwgYmUgY2FsY3VsYXRpbmcgb3VyIHZlbG9jaXR5IGJhc2Vk
CisgICAgICAgIC8vIG9uIGEgbGFyZ2VyIGRlc2lyZWQgc3RlcCAtLSBzbyB0aGUgcHJhY3RpY2Fs
IGVmZmVjdCBpcyB0aGF0IHdlIGxhZyBieQorICAgICAgICAvLyBhIHNtYWxsLCBjb25zdGFudCBh
bW91bnQgZGVwZW5kaW5nIG9uIHRoZSB0cmltIHZhbHVlIGFuZCB0aGUgcmF0ZSBhdAorICAgICAg
ICAvLyB3aGljaCBpbmNyZW1lbnRzIG9jY3VyIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRp
bWVyIGRlbGF5LiAgVGhlCisgICAgICAgIC8vIGV4YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAg
ICAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgociAvIGspIC0gMSkKKyAgICAgICAgLy8gV2hlcmUK
KyAgICAgICAgLy8gICByID0gVGhlIHJhdGlvIG9mIHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxh
eSwKKyAgICAgICAgLy8gICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9z
Y3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQorICAgICAgICAvLyAgICAgICBrZXkvd2hlZWwgcmVw
ZWF0IGRlbGF5IChpLmUuID4gMSB3aGVuIGtleXMgcmVwZWF0IGZhc3RlcikKKyAgICAgICAgLy8g
ICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVsb3cKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSWYgd2Ugd2FudCB0byBhY3QgYXMgbXVjaCBsaWtlIGF1dG9zY3JvbGxpbmcg
YXMgcG9zc2libGUsIHRoZW4gd2UKKyAgICAgICAgLy8gY2hvb3NlIGsgc3VjaCB0aGF0IGxhZyBp
cyB0aGUgc2FtZSBhcyBhYm92ZSB3aGVuIHIgPSAxLiAgVGhlIGVxdWF0aW9uCisgICAgICAgIC8v
IGJlbG93IGRvZXMgdGhpcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRv
bid0IGRvIHRoaXMgd2hlbiB3ZSdyZSBub3QgYWxyZWFkeSBhbmltYXRpbmcsIGkuZS4KKyAgICAg
ICAgLy8gZ2V0dGluZyByZXBlYXRlZCBldmVudHMuICBJZiB0aGUgdXNlciBzaW1wbHkgcHJlc3Nl
ZCBhIGtleSBvbmNlLCB3ZQorICAgICAgICAvLyB3YW50IHRvIGFuaW1hdGUgYXQgbm9ybWFsIHNw
ZWVkIGxpa2Ugd2Ugd291bGQgYWJvdmUuICBJZiB3ZSdsbCBiZQorICAgICAgICAvLyBnZXR0aW5n
IG1vcmUgZXZlbnRzIHRoYXQgd291bGQgcmVxdWlyZSB0aGUgdHJpbW1pbmcgYmVsb3csIG91cgor
ICAgICAgICAvLyBpbml0aWFsIGFjY2VsZXJhdGlvbiBwZXJpb2Qgd2lsbCBnaXZlIHVzIGVub3Vn
aCB0aW1lIGZvciB0aGVtIHRvCisgICAgICAgIC8vIGFycml2ZS4KKyAgICAgICAgaWYgKGFscmVh
ZHlBbmltYXRpbmcpCisgICAgICAgICAgICBhbmltYXRpb25TdGVwIC89ICgyLjAgLSAoKDEuMCAv
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKSAq
ICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkgKyBhbmltYXRpb25UaW1lckRlbGF5KSkpOworICAg
IH0KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsKKworICAgIC8v
IElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9sbGluZywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5
QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRlU2Nyb2xsKGRhdGEpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BB
bmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sK
KyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhOworICAgIHN0b3BBbmlt
YXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7
CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9zOworICAgIGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7Cit9CisKKy8vIHN0YXRp
YworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKCkKK3sKKyAgICAv
LyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3Jv
bGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUgbGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0
byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFyZ2V0CisgICAgLy8gdmVsb2NpdHkuICBDaG9v
c2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9kdWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAg
Ly8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2
ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1l
cikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1lciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2Fu
aW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVy
QXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqIGRhdGEpCit7Cisg
ICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5nIHBlcmYgdmVyc3VzIG5vbi1zbW9vdGggc2Ny
b2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFsIHRpbWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRl
IHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAgdCA9IHQwICsgMC41dEEgLSB0RCArIHRTCisg
ICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhlIHRpbWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xs
IHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAgIC8vICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9u
IHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRv
c2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cpCisgICAgLy8gICB0RCA9IHxhbmltYXRpb25U
aW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0
aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEKKyAgICAvLyAgICAgICAgc2luZ2xlIHNjcm9s
bCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9uZSBkdWUgdG8gY2FsbGluZworICAgIC8vICAg
ICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkgKH4wIGZvciBzaW1wbGUgcGFnZXMsIGxhcmdl
ciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBwYWdlcykuCisgICAgLy8KKyAgICAvLyBCZWNh
dXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxsLCB0aGUgdG90YWwgbGFnIChhcyB1c2VycyBw
ZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdpYmxlIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJv
dWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBXaXRob3V0CisgICAgLy8ga25vd2luZyBpbiBh
ZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhhcmQgdG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4K
KyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMg
YW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhl
IHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAv
LyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBiZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGlt
ZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBwYWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3Rl
bSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8gYXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2Un
dmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxpbmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3Zl
IGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBpZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSds
bCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21lIGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAg
IGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA/IChX
VEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lKSA6IGFuaW1hdGlv
blRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkg
dHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVudAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZs
b2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYgKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwg
ZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBh
IGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2ggdGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAg
ICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFj
Y2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFu
dCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFy
Z2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFj
Y2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVu
dGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxv
Y2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVudGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9k
ZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2
ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4gb3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVw
ZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGlu
IHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUg
YWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAgICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBh
ZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0
dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3Vy
cmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBh
Y3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJhdGlvblJhdGU7CisgICAgICAgICAgICAvLyBU
aGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29uc3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBh
cmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxpbmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQg
cmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAgICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3Vs
YXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIgcG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAg
ICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFs
VmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVyYXRpb25JbnRlcnZhbCk7CisgICAgICAgICAg
ICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQgdGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1w
bHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVsb2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFm
dGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRh
LT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Nyb2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25J
bnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5t
X2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0
YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAg
ICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90
ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAg
ICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRo
ZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2
ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2NpdHkpICogKGVsYXBzZWQgdGltZSkuCisgICAg
ICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3Jv
bGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3VyIGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3Jl
YXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3Vy
cmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgfQorCisgICAgLy8g
Tm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2
ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxlZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9z
IC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsKKyAgICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFy
IGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAg
ICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAgKmRhdGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1f
ZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgICAg
ICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Tm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNl
dCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1cGRhdGUuCisgICAgICAgIGlmICgqZGF0YS0+bV9j
dXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2
ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAgICAgICAqZGF0YS0+bV9jdXJyZW50UG9zICs9
IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRP
bmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkpOworICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRp
b25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOworICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Ny
b2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJl
bnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJlbnRQb3MpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
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
RS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5p
bWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yV2luIDog
cHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmltYXRvcldpbihT
Y3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcldpbigpOworCisg
ICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7
CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJlbnQsIGZsb2F0KiBj
dXJyZW50UG9zKTsKKworICAgICAgICBmbG9hdCogbV9jdXJyZW50UG9zOworICAgICAgICBmbG9h
dCBtX2Rlc2lyZWRQb3M7CisgICAgICAgIGZsb2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAg
ICBmbG9hdCBtX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlv
blRpbWU7CisgICAgICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiBtX2FuaW1hdGlvblRpbWVy
OworICAgIH07CisKKyAgICBzdGF0aWMgZG91YmxlIGFjY2VsZXJhdGlvblRpbWUoKTsKKyAgICBz
dGF0aWMgY29uc3QgZG91YmxlIGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICB2b2lkIGFuaW1h
dGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+Kik7CisgICAgdm9pZCBzdG9w
QW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSopOworICAgIHZvaWQgYW5pbWF0ZVNj
cm9sbChQZXJBeGlzRGF0YSopOworCisgICAgUGVyQXhpc0RhdGEgbV9ob3Jpem9udGFsRGF0YTsK
KyAgICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2FsRGF0YTsKK307CisKK30KKyNlbmRpZgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5
cGVzLmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIFNjcm9sbEJ5UGl4ZWwKICAgICB9OwogCisgICAgZW51bSBTY3JvbGxTb3VyY2Ugewor
ICAgICAgICBLZXlwcmVzcywKKyAgICAgICAgV2hlZWwsCisgICAgICAgIFNjcm9sbGJhclBhcnRP
ck1lbnUsIC8vICJTY3JvbGxiYXIiIGFsb25lIGNsYXNoZXMgd2l0aCB0aGUgY2xhc3MgbmFtZS4K
KyAgICAgICAgUHJvZ3JhbW1hdGljCisgICAgfTsKKwogICAgIGVudW0gU2Nyb2xsYmFyT3JpZW50
YXRpb24geyBIb3Jpem9udGFsU2Nyb2xsYmFyLCBWZXJ0aWNhbFNjcm9sbGJhciB9OwogCiAgICAg
ZW51bSBTY3JvbGxiYXJNb2RlIHsgU2Nyb2xsYmFyQXV0bywgU2Nyb2xsYmFyQWx3YXlzT2ZmLCBT
Y3JvbGxiYXJBbHdheXNPbiB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lv
biA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Myw2ICsyNzMsMjAgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9s
bFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRoKCksIG1heGlt
dW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCitpbnQgU2Nyb2xsVmlldzo6c2Nyb2xsU2l6ZShTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNj
cm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6
b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4g
c2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQu
eCgpLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgU2Ny
b2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIC8vIEZp
Z3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgpAQCAtMzE1LDE3ICszMjksMTcgQEAgdm9pZCBT
Y3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdAogICAgIHVwZGF0ZVNjcm9sbGJhcnMo
SW50U2l6ZShuZXdTY3JvbGxQb3NpdGlvbi54KCksIG5ld1Njcm9sbFBvc2l0aW9uLnkoKSkpOwog
fQogCi1ib29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2Ugc291cmNlKQogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAg
ICByZXR1cm4gcGxhdGZvcm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiAKICAgICBp
ZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7CiAg
ICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgc291cmNlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSk7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ0MSw3ICs0NTUsNyBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGll
bnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1fc2Nyb2xs
YmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1
cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAgLTQ2Myw3ICs0NzcsNyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAgICAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVw
KCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlv
bihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1f
c2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CiAgICAgfQpAQCAtNjY5LDExICs2ODMsMTYg
QEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICBpZiAo
ZS5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5UGFnZVdoZWVsRXZlbnQpIHsKICAgICAgICAgICAg
IEFTU0VSVChkZWx0YVggPT0gMCk7CiAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGFZ
IDwgMDsKLSAgICAgICAgICAgIGRlbHRhWSA9IG1heChtYXg8aW50Pih2aXNpYmxlSGVpZ2h0KCkg
KiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCB2aXNpYmxlSGVpZ2h0
KCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOworICAgICAgICAg
ICAgZGVsdGFZID0gbWF4KG1heChzdGF0aWNfY2FzdDxmbG9hdD4odmlzaWJsZUhlaWdodCgpKSAq
IFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZs
b2F0Pih2aXNpYmxlSGVpZ2h0KCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSkpLCAxLjBmKTsKICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICBk
ZWx0YVkgPSAtZGVsdGFZOwogICAgICAgICB9Ci0gICAgICAgIHNjcm9sbEJ5KEludFNpemUoLWRl
bHRhWCwgLWRlbHRhWSkpOworCisgICAgICAgIC8vIFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gc2Ny
b2xsQnkoKSBpZiB0aGVyZSBpcyBubyBzY3JvbGxiYXIgZm9yIGEgbm9uLXplcm8gZGVsdGE/Cisg
ICAgICAgIGlmIChkZWx0YVkgJiYgbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgV2hlZWws
IGRlbHRhWSk7CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQor
ICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Ny
b2xsQnlQaXhlbCwgV2hlZWwsIGRlbHRhWCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuaAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOSBAQCBjbGFzcyBTY3JvbGxWaWV3IDogcHVi
bGljIFdpZGdldCwgcHVibGljCiBwdWJsaWM6CiAgICAgflNjcm9sbFZpZXcoKTsKIAotICAgIC8v
IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4gRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXIg
dHdvLgorICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJp
ZGVzIHRoZSBvdGhlcnMuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIAogICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9z
dHMgdGhlIFNjcm9sbFZpZXcuIFRoZSBTY3JvbGxWaWV3IHdpbGwgY29tbXVuaWNhdGUgc2Nyb2xs
cyBhbmQgcmVwYWludHMgdG8gdGhlCkBAIC0xNTQsNyArMTU2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgcykgeyByZXR1cm4gc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24oKSArIHMpOyB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNjcm9sbHMg
YnkgbGluZXMsIHBhZ2VzIG9yIHBpeGVscy4KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlKTsKICAgICAgICAgCiAgICAg
Ly8gU2Nyb2xsIHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhlIHZpZXcgKGVpdGhlciBibGl0dGlu
ZyBvciBpbnZhbGlkYXRpbmcgYXMgbmVlZGVkKS4KICAgICB2b2lkIHNjcm9sbENvbnRlbnRzKGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJl
dmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsMTIgKzEwMSwxMiBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAg
IG1fdGhlbWUtPnVucmVnaXN0ZXJTY3JvbGxiYXIodGhpcyk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFy
OjpzZXRWYWx1ZShpbnQgdikKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdiwgYm9vbCBm
cm9tU2Nyb2xsQW5pbWF0aW9uKQogewogICAgIHYgPSBtYXgobWluKHYsIG1fdG90YWxTaXplIC0g
bV92aXNpYmxlU2l6ZSksIDApOwogICAgIGlmICh2YWx1ZSgpID09IHYpCiAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gT3VyIHZhbHVlIHN0YXllZCB0aGUgc2FtZS4KLSAgICBzZXRDdXJyZW50UG9z
KHYpOworICAgIHNldEN1cnJlbnRQb3ModiwgIWZyb21TY3JvbGxBbmltYXRpb24pOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBTY3JvbGxiYXI6OnNldFN0
ZXBzKGludCBsaW5lU3RlcCwgaQogICAgIG1fcGl4ZWxTdGVwID0gMS4wZiAvIHBpeGVsc1BlclN0
ZXA7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29s
IFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVy
KQogewogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkgewpAQCAtMTQyLDI0ICsxNDIsMjUgQEAgYm9vbCBTY3JvbGxi
YXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZAogICAgIH0KICNlbmRpZgogCi0gICAgZmxvYXQg
c3RlcCA9IDA7Ci0gICAgaWYgKChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgJiYgbV9vcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0ICYmIG1f
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIHN0ZXAgPSAtMTsK
LSAgICBlbHNlIGlmICgoZGlyZWN0aW9uID09IFNjcm9sbERvd24gJiYgbV9vcmllbnRhdGlvbiA9
PSBWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCAmJiBtX29y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBzdGVwID0gMTsKKyAg
ICAvLyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgorICAgIGlmICgobV9vcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGly
ZWN0aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8IGRpcmVj
dGlvbiA9PSBTY3JvbGxSaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGZsb2F0
IHN0ZXA7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5TGluZSkKLSAgICAgICAgc3Rl
cCAqPSBtX2xpbmVTdGVwOworICAgICAgICBzdGVwID0gbV9saW5lU3RlcDsKICAgICBlbHNlIGlm
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBhZ2UpCi0gICAgICAgIHN0ZXAgKj0gbV9wYWdlU3Rl
cDsKKyAgICAgICAgc3RlcCA9IG1fcGFnZVN0ZXA7CiAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHkg
PT0gU2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgc3RlcCAqPSBtX3RvdGFsU2l6ZTsKKyAgICAg
ICAgc3RlcCA9IG1fdG90YWxTaXplOwogICAgIGVsc2UgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9s
bEJ5UGl4ZWwpCi0gICAgICAgIHN0ZXAgKj0gbV9waXhlbFN0ZXA7CisgICAgICAgIHN0ZXAgPSBt
X3BpeGVsU3RlcDsKKyAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9
PSBTY3JvbGxMZWZ0KQorICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7CisgICAgaWYg
KGNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xpZW50KCktPnNjcm9sbChtX29yaWVudGF0aW9u
LCBncmFudWxhcml0eSwgc291cmNlLCBzdGVwLCBtdWx0aXBsaWVyKTsKIAotICAgIGZsb2F0IG5l
d1BvcyA9IG1fY3VycmVudFBvcyArIHN0ZXAgKiBtdWx0aXBsaWVyOwotICAgIGZsb2F0IG1heFBv
cyA9IG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZTsKLSAgICByZXR1cm4gc2V0Q3VycmVudFBv
cyhtYXgobWluKG5ld1BvcywgbWF4UG9zKSwgMC4wZikpOworICAgIHJldHVybiBzZXRDdXJyZW50
UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkpLCAwLjBmKSwgZmFsc2UpOwog
fQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpAQCAtMjIxLDcgKzIyMiw3IEBAIHZv
aWQgU2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQoZG8KICAgICB9CiAKICAgICAvLyBI
YW5kbGUgdGhlIGFycm93cyBhbmQgdHJhY2suCi0gICAgaWYgKHNjcm9sbChwcmVzc2VkUGFydFNj
cm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQorICAgIGlm
IChzY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxH
cmFudWxhcml0eSgpLCBTY3JvbGxiYXJQYXJ0T3JNZW51KSkKICAgICAgICAgc3RhcnRUaW1lcklm
TmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjkxLDExICsyOTIsMTQgQEAgdm9pZCBTY3JvbGxiYXI6
Om1vdmVUaHVtYihpbnQgcG9zKQogICAgIGVsc2UgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgZGVs
dGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7CiAgICAgaWYgKGRlbHRhKQotICAgICAgICBzZXRD
dXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0o
KSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7CisgICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0g
dGh1bWJMZW4pLCB0cnVlKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxv
YXQgcG9zKQorYm9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBib29sIG5v
dGlmeVNjcm9sbEFuaW1hdG9yKQogeworICAgIGlmIChub3RpZnlTY3JvbGxBbmltYXRvciAmJiBj
bGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbihtX29yaWVudGF0aW9uLCBwb3MpOworCiAgICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3Mp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQwLDcgKzM0NCw3IEBAIGJvb2wgU2Nyb2xs
YmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9
PSBUaHVtYlBhcnQpIHsKICAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFn
T3JpZ2luKHRoaXMsIGV2dCkpCi0gICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdp
bik7CisgICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgdHJ1ZSk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRodW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhldnQucG9zKCkpLngoKSA6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHJldmlz
aW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsMTEgKzc1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc3Nl
ZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAKICAgICB2b2lkIHNldFN0ZXBzKGludCBsaW5lU3RlcCwg
aW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxzUGVyU3RlcCA9IDEpOwotICAgIGJvb2wgc2V0VmFsdWUo
aW50KTsKKyAgICBib29sIHNldFZhbHVlKGludCwgYm9vbCBmcm9tU2Nyb2xsQW5pbWF0aW9uKTsK
ICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBpbnQgdG90YWxTaXplKTsK
ICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2VkUG9zID0gcDsgfQogCi0g
ICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEuMGYpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0KTsKIApAQCAtMTI0LDkgKzEyNCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFy
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsYmFyKFNj
cm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6
ZSwgU2Nyb2xsYmFyVGhlbWUqID0gMCk7CiAKQEAgLTE0Miw3ICsxMzksNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpOwog
ICAgIAogICAgIHZvaWQgbW92ZVRodW1iKGludCBwb3MpOwotICAgIGJvb2wgc2V0Q3VycmVudFBv
cyhmbG9hdCBwb3MpOwogCiAgICAgU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVudDsKICAgICBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwpAQCAtMTY3LDYgKzE2MywxMSBAQCBwcm90
ZWN0ZWQ6CiAgICAgYm9vbCBtX292ZXJsYXBzUmVzaXplcjsKICAgICAKICAgICBib29sIG1fc3Vw
cHJlc3NJbnZhbGlkYXRpb247CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
YmFyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBzZXRDdXJyZW50UG9zKGZs
b2F0IHBvcywgYm9vbCBub3RpZnlTY3JvbGxBbmltYXRvcik7CiB9OwogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAog
I2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTM0LDcgKzM2LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
U2Nyb2xsYmFyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQo
KSB7fQorICAgIFNjcm9sbGJhckNsaWVudCgpIDogbV9zY3JvbGxBbmltYXRvcihTY3JvbGxBbmlt
YXRvcjo6Y3JlYXRlKHRoaXMpKSB7IH0KKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQoKSB7
IH0KKworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQg
c3RlcCwgZmxvYXQgbXVsdGlwbGllcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Njcm9sbEFu
aW1hdG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIHN0ZXAsIG11
bHRpcGxpZXIpOworICAgIH0KKworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5p
bWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpCisgICAg
eworICAgICAgICBtX3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmlt
YXRpb24ob3JpZW50YXRpb24sIHBvcyk7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQm
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0JikgPSAwOwpAQCAtNjcsNiArODUsOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXco
cGFyZW50UG9pbnQpOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8U2Nyb2xsQW5pbWF0
b3I+IG1fc2Nyb2xsQW5pbWF0b3I7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclF0LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMjMgKzcyLDIxIEBAIGJvb2wgU2Nyb2xs
YmFyOjpjb250ZXh0TWVudShjb25zdCBQbGF0Zm8KICAgICBjb25zdCBRUG9pbnQgZ2xvYmFsUG9z
ID0gUVBvaW50KGV2ZW50Lmdsb2JhbFgoKSwgZXZlbnQuZ2xvYmFsWSgpKTsKICAgICBRQWN0aW9u
KiBhY3Rpb25TZWxlY3RlZCA9IG1lbnUuZXhlYyhnbG9iYWxQb3MpOwogCi0gICAgaWYgKCFhY3Rp
b25TZWxlY3RlZCkKLSAgICAgICAgeyAvKiBEbyBub3RoaW5nICovIH0KLSAgICBlbHNlIGlmIChh
Y3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxIZXJlKSB7CisgICAgaWYgKGFjdGlvblNlbGVjdGVk
ID09IGFjdFNjcm9sbEhlcmUpIHsKICAgICAgICAgY29uc3QgUVBvaW50IHBvcyA9IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhldmVudC5wb3MoKSk7CiAgICAgICAgIG1vdmVUaHVtYihob3Jp
em9udGFsID8gcG9zLngoKSA6IHBvcy55KCkpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uU2VsZWN0
ZWQgPT0gYWN0U2Nyb2xsVG9wKQotICAgICAgICBzZXRWYWx1ZSgwKTsKKyAgICAgICAgc2Nyb2xs
KGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQsIFNj
cm9sbGJhclBhcnRPck1lbnUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNj
cm9sbEJvdHRvbSkKLSAgICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKKyAgICAgICAgc2Nyb2xs
KGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5RG9jdW1lbnQs
IFNjcm9sbGJhclBhcnRPck1lbnUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFj
dFBhZ2VVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxV
cCwgU2Nyb2xsQnlQYWdlLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxM
ZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAg
ZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURvd24pCi0gICAgICAgIHNjcm9sbCho
b3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UsIDEpOwor
ICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Ny
b2xsQnlQYWdlLCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxl
Y3RlZCA9PSBhY3RTY3JvbGxVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxM
ZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9u
dGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUsIFNjcm9sbGJhclBhcnRP
ck1lbnUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbERvd24pCi0g
ICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3Jv
bGxCeUxpbmUsIDEpOworICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDog
U2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICNlbmRpZiAv
LyBRVF9OT19DT05URVhUTUVOVQogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2NCw2ICs2NjQs
MTcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmCiAgICAgICAgIDo6
UmVsZWFzZURDKG1fcG9wdXAsIGxvY2FsREMpOwogfQogCitpbnQgUG9wdXBNZW51V2luOjpzY3Jv
bGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJl
dHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIp
ID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgp
KSA6IDA7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAg
ICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQg
UG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCiB7CiAgICAg
QVNTRVJUKG1fc2Nyb2xsYmFyKTsKQEAgLTk3OSw3ICs5OTAsNyBAQCBMUkVTVUxUIFBvcHVwTWVu
dVdpbjo6d25kUHJvYyhIV05EIGhXbmQsCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzY3JvbGxiYXIoKS0+
c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhp
KSk7CisgICAgICAgICAgICBzY3JvbGxiYXIoKS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBT
Y3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIFdoZWVsLCBhYnMoaSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJKHJl
dmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNjcm9s
bGJhckNhcHR1cmluZ01vdXNlKGJvb2wgYikgeyBtX3Njcm9sbGJhckNhcHR1cmluZ01vdXNlID0g
YjsgfQogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6
ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAg
dmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMSwxMCArNDIxLDEwIEBAIGludCBS
ZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQKICAgICByZXR1cm4gaW5jbHVkZUhv
cml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkgOiAwOwogfQogCi1ib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
LCBOb2RlKiogc3RvcE5vZGUpCitib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ug
c291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCiB7CiAgICAgUmVuZGVy
TGF5ZXIqIGwgPSBsYXllcigpOwotICAgIGlmIChsICYmIGwtPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgeworICAgIGlmIChsICYmIGwtPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIpKSB7CiAgICAgICAgIGlmIChzdG9w
Tm9kZSkKICAgICAgICAgICAgICpzdG9wTm9kZSA9IG5vZGUoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC00MzUsNyArNDM1LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZAogCiAgICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBp
ZiAoYiAmJiAhYi0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBiLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOworICAgICAgICByZXR1
cm4gYi0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllciwg
c3RvcE5vZGUpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGlu
dCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CiAgICAgaW50IGhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiog
c3RvcE5vZGUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5v
ZGUqKiBzdG9wTm9kZSA9IDApOwogICAgIGJvb2wgY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Ny
b2xsZWQoYm9vbCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAs
NiArMTcwLDE3IEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBhaW50Q29sdW1uSGVhZGVyKEQKIH0K
IAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworaW50IFJlbmRlckRhdGFH
cmlkOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAor
eworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikgJiYgbV92
QmFyKSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgpIC0gbV92QmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7
Cit9CisKK3ZvaWQgUmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZC
YXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckRhdGFHcmlk
Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDggQEAgcHJpdmF0ZToKICAgICBIVE1MRGF0YUdyaWRFbGVtZW50KiBncmlkRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRhR3JpZEVsZW1lbnQqPihub2RlKCkp
OyB9CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOSArMTM2Myw5IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LAogCiAgICAgaWYgKHVwZGF0ZVNjcm9s
bGJhcnMpIHsKICAgICAgICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFs
dWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xs
WE9mZnNldCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3ZCYXIpCi0gICAgICAgICAgICBtX3ZC
YXItPnNldFZhbHVlKG1fc2Nyb2xsWSk7CisgICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1f
c2Nyb2xsWSwgZmFsc2UpOwogICAgIH0KIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9N
IGV2ZW50LgpAQCAtMTYxOCw2ICsxNjE4LDIwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShj
b25zdCBQbGF0Zm9ybU0KICAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBh
bHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQg
dW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNp
emUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
bV9oQmFyIDogbV92QmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJh
ci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9p
ZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2lu
dCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c2V0VmFsdWUo
b2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRW
YWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHNj
cm9sbGJhcnMuCkBAIC0yMDY4LDcgKzIwODIsNyBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZl
cnl0aGluZyB3b3JraW5nIChzZWUgaG93IHNjcm9sbFhPZmZzZXQoKQogICAgICAgICAvLyBkaWZm
ZXJzIGZyb20gc2Nyb2xsWU9mZnNldCgpIHRvIGdldCBhbiBpZGVhIG9mIHdoeSB0aGUgaG9yaXpv
bnRhbCBhbmQKICAgICAgICAgLy8gdmVydGljYWwgc2Nyb2xsYmFycyBuZWVkIHRvIGJlIHRyZWF0
ZWQgZGlmZmVyZW50bHkpLgotICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQo
KSk7CisgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxzZSk7CiAg
ICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IGJveC0+
Y2xpZW50SGVpZ2h0KCk7CkBAIC0yMjI5LDcgKzIyNDMsNyBAQCBib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRl
ckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29sIFJlbmRlckxheWVyOjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgYm9vbCBk
aWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7CiAgICAgYm9vbCBkaWRWZXJ0aWNhbFNjcm9sbCA9
IGZhbHNlOwpAQCAtMjIzOCwxMyArMjI1MiwxMyBAQCBib29sIFJlbmRlckxheWVyOjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3Vt
ZW50KSB7CiAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgZm9yIHRoZSBTY3JvbGxCeURvY3Vt
ZW50IGdyYW51bGFyaXR5LiBBIGRvY3VtZW50IHNjcm9sbCBjYW4gb25seSBiZSB1cCAKICAgICAg
ICAgICAgIC8vIG9yIGRvd24gYW5kIGluIGJvdGggY2FzZXMgdGhlIGhvcml6b250YWwgYmFyIGdv
ZXMgYWxsIHRoZSB3YXkgdG8gdGhlIGxlZnQuCi0gICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Ny
b2xsID0gbV9oQmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlw
bGllcik7CisgICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwo
U2Nyb2xsTGVmdCwgU2Nyb2xsQnlEb2N1bWVudCwgc291cmNlLCBtdWx0aXBsaWVyKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgICAgICAgICBkaWRI
b3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
c291cmNlLCBtdWx0aXBsaWVyKTsKICAgICB9CiAKICAgICBpZiAobV92QmFyKQotICAgICAgICBk
aWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpOworICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJhci0+c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcik7CiAKICAgICByZXR1
cm4gKGRpZEhvcml6b250YWxTY3JvbGwgfHwgZGlkVmVydGljYWxTY3JvbGwpOwogfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogCi0gICAgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciA9IDEuMGYpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVsdGlwbGllcik7CiAgICAgdm9pZCBhdXRv
c2Nyb2xsKCk7CiAKICAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBj
b25zdCBJbnRTaXplJik7CkBAIC01MTgsNiArNTE4LDggQEAgcHJpdmF0ZToKICAgICBib29sIHNo
b3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsgCiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQg
aW50ZXJmYWNlCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZl
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24g
NjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZl
YWxFbGVtZW4KIAogICAgIG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgaWYgKG1fdkJh
cikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0KTsKKyAgICAgICAgbV92
QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0LCBmYWxzZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTUxMCw5ICs1MTAsOSBAQCBib29sIFJlbmRlckxpc3RCb3g6Omxpc3RJbmRleElzVmlz
aWJsZShpCiAgICAgcmV0dXJuIGluZGV4ID49IG1faW5kZXhPZmZzZXQgJiYgaW5kZXggPCBtX2lu
ZGV4T2Zmc2V0ICsgbnVtVmlzaWJsZUl0ZW1zKCk7CiB9CiAKLWJvb2wgUmVuZGVyTGlzdEJveDo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCitib29sIFJlbmRlckxpc3RCb3g6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQogewot
ICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIpOwogfQogCiB2b2lkIFJlbmRl
ckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgpCkBAIC01MjMsNiArNTIz
LDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmUKICAgICBlbGVt
ZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIAoraW50IFJlbmRlckxp
c3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0
Cit7CisgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1f
dkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUoKSkgOiAw
OworfQorCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZC
YXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckxpc3RCb3g6
OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXIt
PnZhbHVlKCk7CkBAIC01NzgsNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3Jv
bGxUb3AoaW50IG5ldwogICAgICAgICByZXR1cm47CiAgICAgbV9pbmRleE9mZnNldCA9IGluZGV4
OwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgpOworICAg
ICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4LCBmYWxzZSk7CiB9CiAKIGJvb2wgUmVuZGVyTGlz
dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1Bv
aW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgTm9kZSoqIHN0b3BOb2Rl
ID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9k
ZSA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94
KSBjb25zdDsKQEAgLTk2LDYgKzk2LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
OwogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIGludCBz
Y3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24g
NjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDEyICsxMDcxLDEyIEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3IKICAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5z
ZXRTY3JvbGxUb3AobmV3VG9wKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxv
YXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxh
eWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikp
CisgICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
c291cmNlLCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFJl
bmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3Rv
cE5vZGUpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIHNvdXJjZSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwogfQogCiBQYXNzUmVmUHRyPFNj
cm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Ny
b2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCShyZXZpc2lvbiA2NjAyOSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xs
SGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7Ci0gICAgdmlydHVhbCBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0g
MS4wZiwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRp
cGxpZXIsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50IHRleHRCbG9ja1dpZHRoKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZh
bWlseSk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMwKQorKysgV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEwLTA4LTI1
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFt
ZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogcHVibGljL1dl
YlNjcm9sbGJhci5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JvbGxiYXI6Oik6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMu
Y3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHNyYy9XZWJGcmFt
ZUltcGwuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVDb21tYW5kKToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xs
YmFySW1wbC5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uICBQbHVtYiBz
Y3JvbGwgY29tbWFuZCBzb3VyY2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRl
ZC4gIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncy4KKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xs
YmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBs
OjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmg6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb24uICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxWaWV3V2l0aEtleWJvYXJkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnByb3BhZ2F0ZVNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICogc3JjL3dp
bi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6IFVwZGF0ZSBjb21tZW50cyBub3cgdGhhdCB3ZSBo
YXZlIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZlbnRGYWN0
b3J5Ojptb3VzZVdoZWVsRXZlbnQpOgorCiAyMDEwLTA4LTI1ICBTYXRpc2ggU2FtcGF0aCAgPHNh
dGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCShyZXZpc2lvbiA2NjAyOSkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgU2Nyb2xsQnlQaXhlbAogICAgIH07
CiAKKyAgICBlbnVtIFNjcm9sbFNvdXJjZSB7CisgICAgICAgIEtleXByZXNzLAorICAgICAgICBX
aGVlbCwKKyAgICAgICAgU2Nyb2xsYmFyUGFydE9yTWVudSwgLy8gIlNjcm9sbGJhciIgYWxvbmUg
Y2xhc2hlcyB3aXRoIHRoZSBjbGFzcyBuYW1lLgorICAgICAgICBQcm9ncmFtbWF0aWMKKyAgICB9
OworCiAgICAgLy8gQ3JlYXRlcyBhIFdlYlNjcm9sbGJhci4KICAgICBXRUJLSVRfQVBJIHN0YXRp
YyBXZWJTY3JvbGxiYXIqIGNyZWF0ZShXZWJTY3JvbGxiYXJDbGllbnQqLCBPcmllbnRhdGlvbik7
CiAKQEAgLTc0LDcgKzgxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29u
c3QgPSAwOwogCiAgICAgLy8gU2V0cyB0aGUgY3VycmVudCB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
KGludCBwb3NpdGlvbiwgYm9vbCBmcm9tU2Nyb2xsQW5pbWF0aW9uKSA9IDA7CiAKICAgICAvLyBT
ZXRzIHRoZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIHJlZ2lvbiBpbiBwaXhlbHMuICBpLmUuIGlm
IGEgZG9jdW1lbnQgaXMKICAgICAvLyA4MDB4MTAwMDAgcGl4ZWxzIGFuZCB0aGUgdmlld3BvcnQg
aXMgMTAwMHgxMDAwIHBpeGVscywgdGhlbiBzZXRMb2NhdGlvbgpAQCAtODQsNyArOTEsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50U2l6ZShpbnQgc2l6ZSkgPSAwOwog
CiAgICAgLy8gU2Nyb2xsIGJhY2sgb3IgZm9yd2FyZCB3aXRoIHRoZSBnaXZlbiBncmFudWxhcml0
eS4KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSwgZmxvYXQgbXVs
dGlwbGllcikgPSAwOwogCiAgICAgLy8gUGFpbnQgdGhlIGdpdmVuIHJlY3RhbmdsZS4KICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkocmV2aXNpb24g
NjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDMsNiArMzQzLDExIEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViU2Nyb2xsYmEKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xs
YmFyOjpTY3JvbGxCeURvY3VtZW50LCBTY3JvbGxCeURvY3VtZW50KTsKIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViU2Nyb2xsYmFyOjpTY3JvbGxCeVBpeGVsLCBTY3JvbGxCeVBpeGVs
KTsKIAorQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OktleXByZXNz
LCBLZXlwcmVzcyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6
V2hlZWwsIFdoZWVsKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xsYmFy
OjpTY3JvbGxiYXJQYXJ0T3JNZW51LCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViU2Nyb2xsYmFyOjpQcm9ncmFtbWF0aWMsIFByb2dyYW1tYXRp
Yyk7CisKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2V0dGluZ3M6OkVkaXRpbmdC
ZWhhdmlvck1hYywgRWRpdGluZ01hY0JlaGF2aW9yKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViU2V0dGluZ3M6OkVkaXRpbmdCZWhhdmlvcldpbiwgRWRpdGluZ1dpbmRvd3NCZWhh
dmlvcik7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9u
IDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTUyLDEwICsxMTUyLDEwIEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpleGVjdXRl
Q29tbWFuZChjb25zdAogICAgIC8vIG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQgYW5kIG1vdmVU
b0VuZGZEb2N1bWVudCBhcmUgb25seSBoYW5kbGVkIGJ5IFdlYktpdAogICAgIC8vIGZvciBlZGl0
YWJsZSBub2Rlcy4KICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2Vi
TmFtZSA9PSAibW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIpCi0gICAgICAgIHJldHVybiB2aWV3
SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAg
ICAgICByZXR1cm4gdmlld0ltcGwoKS0+cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxC
eURvY3VtZW50LCBQcm9ncmFtbWF0aWMpOwogCiAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpICYmIHdlYk5hbWUgPT0gIm1vdmVUb0VuZE9mRG9jdW1lbnQiKQotICAgICAgICBy
ZXR1cm4gdmlld0ltcGwoKS0+cHJvcGFnYXRlU2Nyb2xsKFNjcm9sbERvd24sIFNjcm9sbEJ5RG9j
dW1lbnQpOworICAgICAgICByZXR1cm4gdmlld0ltcGwoKS0+cHJvcGFnYXRlU2Nyb2xsKFNjcm9s
bERvd24sIFNjcm9sbEJ5RG9jdW1lbnQsIFByb2dyYW1tYXRpYyk7CiAKICAgICByZXR1cm4gZnJh
bWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQod2ViTmFtZSkuZXhlY3V0ZSh2YWx1ZSk7CiB9CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDY2MDI5
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9u
KGNvbnN0CiAgICAgICBtX3Njcm9sbGJhci0+aW52YWxpZGF0ZSgpOwogCiAgICAgaW50IGxlbmd0
aCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBt
X3Njcm9sbGJhci0+d2lkdGgoKSA6IG1fc2Nyb2xsYmFyLT5oZWlnaHQoKTsKLSAgICBpbnQgcGFn
ZVN0ZXAgPSBtYXgobWF4PGludD4obGVuZ3RoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3Rl
cFdoZW5QYWdpbmcoKSwgbGVuZ3RoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2Vz
KCkpLCAxKTsKKyAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4KHN0YXRpY19jYXN0PGludD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGxlbmd0aCkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hl
blBhZ2luZygpKSwgbGVuZ3RoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkp
LCAxKTsKICAgICBtX3Njcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgbV9zY3JvbGxiYXItPnNldEVuYWJsZWQobV9zY3JvbGxi
YXItPnRvdGFsU2l6ZSgpID4gbGVuZ3RoKTsKICAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlv
bihsZW5ndGgsIG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSk7CkBAIC05Miw5ICs5Miw5IEBAIGlu
dCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Nyb2xsYmFy
LT52YWx1ZSgpOwogfQogCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKGludCBwb3Np
dGlvbikKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUoaW50IHBvc2l0aW9uLCBib29s
IGZyb21TY3JvbGxBbmltYXRpb24pCiB7Ci0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0
aW9uKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRpb24sIGZyb21TY3JvbGxBbmlt
YXRpb24pOwogfQogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShpbnQg
c2l6ZSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3Vt
ZW50U2l6ZShpCiAgICAgbV9zY3JvbGxiYXItPnNldFByb3BvcnRpb24obGVuZ3RoLCBzaXplKTsK
IH0KIAotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit2
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQg
bXVsdGlwbGllcikKIHsKICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gZGlyOwogICAgIGJv
b2wgaG9yaXpvbnRhbCA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXI7CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzY3Jv
bGwoU2Nyb2xsRGlyZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBT
Y3JvbGxEb3duOwogICAgIGVsc2UKICAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExl
ZnQgOiBTY3JvbGxVcDsKLSAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlwbGllcik7Cisg
ICAgbV9zY3JvbGxiYXItPnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbEdy
YW51bGFyaXR5PihncmFudWxhcml0eSksIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbFNvdXJj
ZT4oc291cmNlKSwgbXVsdGlwbGllcik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6cGFp
bnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCkBAIC0yMTQsMTEgKzIx
NCwxMSBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbChjb25zCiAgICAgICAg
ICAgICBpZiAobW91c2V3aGVlbC5zY3JvbGxCeVBhZ2UpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpOwogICAg
ICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBkZWx0YSA8IDA7Ci0gICAgICAgICAgICAgICAg
ZGVsdGEgPSBtYXgobWF4PGludD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkgKiBTY3JvbGxi
YXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBtX3Njcm9sbGJhci0+dmlzaWJsZVNp
emUoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisgICAgICAg
ICAgICAgICAgZGVsdGEgPSBtYXgobWF4KHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+
dmlzaWJsZVNpemUoKSkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygp
LCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkgLSBTY3JvbGxi
YXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSkpLCAxLjBmKTsKICAgICAgICAgICAgICAgICBp
ZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgICAgIGRlbHRhICo9IC0xOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG1fc2Nyb2xsYmFyLT52YWx1
ZSgpIC0gZGVsdGEpOworICAgICAgICAgICAgbV9zY3JvbGxiYXItPnNjcm9sbCgobV9zY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBXZWJDb3JlOjpTY3Jv
bGxMZWZ0IDogV2ViQ29yZTo6U2Nyb2xsVXAsIFdlYkNvcmU6OlNjcm9sbEJ5UGl4ZWwsIFdlYkNv
cmU6OldoZWVsLCBkZWx0YSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
CkBAIC0yNTcsMTEgKzI1NywyMSBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihj
b25zdCBXCiAgICAgICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFy
aXR5OwogICAgICAgICBpZiAoV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29k
ZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkgewogICAgICAgICAgICAg
Ly8gV2lsbCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0aWJs
ZSB3aXRoIHRoaXMgc2Nyb2xsYmFyLgotICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5z
Y3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxiYXItPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFy
aXR5LCBXZWJDb3JlOjpLZXlwcmVzcyk7CiAgICAgICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAob3JpZW50YXRpb24g
PT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUo
KSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgV2ViU2Nyb2xs
YmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZSgobV9zY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBvZmZzZXQueCgpIDogb2Zm
c2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWVDaGFuZ2Vk
KFdlYkNvcmU6OlNjcm9sbGJhciopCiB7CiAgICAgbV9jbGllbnQtPnZhbHVlQ2hhbmdlZCh0aGlz
KTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCShyZXZpc2lvbiA2
NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMyArNTEsMTUgQEAgcHVibGljOgogICAgIC8vIFdlYktpdDo6V2ViU2Ny
b2xsYmFyIG1ldGhvZHMKICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgV2ViUmVj
dCYpOwogICAgIHZpcnR1YWwgaW50IHZhbHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlKGludCBwb3NpdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGludCBwb3Np
dGlvbiwgYm9vbCBmcm9tU2Nyb2xsQW5pbWF0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RG9j
dW1lbnRTaXplKGludCBzaXplKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291
cmNlLCBmbG9hdCBtdWx0aXBsaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiwgY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCBt
ZXRob2RzCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYzLDcg
Kzc2Myw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQKICAgICBT
Y3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKICAgICBpZiAoIW1hcEtleUNvZGVG
b3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwcm9wYWdhdGVTY3JvbGwoc2Nyb2xs
RGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAgcmV0dXJuIHByb3BhZ2F0ZVNjcm9s
bChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5LCBLZXlwcmVzcyk7CiB9CiAKIGJv
b2wgV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoaW50IGtleUNvZGUsCkBAIC04MTcs
MTkgKzgxNywxNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpoaWRlU2VsZWN0UG9wdXAoKQogfQogCiBi
b29sIFdlYlZpZXdJbXBsOjpwcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERp
cmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxHcmFudWxh
cml0eSBzY3JvbGxHcmFudWxhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTY3JvbGxTb3VyY2Ugc2Nyb2xsU291cmNlKQogewogICAgIEZyYW1l
KiBmcmFtZSA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHNjcm9sbEhhbmRsZWQgPQotICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KHNjcm9sbERpcmVjdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxHcmFudWxhcml0
eSk7CisgICAgYm9vbCBzY3JvbGxIYW5kbGVkID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxPdmVyZmxvdyhzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5LCBzY3JvbGxTb3Vy
Y2UpOwogICAgIEZyYW1lKiBjdXJyZW50RnJhbWUgPSBmcmFtZTsKICAgICB3aGlsZSAoIXNjcm9s
bEhhbmRsZWQgJiYgY3VycmVudEZyYW1lKSB7Ci0gICAgICAgIHNjcm9sbEhhbmRsZWQgPSBjdXJy
ZW50RnJhbWUtPnZpZXcoKS0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR3JhbnVsYXJpdHkp
OworICAgICAgICBzY3JvbGxIYW5kbGVkID0gY3VycmVudEZyYW1lLT52aWV3KCktPnNjcm9sbChz
Y3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5LCBzY3JvbGxTb3VyY2UpOwogICAgICAg
ICBjdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgfQog
ICAgIHJldHVybiBzY3JvbGxIYW5kbGVkOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNSw3ICszMDUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUcmll
cyB0byBzY3JvbGwgYSBmcmFtZSBvciBhbnkgcGFyZW50IG9mIGEgZnJhbWUuIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdmlldwogICAgIC8vIHdhcyBzY3JvbGxlZC4KLSAgICBib29sIHByb3BhZ2F0ZVNj
cm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5
KTsKKyAgICBib29sIHByb3BhZ2F0ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdl
YkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5LCBXZWJDb3JlOjpTY3JvbGxTb3VyY2UpOwogCiAgICAg
Ly8gTm90aWZpY2F0aW9uIHRoYXQgYSBwb3B1cCB3YXMgb3BlbmVkL2Nsb3NlZC4KICAgICB2b2lk
IHBvcHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcik7Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3Rvcnku
Y3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0
RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEzICszOTYsMTYgQEAgV2Vi
TW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogCiAgICAgLy8gQ29udmVydCB3
aGVlbCBkZWx0YSBhbW91bnQgdG8gYSBudW1iZXIgb2YgcGl4ZWxzIHRvIHNjcm9sbC4KICAgICAv
LwotICAgIC8vIEhvdyBtYW55IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgR2Vj
a28gdXNlcyB0aGUgaGVpZ2h0IG9mIHRoZQotICAgIC8vIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVh
bnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMgYXMgeW91IGdvIHRocm91Z2ggdGhlCi0gICAgLy8g
cGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFnZXMuICBJRSA3IGlzIH41MCBweC9saW5lLCBhbHRo
b3VnaCB0aGUgdmFsdWUKLSAgICAvLyBzZWVtcyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5k
IHpvb20gbGV2ZWwuICBTaW5jZSBJRSA3IGhhcyBhIHNtb290aGluZwotICAgIC8vIGFsZ29yaXRo
bSBvbiBzY3JvbGxpbmcsIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNsaWdodGx5IGxhcmdlciBzY3Jv
bGwgdmFsdWVzCi0gICAgLy8gd2l0aG91dCBmZWVsaW5nIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAw
IHB4IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQKLSAgICAvLyBzY3JvbGwgYW1vdW50IGlz
IHRocmVlIGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBIb3cgbWFueSBwaXhlbHMgc2hv
dWxkIHdlIHNjcm9sbCBwZXIgbGluZT8gIEZpcmVmb3ggdXNlcyB0aGUgaGVpZ2h0IG9mCisgICAg
Ly8gdGhlIGN1cnJlbnQgbGluZSwgd2hpY2ggbWVhbnMgc2Nyb2xsIGRpc3RhbmNlIGNoYW5nZXMg
YXMgeW91IGdvIHRocm91Z2gKKyAgICAvLyB0aGUgcGFnZSBvciBnbyB0byBkaWZmZXJlbnQgcGFn
ZXMuICBJRSA4IGlzIH42MCBweC9saW5lLCBhbHRob3VnaCB0aGUKKyAgICAvLyB2YWx1ZSBzZWVt
cyB0byB2YXJ5IHNsaWdodGx5IGJ5IHBhZ2UgYW5kIHpvb20gbGV2ZWwuICBBbHNvLCBJRSBkZWZh
dWx0cworICAgIC8vIHRvIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0LCBz
byBpdCBjYW4gZ2V0IGF3YXkgd2l0aAorICAgIC8vIHNvbWV3aGF0IGxhcmdlciBzY3JvbGwgdmFs
dWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMAorICAgIC8vIHB4
IHBlciB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5l
cyBwZXIgd2hlZWwKKyAgICAvLyB0aWNrKS4gIEV2ZW4gdGhvdWdoIHdlIGhhdmUgc21vb3RoIHNj
cm9sbGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxhcmdlCisgICAgLy8gYXMgSUUgYmVjYXVz
ZSBzdWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBzY3JvbGxzIGZhcnRoZXIgdGhhbiB5b3Ug
d2FudAorICAgIC8vIHdoaWxlIHJlYWRpbmcgYXJ0aWNsZXMuCiAgICAgc3RhdGljIGNvbnN0IGZs
b2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAuMGYgLyAzLjBmOwogICAgIHdoZWVsRGVs
dGEgLz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRhOwpJ
bmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY2MDMwKQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0
aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzIzNTYKKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDogUGx1bWIg
c2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsX21v
dmVfY3Vyc29yKToKKwogMjAxMC0wOC0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpJ
bmRleDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysg
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NDUsOCArMTE0NSw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9tb3YK
ICAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKQotICAgICAgICBmcmFt
ZS0+dmlldygpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgaWYgKCFmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IEtleXByZXNzKSkKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIEtleXByZXNzKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDY2MDMwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9u
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYK
KworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tOiBQbHVtYiBzY3JvbGwgY29tbWFu
ZCBzb3VyY2VzLgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbE92ZXJmbG93SW5EaXJl
Y3Rpb246Z3JhbnVsYXJpdHk6c291cmNlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Nj
cm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Nj
cm9sbFRvRW5kT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VWZXJ0
aWNhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VIb3Jpem9udGFsbHk6XSk6
CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZVZlcnRpY2FsbHk6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsTGluZUhvcml6b250YWxseTpdKToKKwogMjAxMC0w
OC0yNCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MTgsNyArNTE4LDcgQEAgLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93CiAg
ICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9XaW5kb3ddOwogfQogCi0tIChCT09MKV9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOihTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihT
Y3JvbGxHcmFudWxhcml0eSlncmFudWxhcml0eQorLSAoQk9PTClfc2Nyb2xsT3ZlcmZsb3dJbkRp
cmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooU2Nyb2xsR3Jh
bnVsYXJpdHkpZ3JhbnVsYXJpdHkgc291cmNlOihTY3JvbGxTb3VyY2Upc291cmNlCiB7CiAgICAg
Ly8gc2Nyb2xsaW5nIG92ZXJmbG93cyBpcyBvbmx5IGFwcGxpY2FibGUgaWYgd2UncmUgZGVhbGlu
ZyB3aXRoIGFuIFdlYkhUTUxWaWV3CiAgICAgaWYgKCFbW3NlbGYgZG9jdW1lbnRWaWV3XSBpc0tp
bmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQpAQCAtNTI2LDEyICs1MjYsMTIgQEAgLSAo
Qk9PTClfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjooU2NybwogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW3NlbGYgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
Tk87Ci0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGly
ZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlKTsKIH0KIAogLSAo
Qk9PTClfc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3Jv
bGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1l
bnRdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxVcCBn
cmFudWxhcml0eTpTY3JvbGxCeURvY3VtZW50IHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJl
dHVybiBZRVM7CiAgICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkKICAgICAgICAgcmV0dXJu
IE5POwpAQCAtNTQxLDcgKzU0MSw3IEBAIC0gKEJPT0wpX3Njcm9sbFRvQmVnaW5uaW5nT2ZEb2N1
bWVudAogCiAtIChCT09MKV9zY3JvbGxUb0VuZE9mRG9jdW1lbnQKIHsKLSAgICBpZiAoW3NlbGYg
X3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxC
eURvY3VtZW50XSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Ny
b2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeURvY3VtZW50IHNvdXJjZTpLZXlwcmVzc10pCiAg
ICAgICAgIHJldHVybiBZRVM7CiAgICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkKICAgICAg
ICAgcmV0dXJuIE5POwpAQCAtNjE3LDcgKzYxNyw3IEBAIC0gKGZsb2F0KV9ob3Jpem9udGFsUGFn
ZVNjcm9sbERpc3RhbmNlCiAKIC0gKEJPT0wpX3BhZ2VWZXJ0aWNhbGx5OihCT09MKXVwCiB7Ci0g
ICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBT
Y3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZV0pCisgICAgaWYgKFtzZWxmIF9zY3Jv
bGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duIGdyYW51bGFy
aXR5OlNjcm9sbEJ5UGFnZSBzb3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwog
ICAgIAogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCkBAIC02MjksNyArNjI5LDcgQEAg
LSAoQk9PTClfcGFnZVZlcnRpY2FsbHk6KEJPT0wpdXAKIAogLSAoQk9PTClfcGFnZUhvcml6b250
YWxseTooQk9PTClsZWZ0CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0
aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQ
YWdlXSkKKyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFNj
cm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpTY3JvbGxCeVBhZ2Ugc291cmNlOktl
eXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xs
YWJsZV0pCkBAIC02NDEsNyArNjQxLDcgQEAgLSAoQk9PTClfcGFnZUhvcml6b250YWxseTooQk9P
TClsZWZ0CiAKIC0gKEJPT0wpX3Njcm9sbExpbmVWZXJ0aWNhbGx5OihCT09MKXVwCiB7Ci0gICAg
aWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBTY3Jv
bGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxP
dmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duIGdyYW51bGFyaXR5
OlNjcm9sbEJ5TGluZSBzb3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwogCiAg
ICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkKQEAgLTY1Myw3ICs2NTMsNyBAQCAtIChCT09M
KV9zY3JvbGxMaW5lVmVydGljYWxseTooQk9PTCl1cAogCiAtIChCT09MKV9zY3JvbGxMaW5lSG9y
aXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5E
aXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpTY3Jv
bGxCeUxpbmVdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0
ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZSBzb3Vy
Y2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaXNT
Y3JvbGxhYmxlXSkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNjYwMzApCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3Rp
bmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEg
V2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOiBQbHVt
YiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpoYW5k
bGVTY3JvbGxpbmcpOgorCiAyMDEwLTA4LTI1ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9i
aWxlLmNvbS5jbj4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6
IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgyLDcgKzEzODIsNyBAQCBib29sIFFXZWJQYWdlUHJp
dmF0ZTo6aGFuZGxlU2Nyb2xsaW5nKFFLCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNp
dmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBLZXlwcmVzcyk7CiB9CiAKICNpZiBRVF9WRVJT
SU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjAzMCkK
KysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Ny
b2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAg
KiBXZWJWaWV3LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKFdl
YlZpZXc6OmtleURvd24pOgorCiAyMDEwLTA4LTI0ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCkluZGV4OiBXZWJL
aXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJ
KHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkzNyw3ICsxOTM3LDcgQEAgYm9vbCBXZWJWaWV3OjprZXlEb3duKFdQQVJBTSB2aXJ0
dWFsS2V5QwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHkpOworICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2
ZWx5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKTsKIH0KIAogYm9vbCBXZWJWaWV3
OjprZXlQcmVzcyhXUEFSQU0gY2hhckNvZGUsIExQQVJBTSBrZXlEYXRhLCBib29sIHN5c3RlbUtl
eURvd24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65463</attachid>
            <date>2010-08-25 12:47:04 -0700</date>
            <delta_ts>2010-08-25 14:06:55 -0700</delta_ts>
            <desc>patch v4.2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>99141</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNSAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjAyOSkK
KysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDggQEAgaWYgYnVpbGRfcG9y
dCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAgICAg
ICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAgICAn
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAg
ICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0IGNy
YXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNlIHRo
ZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAgICAg
ICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTApLgpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2MDMwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMDEgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEJ5VW5pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bG9jYWxab29tRm9yUmVuZGVyZXIpOiBGaXggc3R5bGUgZ3VpZGUgdmlvbGF0
aW9uLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1h
bmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8g
YW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9w
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
OjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JXaW46OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JXaW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldp
bjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDogQWRkIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3Vy
Y2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4gIEZpeCBjb21waWxhdGlv
biB3YXJuaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBj
b21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDogQWxsb3cg
U2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgcHJlc2VudC4gIFBsdW1iIHNjcm9s
bCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW92ZVRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOiBBbGxvdyBTY3JvbGxBbmltYXRvciB0byBo
YW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aXNTY3JvbGxiYXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOiBBZGQgaG9va3MgZm9yIFNjcm9sbEFuaW1hdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuICBVc2Ugc2Nyb2xsKCkgaW4gcHJlZmVyZW5jZSB0byBzZXRWYWx1ZSgpLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250ZXh0TWVudSk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVXaW46OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51
V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVdpbjo6d25kUHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogSW1wbGVt
ZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4g
IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogSW1wbGVtZW50IG5ldyBT
Y3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IEltcGxlbWVudCBuZXcgU2Ny
b2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExp
c3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Lmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisKIDIwMTAtMDgtMjUgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDYgKzE5NTAsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBAIC0yNTcxLDYgKzI1NzMsOCBAQCBlbmRpZgogCiBp
ZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvcldpbi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzEw
OSw2ICszMTA5LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuaCcsCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw4ICsxMjIyLDEwIEBACiAgICAgICAgICAg
J3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAog
ICAgICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKLSAgICAgICAgICAgIFsnaW5j
bHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRl
JywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9T
a2lhRm9udFdpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJl
bmN5V2luXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAg
ICAgICAgICAgICAjIE1hdGNoIFNhZmFyaSBhbmQgTW96aWxsYSBvbiBXaW5kb3dzLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0
MjU3LDYgKzI0MjU3LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9s
bEFuaW1hdG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxB
bmltYXRvcldpbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTExMiw2ICs1MTEyLDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAw
NTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNj
cm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87
IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJB
RTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlw
dENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDk0Miw2
ICsxMDk0NCw4IEBACiAJCUM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFB
MjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Ny
b2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5p
bWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAw
QzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQx
MjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg0LDYgKzE2Njg4LDggQEAKIAkJCQkxQzYzQTI0
NjBGNzE2NDY2MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3
N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3
RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlDQTNCRjY3QjEwRDk5QkFF
MDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAorCQkJCUNBM0JGNjdEMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4
MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyog
U2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNj
cm9sbGJhclRoZW1lLmggKi8sCkBAIC0xOTgwMCw2ICsxOTgwNiw3IEBACiAJCQkJNDE2RjQ1RjAw
RUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0
Q0MwRTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxi
YXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMzNSw2ICsyMjM0Miw3IEBA
CiAJCQkJOUY3MjMwNTAxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxMjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8q
IFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAw
MDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRUY4NjlGMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnNjcm9sbEJ5VW5pdHMoaW50IHVuaXRzLCBTCiAgICAgICAgICAgICAgICAgZGlyZWN0
aW9uID0gU2Nyb2xsVXA7CiAgICAgICAgICAgICAgICAgdW5pdHMgPSAtdW5pdHM7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0b1JlbmRlckJveChyZW5kKS0+bGF5ZXIoKS0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIHVuaXRzKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQm94KHJl
bmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgUHJvZ3JhbW1hdGlj
LCB1bml0cyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzMsOCArMjczLDggQEAgc3RhdGlj
IGZsb2F0IGxvY2FsWm9vbUZvclJlbmRlcmVyKFJlbmRlcgogICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXMgdGhlIHdyb25nIHRoaW5nIGlmIHR3byBvcHBvc2luZyB6b29tcyBhcmUgaW4gZWZmZWN0IGFu
ZCBjYW5jZWxlZCBlYWNoCiAgICAgLy8gb3RoZXIgb3V0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgd2UnZCBoYXZlIHRvIGNyYXdsIHVwIHRoZSB3aG9sZSByZW5kZXIgdHJlZSBldmVyeQog
ICAgIC8vIHRpbWUgKG9yIHN0b3JlIGFuIGFkZGl0aW9uYWwgYml0IGluIHRoZSBSZW5kZXJTdHls
ZSB0byBpbmRpY2F0ZSB0aGF0IGEgem9vbSB3YXMgc3BlY2lmaWVkKS4KLSAgICBmbG9hdCB6b29t
RmFjdG9yID0gMS4wZjsKLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSAhPSAxLjBmKSB7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CisgICAgaWYgKHJlbmRlcmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgIT0gMSkgewogICAgICAgICAvLyBOZWVkIHRvIGZp
bmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIFJlbmRlck9iamVjdCB0aGF0IHNldCB1cAogICAgICAg
ICAvLyBhIGRpZmZlcmluZyB6b29tLCBhbmQgdGhlbiB3ZSBkaXZpZGUgb3VyIHJlc3VsdCBieSBp
dCB0byBlbGltaW5hdGUgdGhlIHpvb20uCiAgICAgICAgIFJlbmRlck9iamVjdCogcHJldiA9IHJl
bmRlcmVyOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMyArMTMw
LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHQKICAgICBmbG9h
dCBhYnNEZWx0YSA9IGRlbHRhID4gMCA/IGRlbHRhIDogLWRlbHRhOwogICAgIAogICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBXaGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
IAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1
cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBw
b3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAg
ICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJl
Y3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzRGVsdGEs
IHN0b3BOb2RlKTsKIAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkK
LSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZl
RGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBz
dG9wTm9kZSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAg
PyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVsLCBX
aGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtOTc1LDcgKzk3NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZXRNb3VzZVByZXNzTm9k
ZShQYXMKICAgICBtX21vdXNlUHJlc3NOb2RlID0gbm9kZTsKIH0KIAotYm9vbCBFdmVudEhhbmRs
ZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUpCitib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIE5vZGUqIHN0YXJ0aW5nTm9k
ZSkKIHsKICAgICBOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOwogCkBAIC05ODcsNyArOTg3LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAgIGlm
IChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5pc0xp
c3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSkpIHsKICAgICAgICAgICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05OTYsMTcgKzk5NiwxNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE5vZGUqIHN0
YXJ0aW5nTm9kZSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xs
U291cmNlIHNvdXJjZSwgTm9kZSogc3RhcnRpbmdOb2RlKQogewogICAgIC8vIFRoZSBsYXlvdXQg
bmVlZHMgdG8gYmUgdXAgdG8gZGF0ZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNjcm9sbC4gV2Ug
bWF5IGJlCiAgICAgLy8gaGVyZSBiZWNhdXNlIG9mIGFuIG9uTG9hZCBldmVudCwgaW4gd2hpY2gg
Y2FzZSB0aGUgZmluYWwgbGF5b3V0IGhhc24ndCBiZWVuIHBlcmZvcm1lZCB5ZXQuCiAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgc3RhcnRpbmdOb2RlKTsKKyAgICBib29sIGhhbmRsZWQgPSBzY3JvbGxPdmVyZmxvdyhkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIHN0YXJ0aW5nTm9kZSk7CiAgICAgaWYgKCFoYW5k
bGVkKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7CiAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgICAgICAgICBo
YW5kbGVkID0gdmlldyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSA6IGZh
bHNlOworICAgICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgc291cmNlKSA6IGZhbHNlOwogICAgICAgICAgICAgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgfSB3aGlsZSAoIWhhbmRsZWQgJiYgZnJhbWUp
OwogICAgICB9CkBAIC0yNjkzLDcgKzI2OTMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dFNwYWNlRXZlbnRIYW5kCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBldmVudC0+c2hpZnRLZXkoKSA/IFNjcm9sbFVwIDogU2Nyb2xsRG93bjsKLSAgICBpZiAo
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UpKSB7CisgICAgaWYgKHNjcm9s
bE92ZXJmbG93KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpIHsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
NzAyLDcgKzI3MDIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodmlldy0+c2Nyb2xs
KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKSkKKyAgICBpZiAodmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw5
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5v
ZGUqKTsKIAotICAgIGJvb2wgc2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CisgICAgYm9vbCBzY3JvbGxPdmVy
ZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291
cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKIAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2Rl
ID0gMCk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAw
KTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgYm9vbCBzaG91bGREcmFnQXV0b05v
ZGUoTm9kZSosIGNvbnN0IEludFBvaW50JikgY29uc3Q7IC8vIC13ZWJraXQtdXNlci1kcmFnID09
IGF1dG8KSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNjYwMjkp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDIsNyArNDQyLDkgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiB9CiAK
IC8vIEluIGEgYm90dG9tLXVwIHdheSwgdGhpcyBtZXRob2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFt
ZXwgaW4gYSBnaXZlbiBkaXJlY3Rpb24KLS8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUg
ZnJhbWUgdHJlZSBoaWVyYXJjaHkgaW4gY2FzZSBpdCBkb2VzIG5vdCBzdWNjZWVkLgorLy8gfGRp
cmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFtZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0
IGRvZXMgbm90CisvLyBzdWNjZWVkLgorLy8gTk9URTogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRo
ZSBjYWxsZXIgaXMgcmVzcG9uZGluZyB0byBhIGtleWJvYXJkIGV2ZW50LgogYm9vbCBzY3JvbGxJ
bkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
Rm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKIHsKICAgICBpZiAoIWZyYW1lKQpAQCAtNDY4LDkg
KzQ3MCw5IEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2MKICAgICB9
CiAKICAgICBpZiAoIWNhbmRpZGF0ZS5pc051bGwoKSAmJiBpc1Njcm9sbGFibGVDb250YWluZXJO
b2RlKGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KSkKLSAgICAgICAgcmV0dXJuIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxCeUxpbmUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KTsKKyAgICAgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxCeUxpbmUsIEtleXByZXNzLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xs
YWJsZUJveCk7CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1
cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSk7CisgICAgcmV0dXJuIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxCeUxpbmUsIEtleXByZXNzKTsKIH0KIAogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50KiBl
bGVtZW50KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgZmxvYXQq
IGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9j
dXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4
KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKKyAgICBp
ZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmN1
cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykK
K3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
bV9jdXJyZW50UG9zWCA9IHBvczsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFBvc1kgPSBw
b3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyQ2xpZW50OworCitjbGFzcyBTY3JvbGxBbmltYXRv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBjcmVhdGUoU2Nyb2xsYmFy
Q2xpZW50Kik7CisKKyAgICBTY3JvbGxBbmltYXRvcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkg
OiBtX2NsaWVudChjbGllbnQpIHsgfQorICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yKCkgeyB9
CisKKyAgICAvLyBDb21wdXRlcyBhIHNjcm9sbCBkZXN0aW5hdGlvbiBmb3IgdGhlIGdpdmVuIHBh
cmFtZXRlcnMuICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gYWxyZWFkeSBhdCB0aGUgZGVzdGlu
YXRpb24uICBPdGhlcndpc2UsIHN0YXJ0cyBzY3JvbGxpbmcgdG93YXJkcyB0aGUKKyAgICAvLyBk
ZXN0aW5hdGlvbiBhbmQgcmV0dXJucyB0cnVlLiAgU2Nyb2xsaW5nIG1heSBiZSBpbW1lZGlhdGUg
b3IgYW5pbWF0ZWQuCisgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24gYWx3YXlz
IHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgorICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3Vy
Y2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworCisgICAgLy8gU3RvcHMgYW55IGFu
aW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmlt
YXRvcgorICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhpcyBkb2Vz
IG5vdCBjYXVzZSBhIGNhbGxiYWNrIHRvIHRoZQorICAgIC8vIFNjcm9sbGJhckNsaWVudC4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBmbG9hdCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJDbGllbnQq
IG1fY2xpZW50OworICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEg
RmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAv
LyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCit9OworCisjaWYgIU9TKFdJTkRPV1MpCitTY3Jv
bGxBbmltYXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yKGNsaWVudCk7Cit9CisjZW5kaWYK
KworfQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dG9yV2luLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK1Njcm9sbEFuaW1h
dG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQorewor
ICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3JXaW4oY2xpZW50KTsKK30KKworY29uc3QgZG91
YmxlIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKKworU2Ny
b2xsQW5pbWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldp
biogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcykKKyAgICA6IG1fY3VycmVudFBvcyhjdXJyZW50
UG9zKQorICAgICwgbV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJlbnRWZWxvY2l0eSgwKQor
ICAgICwgbV9kZXNpcmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFuaW1hdGlvblRpbWUoMCkK
KyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1h
dGlvblRpbWVyRmlyZWQpCit7Cit9CisKKworU2Nyb2xsQW5pbWF0b3JXaW46OlNjcm9sbEFuaW1h
dG9yV2luKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQorICAgIDogU2Nyb2xsQW5pbWF0b3IoY2xp
ZW50KQorICAgICwgbV9ob3Jpem9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAgICAs
IG1fdmVydGljYWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxBbmlt
YXRvcldpbjo6flNjcm9sbEFuaW1hdG9yV2luKCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJ
Zk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVk
ZWQoJm1fdmVydGljYWxEYXRhKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikKK3sKKyAgICAvLyBEb24ndCBhbmltYXRlIGp1bXBpbmcgdG8gdGhlIGJlZ2lubmluZyBvciBl
bmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3Vt
ZW50KQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICAvLyBUaGlzIGlz
IGFuIGFuaW1hdGFibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVsdGEuCisgICAg
UGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8g
Jm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisgICAgZmxvYXQgbmV3UG9zID0g
c3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkp
LCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IG5ld1BvczsKKworICAgIC8v
IENhbGN1bGF0ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAgIGlmICgqZGF0YS0+bV9jdXJy
ZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZsb2F0IGFuaW1hdGlvblN0ZXA7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0YS0+
bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIGlmICgoc291cmNlICE9IEtleXByZXNz
KSAmJiAoc291cmNlICE9IFdoZWVsKSkgeworICAgICAgICAvLyBXaGVuIGF1dG9zY3JvbGxpbmcs
IHRoZSBzY3JvbGxiYXIncyBhdXRvc2Nyb2xsIHRpbWVyIHdpbGwgY2FsbCB1cyB0bworICAgICAg
ICAvLyBpbmNyZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8IGV2ZXJ5CisgICAg
ICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHNlY29uZHMuICBJZiB3ZQorICAgICAgICAvLyBzZXQgdGhlIGRlc2lyZWQgdmVsb2NpdHkg
dG8gZXhhY3RseSB0aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbAorICAgICAgICAvLyBu
ZWl0aGVyIHJhY2UgYWhlYWQgKGFuZCB0aGVuIGhhdmUgdG8gc2xvdyBkb3duKSBub3IgaW5jcmVh
c2luZ2x5IGxhZworICAgICAgICAvLyBiZWhpbmQsIGJ1dCB3aWxsIGJlIHNtb290aCBhbmQgc3lu
Y2hyb25pemVkLgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0
aGUgYWNjZWxlcmF0aW9uIHBlcmlvZCwgdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgICAgLy8g
d2lsbCBsYWcgdGhlIGRlc2lyZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50IGFtb3VudCAoc2Vl
IGNvbW1lbnRzIG9uCisgICAgICAgIC8vIGFuaW1hdGVTY3JvbGwoKSk7IHRoZSBleGFjdCBhbW91
bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQp
CisgICAgICAgIC8vIFdoZXJlCisgICAgICAgIC8vICAgdiA9IFRoZSBzdGVhZHktc3RhdGUgdmVs
b2NpdHksCisgICAgICAgIC8vICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8vICAgdEEgPSBhY2NlbGVy
YXRpb25UaW1lKCkKKyAgICAgICAgLy8gICB0RCA9IFRoZSB0aW1lIHdlIHByZXRlbmQgaGFzIGFs
cmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRpbmcgdG8KKyAgICAgICAgLy8gICAgICAgIHNjcm9sbCwg
fGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbGFnIHBy
b3ZpZGVzIHNvbWUgYnVmZmVyIGFnYWluc3QgdGltZXIgaml0dGVyIHNvIHdlJ3JlIGxlc3MKKyAg
ICAgICAgLy8gbGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhbmQgc3RvcCAoYW5k
IHRodXMgaGF2ZSB0bworICAgICAgICAvLyByZS1hY2NlbGVyYXRlLCBjYXVzaW5nIGEgdmlzaWJs
ZSBoaXRjaCkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQKKyAgICAgICAgLy8gYXV0b3Njcm9s
bCBpbmNyZW1lbnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBzdGVwOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEZvciBrZXlib2FyZCBhbmQgd2hlZWwgc2Nyb2xscywgd2UgZG9uJ3Qga25v
dyB3aGVuIHRoZSBuZXh0IGluY3JlbWVudAorICAgICAgICAvLyB3aWxsIGJlIHJlcXVlc3RlZC4g
IElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIKKyAgICAgICAg
Ly8gYXdheSBmcm9tIHRoZSB0YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBrZXlib2Fy
ZC93aGVlbCBldmVudHMKKyAgICAgICAgLy8gdGhhdCBjb21lIGZhc3RlciB0aGFuIHRoZSBhdXRv
c2Nyb2xsIGRlbGF5LCB3ZSdsbCBhc3ltcHRvdGljYWxseQorICAgICAgICAvLyBhcHByb2FjaCB0
aGUgdmVsb2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2Vy
J3MKKyAgICAgICAgLy8gYWN0aW9uczsgZm9yIGV2ZW50cyB0aGF0IGNvbWUgc2xvd2VyLCB3ZSds
bCBzY3JvbGwgb25lIGluY3JlbWVudCBhbmQKKyAgICAgICAgLy8gdGhlbiBwYXVzZSB1bnRpbCB0
aGUgbmV4dCBldmVudCBmaXJlcy4gIFRoaXMgbGF0dGVyIGJlaGF2aW9yIG1lYW5zCisgICAgICAg
IC8vIHRoYXQgc2luZ2xlIGtleXByZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwgaGF2ZSB0aGUg
c2FtZSBhcHBlYXJhbmNlCisgICAgICAgIC8vIGFzIHNpbmdsZSBwcmVzc2VzIG9mIGEgc2Nyb2xs
YmFyIHBhcnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gKmRhdGEtPm1f
Y3VycmVudFBvcyk7CisgICAgICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdo
ZWVsIGNvbnRpbnVhbGx5IHNwdW4pLCB0aGVuIG9uY2Ugd2UKKyAgICAgICAgLy8gaGF2ZSByZWFj
aGVkIGEgdmVsb2NpdHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUK
KyAgICAgICAgLy8gbGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhdCBhcm91bmQg
dGhlIHNhbWUgdGltZSB3ZSdkCisgICAgICAgIC8vIGV4cGVjdCB0aGUgbmV4dCBpbmNyZW1lbnQg
dG8gb2NjdXIgLS0gYmFkIGJlY2F1c2UgaXQgbGVhZHMgdG8KKyAgICAgICAgLy8gaGl0Y2hpbmcg
YXMgZGVzY3JpYmVkIGFib3ZlLiAgU28gd2UgdHJpbSB0aGUgdmVsb2NpdHkgc2xpZ2h0bHkgc28K
KyAgICAgICAgLy8gdGhhdCB3ZSBoYXZlIGEgc21hbGwgYnVmZmVyLCB0byBkZWNyZWFzZSB0aGUg
bGlrZWxpaG9vZCBvZiB0aGlzCisgICAgICAgIC8vIG9jY3VycmluZy4gIE5vdGUgdGhhdCB3ZSB3
b24ndCBmYWxsIHN0ZWFkaWx5IGZ1cnRoZXIgYmVoaW5kIGhlcmUsCisgICAgICAgIC8vIGJlY2F1
c2UgaW4gc3Vic2VxdWVudCB1cGRhdGVzIHdlJ2xsIGJlIGNhbGN1bGF0aW5nIG91ciB2ZWxvY2l0
eSBiYXNlZAorICAgICAgICAvLyBvbiBhIGxhcmdlciBkZXNpcmVkIHN0ZXAgLS0gc28gdGhlIHBy
YWN0aWNhbCBlZmZlY3QgaXMgdGhhdCB3ZSBsYWcgYnkKKyAgICAgICAgLy8gYSBzbWFsbCwgY29u
c3RhbnQgYW1vdW50IGRlcGVuZGluZyBvbiB0aGUgdHJpbSB2YWx1ZSBhbmQgdGhlIHJhdGUgYXQK
KyAgICAgICAgLy8gd2hpY2ggaW5jcmVtZW50cyBvY2N1ciBjb21wYXJlZCB0byB0aGUgYXV0b3Nj
cm9sbCB0aW1lciBkZWxheS4gIFRoZQorICAgICAgICAvLyBleGFjdCBhbW91bnQgaXMgZ2l2ZW4g
YnkKKyAgICAgICAgLy8gICBsYWcgPSB8c3RlcHwgKiAoKHIgLyBrKSAtIDEpCisgICAgICAgIC8v
IFdoZXJlCisgICAgICAgIC8vICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBl
YXQgZGVsYXksCisgICAgICAgIC8vICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgp
LT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpLCB0byB0aGUKKyAgICAgICAgLy8gICAgICAga2V5L3do
ZWVsIHJlcGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBmYXN0ZXIpCisgICAg
ICAgIC8vICAgayA9IFRoZSB2ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAg
ICAgIC8vCisgICAgICAgIC8vIElmIHdlIHdhbnQgdG8gYWN0IGFzIG11Y2ggbGlrZSBhdXRvc2Ny
b2xsaW5nIGFzIHBvc3NpYmxlLCB0aGVuIHdlCisgICAgICAgIC8vIGNob29zZSBrIHN1Y2ggdGhh
dCBsYWcgaXMgdGhlIHNhbWUgYXMgYWJvdmUgd2hlbiByID0gMS4gIFRoZSBlcXVhdGlvbgorICAg
ICAgICAvLyBiZWxvdyBkb2VzIHRoaXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBkb24ndCBkbyB0aGlzIHdoZW4gd2UncmUgbm90IGFscmVhZHkgYW5pbWF0aW5nLCBpLmUu
CisgICAgICAgIC8vIGdldHRpbmcgcmVwZWF0ZWQgZXZlbnRzLiAgSWYgdGhlIHVzZXIgc2ltcGx5
IHByZXNzZWQgYSBrZXkgb25jZSwgd2UKKyAgICAgICAgLy8gd2FudCB0byBhbmltYXRlIGF0IG5v
cm1hbCBzcGVlZCBsaWtlIHdlIHdvdWxkIGFib3ZlLiAgSWYgd2UnbGwgYmUKKyAgICAgICAgLy8g
Z2V0dGluZyBtb3JlIGV2ZW50cyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIHRyaW1taW5nIGJlbG93
LCBvdXIKKyAgICAgICAgLy8gaW5pdGlhbCBhY2NlbGVyYXRpb24gcGVyaW9kIHdpbGwgZ2l2ZSB1
cyBlbm91Z2ggdGltZSBmb3IgdGhlbSB0bworICAgICAgICAvLyBhcnJpdmUuCisgICAgICAgIGlm
IChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICAgICAgYW5pbWF0aW9uU3RlcCAvPSAoMi4wIC0g
KCgxLjAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKSkgKiAoMC41ICogYWNjZWxlcmF0aW9uVGltZSgpICsgYW5pbWF0aW9uVGltZXJEZWxheSkp
KTsKKyAgICB9CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8g
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisK
KyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcsIHN0YXJ0LgorICAgIGlmICgh
YWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9sbChkYXRhKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBw
b3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YTsKKyAgICBz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICAqZGF0YS0+bV9jdXJyZW50UG9z
ID0gcG9zOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2N1cnJl
bnRWZWxvY2l0eSA9IDA7CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworfQorCisv
LyBzdGF0aWMKK2RvdWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YWNjZWxlcmF0aW9uVGltZSgpCit7
CisgICAgLy8gV2UgZWxlY3QgdG8gdXNlIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5h
dXRvc2Nyb2xsVGltZXJEZWxheSgpIGFzCisgICAgLy8gdGhlIGxlbmd0aCBvZiB0aW1lIHdlJ2xs
IHRha2UgdG8gYWNjZWxlcmF0ZSBmcm9tIDAgdG8gb3VyIHRhcmdldAorICAgIC8vIHZlbG9jaXR5
LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUgd291bGQgcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNl
ZAorICAgIC8vIGFjY2VsZXJhdGlvbiBlZmZlY3QuCisgICAgcmV0dXJuIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpOworfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2lu
PiogdGltZXIpCit7CisgICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9yaXpvbnRhbERh
dGEubV9hbmltYXRpb25UaW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0
YSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKFBlckF4aXNEYXRhKiBkYXRhKQoreworICAgIGlmIChkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhKiBkYXRh
KQoreworICAgIC8vIE5vdGUgb24gc21vb3RoIHNjcm9sbGluZyBwZXJmIHZlcnN1cyBub24tc21v
b3RoIHNjcm9sbGluZyBwZXJmOgorICAgIC8vIFRoZSB0b3RhbCB0aW1lIHRvIHBlcmZvcm0gYSBj
b21wbGV0ZSBzY3JvbGwgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIHQgPSB0MCArIDAuNXRBIC0gdEQg
KyB0UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBlcmZvcm0gdGhl
IHNjcm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0gVGhlIGFjY2Vs
ZXJhdGlvbiB0aW1lLAorICAgIC8vICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSAoc2VlIGJlbG93KQorICAgIC8vICAgdEQgPSB8YW5p
bWF0aW9uVGltZXJEZWxheXwKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAgLy8gICAgICAgIHNpbmds
ZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVlIHRvIGNhbGxpbmcKKyAg
ICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBmb3Igc2ltcGxlIHBhZ2Vz
LCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMpLgorICAgIC8vCisgICAg
Ly8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhlIHRvdGFsIGxhZyAoYXMg
dXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgbmVnbGlnaWJsZSBmb3Igc2ltcGxlIHBhZ2Vz
IGFuZCByb3VnaGx5IHRTIGZvciBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dAorICAgIC8vIGtub3dp
bmcgaW4gYWR2YW5jZSBob3cgbGFyZ2UgdFMgaXMgaXQncyBoYXJkIHRvIGRvIGJldHRlciB0aGFu
IHRoaXMuCisgICAgLy8gUGVyaGFwcyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMg
dmFsdWVzIGFuZCBmb3J3YXJkLWNvbXBlbnNhdGUuCisKKworICAgIC8vIFdlIHdhbnQgdG8gdXBk
YXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIHRpbWUgaXQncyBiZWVuIHNpbmNl
CisgICAgLy8gb3VyIGxhc3QgdXBkYXRlLiAgVGhpcyBtYXkgYmUgbG9uZ2VyIHRoYW4gb3VyIGlk
ZWFsIHRpbWUsIGVzcGVjaWFsbHkgaWYKKyAgICAvLyB0aGUgcGFnZSBpcyBjb21wbGV4IG9yIHRo
ZSBzeXN0ZW0gaXMgc2xvdy4KKyAgICAvLworICAgIC8vIFRvIGF2b2lkIGZlZWxpbmcgbGFnZ3ks
IGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xsaW5nIHdlIHByZXRlbmQKKyAgICAv
LyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUgaWRlYWwgaW50ZXJ2YWwsIHNvIHRo
YXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29tZSBkaXN0YW5jZSBpbW1lZGlhdGVs
eS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSkgOiBh
bmltYXRpb25UaW1lckRlbGF5OworCisgICAgLy8gRmlndXJlIG91dCBob3cgZmFyIHdlJ3ZlIGFj
dHVhbGx5IHRyYXZlbGVkIGFuZCB1cGRhdGUgb3VyIGN1cnJlbnQKKyAgICAvLyB2ZWxvY2l0eS4K
KyAgICBmbG9hdCBkaXN0YW5jZVRyYXZlbGVkOworICAgIGlmIChkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSA8IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgIC8vIFdlIGFjY2VsZXJh
dGUgYXQgYSBjb25zdGFudCByYXRlIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHZlbG9jaXR5
LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2Np
dHkgLyBhY2NlbGVyYXRpb25UaW1lKCk7CisKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGV0aGVy
IGNvbnRhbnQgYWNjZWxlcmF0aW9uIGhhcyBjYXVzZWQgdXMgdG8gcmVhY2ggb3VyCisgICAgICAg
IC8vIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgcG90ZW50aWFsVmVsb2NpdHlDaGFu
Z2UgPSBhY2NlbGVyYXRpb25SYXRlICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICBmbG9h
dCBwb3RlbnRpYWxOZXdWZWxvY2l0eSA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsgcG90ZW50
aWFsVmVsb2NpdHlDaGFuZ2U7CisgICAgICAgIGlmIChwb3RlbnRpYWxOZXdWZWxvY2l0eSA+IGRh
dGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSB0
YXJnZXQgdmVsb2NpdHkgYXQgc29tZSBwb2ludCBiZXR3ZWVuIG91ciBsYXN0CisgICAgICAgICAg
ICAvLyB1cGRhdGUgYW5kIG5vdy4gIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBjYW4gYmUgY2FsY3Vs
YXRlZCBpbiB0d28KKyAgICAgICAgICAgIC8vIHBpZWNlczogdGhlIGRpc3RhbmNlIHRyYXZlbGVk
IHdoaWxlIGFjY2VsZXJhdGluZywgYW5kIHRoZQorICAgICAgICAgICAgLy8gZGlzdGFuY2UgdHJh
dmVsZWQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgICAgIGZs
b2F0IGFjdHVhbFZlbG9jaXR5Q2hhbmdlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgLSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eTsKKyAgICAgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvbkludGVy
dmFsID0gYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyBhY2NlbGVyYXRpb25SYXRlOworICAgICAgICAg
ICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIHVuZGVyIGNvbnN0YW50IGFjY2VsZXJhdGlvbiBp
cyB0aGUgYXJlYQorICAgICAgICAgICAgLy8gdW5kZXIgYSBsaW5lIHNlZ21lbnQgd2l0aCBhIGNv
bnN0YW50IHJpc2luZyBzbG9wZS4gIEJyZWFrIHRoaXMKKyAgICAgICAgICAgIC8vIGludG8gYSB0
cmlhbmd1bGFyIHBvcnRpb24gYXRvcCBhIHJlY3Rhbmd1bGFyIHBvcnRpb24gYW5kIHN1bS4KKyAg
ICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsg
KGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogYWNjZWxlcmF0aW9uSW50ZXJ2YWwpOworICAg
ICAgICAgICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGF0IHRoZSB0YXJnZXQgdmVsb2NpdHkg
aXMgc2ltcGx5CisgICAgICAgICAgICAvLyAodGFyZ2V0IHZlbG9jaXR5KSAqIChyZW1haW5pbmcg
dGltZSBhZnRlciBhY2NlbGVyYXRpbmcpLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCAr
PSAoZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgKiAobGFzdFNjcm9sbEludGVydmFsIC0gYWNjZWxl
cmF0aW9uSW50ZXJ2YWwpKTsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0g
ZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBDb25zdGFudCBhY2NlbGVyYXRpb24gdGhyb3VnaCB0aGUgZW50aXJlIHRpbWUgaW50ZXJ2YWwu
CisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5
ICsgKHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogbGFzdFNjcm9sbEludGVydmFsOwor
ICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBwb3RlbnRpYWxOZXdWZWxvY2l0
eTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVh
Y2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5LCBzbyB0aGUgZGlzdGFuY2Ugd2UndmUKKyAgICAgICAg
Ly8gdHJhdmVsZWQgaXMgc2ltcGx5IChjdXJyZW50IHZlbG9jaXR5KSAqIChlbGFwc2VkIHRpbWUp
LgorICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIC8vIElmIG91ciBkZXNpcmVkIHZlbG9jaXR5IGhh
cyBkZWNyZWFzZWQsIGRyb3AgdGhlIGN1cnJlbnQgdmVsb2NpdHkgdG9vLgorICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5OworICAgIH0KKwor
ICAgIC8vIE5vdyB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgZGlzdGFu
Y2UgdHJhdmVsZWQuCisgICAgaWYgKGRpc3RhbmNlVHJhdmVsZWQgPj0gYWJzKGRhdGEtPm1fZGVz
aXJlZFBvcyAtICpkYXRhLT5tX2N1cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZl
bGVkIGZhciBlbm91Z2ggdG8gcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290
aAorICAgICAgICAvLyBzY3JvbGxpbmcuCisgICAgICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBk
YXRhLT5tX2Rlc2lyZWRQb3M7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsK
KyAgICAgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCB5ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0
IGFuZCBzZXQgdXAgdGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoKmRh
dGEtPm1fY3VycmVudFBvcyA+IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSAtZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgKmRhdGEtPm1fY3VycmVu
dFBvcyArPSBkaXN0YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICAgICAgZGF0YS0+bV9sYXN0
QW5pbWF0aW9uVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQt
PnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQoKm1faG9yaXpvbnRhbERhdGEu
bV9jdXJyZW50UG9zLCAqbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50UG9zKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcldpbl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yV2luX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxBbmltYXRv
cldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0
b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JXaW4o
KTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhp
c0RhdGEgeworICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFyZW50LCBm
bG9hdCogY3VycmVudFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsKKyAgICAg
ICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxvY2l0eTsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBtX2xhc3RB
bmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9hbmltYXRp
b25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25UaW1lKCk7
CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAgdm9p
ZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOworICAgIHZv
aWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2b2lkIGFu
aW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRh
bERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9CisjZW5kaWYK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4u
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBTY3JvbGxCeVBpeGVsCiAgICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291
cmNlIHsKKyAgICAgICAgS2V5cHJlc3MsCisgICAgICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxi
YXJQYXJ0T3JNZW51LCAvLyAiU2Nyb2xsYmFyIiBhbG9uZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNz
IG5hbWUuCisgICAgICAgIFByb2dyYW1tYXRpYworICAgIH07CisKICAgICBlbnVtIFNjcm9sbGJh
ck9yaWVudGF0aW9uIHsgSG9yaXpvbnRhbFNjcm9sbGJhciwgVmVydGljYWxTY3JvbGxiYXIgfTsK
IAogICAgIGVudW0gU2Nyb2xsYmFyTW9kZSB7IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhckFsd2F5
c09mZiwgU2Nyb2xsYmFyQWx3YXlzT24gfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAko
cmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDIwIEBAIEludFBvaW50IFNjcm9sbFZpZXc6Om1heGlt
dW1TY3JvbGxQb3NpdGkKICAgICByZXR1cm4gSW50UG9pbnQobWF4aW11bU9mZnNldC53aWR0aCgp
LCBtYXhpbXVtT2Zmc2V0LmhlaWdodCgpKTsKIH0KIAoraW50IFNjcm9sbFZpZXc6OnNjcm9sbFNp
emUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7CisgICAg
cmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52
aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUo
b2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2
b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKICAg
ICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTMxNSwxNyArMzI5LDE3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QKICAgICB1cGRhdGVTY3Jv
bGxiYXJzKEludFNpemUobmV3U2Nyb2xsUG9zaXRpb24ueCgpLCBuZXdTY3JvbGxQb3NpdGlvbi55
KCkpKTsKIH0KIAotYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIFNjcm9sbFZpZXc6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkK
ICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwog
CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93
bikgewogICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVy
biBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIHNvdXJjZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJldHVybiBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2Up
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00NDEsNyArNDU1LDcgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRp
b24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpLCBmYWxzZSk7CiAgICAgICAgIGlmICht
X3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAogICAgIH0gCkBAIC00NjMsNyArNDc3
LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFBy
b3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAg
IGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAgLTY2OSwxMSAr
NjgzLDE2IEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUKICAgICAg
ICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSB7CiAgICAg
ICAgICAgICBBU1NFUlQoZGVsdGFYID09IDApOwogICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9
IGRlbHRhWSA8IDA7Ci0gICAgICAgICAgICBkZWx0YVkgPSBtYXgobWF4PGludD4odmlzaWJsZUhl
aWdodCgpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgdmlzaWJs
ZUhlaWdodCgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAg
ICAgICAgICAgIGRlbHRhWSA9IG1heChtYXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZpc2libGVIZWln
aHQoKSkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4odmlzaWJsZUhlaWdodCgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2Vl
blBhZ2VzKCkpKSwgMS4wZik7CiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAg
ICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRT
aXplKC1kZWx0YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNr
IG9uIHNjcm9sbEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRl
bHRhPworICAgICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWws
IFdoZWVsLCBkZWx0YVkpOworICAgICAgICBpZiAoZGVsdGFZICYmIG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbExl
ZnQsIFNjcm9sbEJ5UGl4ZWwsIFdoZWVsLCBkZWx0YVgpOwogICAgIH0KIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDkgQEAgY2xhc3MgU2Nyb2xsVmll
dyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGljOgogICAgIH5TY3JvbGxWaWV3KCk7CiAK
LSAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uIEZyYW1lVmlldyBvdmVycmlkZXMgdGhl
IG90aGVyIHR3by4KKyAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgRnJhbWVWaWV3
IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICAKICAgICAvLyBUaGUgd2luZG93IHRo
YXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xsVmlldyB3aWxsIGNvbW11bmljYXRl
IHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpAQCAtMTU0LDcgKzE1Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHMpIHsgcmV0dXJuIHNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzKTsgfQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBz
Y3JvbGxzIGJ5IGxpbmVzLCBwYWdlcyBvciBwaXhlbHMuCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgICAg
IAogICAgIC8vIFNjcm9sbCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSB2aWV3IChlaXRoZXIg
YmxpdHRpbmcgb3IgaW52YWxpZGF0aW5nIGFzIG5lZWRlZCkuCiAgICAgdm9pZCBzY3JvbGxDb250
ZW50cyhjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDEyICsxMDEsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFy
KCkKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMpOwogfQogCi1ib29sIFNj
cm9sbGJhcjo6c2V0VmFsdWUoaW50IHYpCitib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUoaW50IHYs
IGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikKIHsKICAgICB2ID0gbWF4KG1pbih2LCBtX3RvdGFs
U2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKICAgICBpZiAodmFsdWUoKSA9PSB2KQogICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQgdGhlIHNhbWUuCi0gICAgc2V0Q3Vy
cmVudFBvcyh2KTsKKyAgICBzZXRDdXJyZW50UG9zKHYsICFmcm9tU2Nyb2xsQW5pbWF0aW9uKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgU2Nyb2xsYmFy
OjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhl
bHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVs
dGlwbGllcikKIHsKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKQEAgLTE0MiwyNCArMTQyLDI1IEBAIGJvb2wg
U2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKICAgICB9CiAjZW5kaWYKIAotICAg
IGZsb2F0IHN0ZXAgPSAwOwotICAgIGlmICgoZGlyZWN0aW9uID09IFNjcm9sbFVwICYmIG1fb3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHx8IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVm
dCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBzdGVw
ID0gLTE7Ci0gICAgZWxzZSBpZiAoKGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duICYmIG1fb3JpZW50
YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHx8IChkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQg
JiYgbV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgc3RlcCA9
IDE7CisgICAgLy8gSWdub3JlIHBlcnBlbmRpY3VsYXIgc2Nyb2xscy4KKyAgICBpZiAoKG1fb3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9sbFVw
IHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCB8
fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBmbG9hdCBzdGVwOwogICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmUpCi0gICAg
ICAgIHN0ZXAgKj0gbV9saW5lU3RlcDsKKyAgICAgICAgc3RlcCA9IG1fbGluZVN0ZXA7CiAgICAg
ZWxzZSBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlQYWdlKQotICAgICAgICBzdGVwICo9IG1f
cGFnZVN0ZXA7CisgICAgICAgIHN0ZXAgPSBtX3BhZ2VTdGVwOwogICAgIGVsc2UgaWYgKGdyYW51
bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0gICAgICAgIHN0ZXAgKj0gbV90b3RhbFNpemU7
CisgICAgICAgIHN0ZXAgPSBtX3RvdGFsU2l6ZTsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9
PSBTY3JvbGxCeVBpeGVsKQotICAgICAgICBzdGVwICo9IG1fcGl4ZWxTdGVwOworICAgICAgICBz
dGVwID0gbV9waXhlbFN0ZXA7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJl
Y3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOwor
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zY3JvbGwobV9vcmll
bnRhdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllcik7CiAKLSAgICBm
bG9hdCBuZXdQb3MgPSBtX2N1cnJlbnRQb3MgKyBzdGVwICogbXVsdGlwbGllcjsKLSAgICBmbG9h
dCBtYXhQb3MgPSBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemU7Ci0gICAgcmV0dXJuIHNldEN1
cnJlbnRQb3MobWF4KG1pbihuZXdQb3MsIG1heFBvcyksIDAuMGYpKTsKKyAgICByZXR1cm4gc2V0
Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0
YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpKSwgMC4wZiksIGZh
bHNlKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6OnVwZGF0ZVRodW1iKCkKQEAgLTIyMSw3ICsyMjIs
NyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAg
ICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJlc3Nl
ZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkK
KyAgICBpZiAoc2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0
U2Nyb2xsR3JhbnVsYXJpdHkoKSwgU2Nyb2xsYmFyUGFydE9yTWVudSkpCiAgICAgICAgIHN0YXJ0
VGltZXJJZk5lZWRlZChkZWxheSk7CiB9CiAKQEAgLTI5MSwxMSArMjkyLDE0IEBAIHZvaWQgU2Ny
b2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcykKICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAg
ICAgIGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVsdGEpOwogICAgIGlmIChkZWx0YSkKLSAgICAg
ICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBt
YXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbikpOworICAgICAgICBzZXRDdXJyZW50UG9z
KHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFj
a0xlbiAtIHRodW1iTGVuKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50
UG9zKGZsb2F0IHBvcykKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywg
Ym9vbCBub3RpZnlTY3JvbGxBbmltYXRvcikKIHsKKyAgICBpZiAobm90aWZ5U2Nyb2xsQW5pbWF0
b3IgJiYgY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24obV9vcmllbnRhdGlvbiwgcG9zKTsKKwogICAgIGlmIChwb3MgPT0gbV9jdXJy
ZW50UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM0MCw3ICszNDQsNyBAQCBib29s
IFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiB7CiAgICAgaWYgKG1fcHJlc3Nl
ZFBhcnQgPT0gVGh1bWJQYXJ0KSB7CiAgICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFj
a1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2Ry
YWdPcmlnaW4pOworICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmlnaW4sIHRydWUp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS54KCkgOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5o
CShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDExICs3NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAgICAgdm9pZCBzZXRTdGVwcyhpbnQgbGlu
ZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1BlclN0ZXAgPSAxKTsKLSAgICBib29sIHNl
dFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1ZShpbnQsIGJvb2wgZnJvbVNjcm9sbEFuaW1h
dGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFs
U2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7
IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIgPSAx
KTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCk7CiAKQEAgLTEyNCw5ICsxMjQsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhj
b25zdCBJbnRQb2ludCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc1Nj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQogcHJvdGVjdGVkOgogICAgIFNjcm9s
bGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDApOwogCkBAIC0xNDIsNyArMTM5LDYgQEAgcHJv
dGVjdGVkOgogICAgIFNjcm9sbEdyYW51bGFyaXR5IHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJp
dHkoKTsKICAgICAKICAgICB2b2lkIG1vdmVUaHVtYihpbnQgcG9zKTsKLSAgICBib29sIHNldEN1
cnJlbnRQb3MoZmxvYXQgcG9zKTsKIAogICAgIFNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7CiAg
ICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKQEAgLTE2Nyw2ICsxNjMsMTEg
QEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9vdmVybGFwc1Jlc2l6ZXI7CiAgICAgCiAgICAgYm9v
bCBtX3N1cHByZXNzSW52YWxpZGF0aW9uOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBp
c1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgc2V0Q3VycmVu
dFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpOwogfTsKIAogfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDkgQEAKICNpZm5kZWYgU2Nyb2xsYmFyQ2xpZW50X2gKICNkZWZpbmUgU2Nyb2xsYmFyQ2xpZW50
X2gKIAorI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC0zNCw3ICszNiwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFy
Q2xpZW50KCkge30KKyAgICBTY3JvbGxiYXJDbGllbnQoKSA6IG1fc2Nyb2xsQW5pbWF0b3IoU2Ny
b2xsQW5pbWF0b3I6OmNyZWF0ZSh0aGlzKSkgeyB9CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xp
ZW50KCkgeyB9CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2Us
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV9z
Y3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBz
dGVwLCBtdWx0aXBsaWVyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5k
U3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9z
KQorICAgIHsKKyAgICAgICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRT
dG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOworICAgIH0KKworICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IElu
dFBvaW50JikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIq
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKQEAgLTY3LDYgKzg1LDkgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9s
bEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9TY3JvbGxiYXJRdC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9TY3JvbGxiYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIzICs3MiwyMSBAQCBib29s
IFNjcm9sbGJhcjo6Y29udGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgY29uc3QgUVBvaW50IGds
b2JhbFBvcyA9IFFQb2ludChldmVudC5nbG9iYWxYKCksIGV2ZW50Lmdsb2JhbFkoKSk7CiAgICAg
UUFjdGlvbiogYWN0aW9uU2VsZWN0ZWQgPSBtZW51LmV4ZWMoZ2xvYmFsUG9zKTsKIAotICAgIGlm
ICghYWN0aW9uU2VsZWN0ZWQpCi0gICAgICAgIHsgLyogRG8gbm90aGluZyAqLyB9Ci0gICAgZWxz
ZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsSGVyZSkgeworICAgIGlmIChhY3Rpb25T
ZWxlY3RlZCA9PSBhY3RTY3JvbGxIZXJlKSB7CiAgICAgICAgIGNvbnN0IFFQb2ludCBwb3MgPSBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZlbnQucG9zKCkpOwogICAgICAgICBtb3ZlVGh1
bWIoaG9yaXpvbnRhbCA/IHBvcy54KCkgOiBwb3MueSgpKTsKICAgICB9IGVsc2UgaWYgKGFjdGlv
blNlbGVjdGVkID09IGFjdFNjcm9sbFRvcCkKLSAgICAgICAgc2V0VmFsdWUoMCk7CisgICAgICAg
IHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3Vt
ZW50LCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9
PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAgIHNldFZhbHVlKG1heGltdW0oKSk7CisgICAgICAg
IHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeURv
Y3VtZW50LCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3Rl
ZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdDog
U2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UsIFNjcm9sbGJhclBhcnRPck1lbnUp
OwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAgICBz
Y3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdl
LCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERv
d24sIFNjcm9sbEJ5UGFnZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxzZSBpZiAoYWN0
aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUsIDEpOworICAgICAgICBzY3JvbGwo
aG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lLCBTY3JvbGxi
YXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxE
b3duKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93
biwgU2Nyb2xsQnlMaW5lLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxS
aWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAj
ZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQs
NiArNjY0LDE3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JgogICAg
ICAgICA6OlJlbGVhc2VEQyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAoraW50IFBvcHVwTWVudVdp
bjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sK
KyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1fc2Ny
b2xsYmFyKSA/IChtX3Njcm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJs
ZVNpemUoKSkgOiAwOworfQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9sbGJh
cikKKyAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQor
CiB2b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQog
ewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CkBAIC05NzksNyArOTkwLDcgQEAgTFJFU1VMVCBQ
b3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBoV25kLAogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Nyb2xs
YmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5l
LCBhYnMoaSkpOworICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9s
bFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzKGkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdN
b3VzZSA9IGI7IH0KIAogICAgIC8vIFNjcm9sbEJhckNsaWVudAorICAgIHZpcnR1YWwgaW50IHNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7
CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsMTAgKzQyMSwxMCBA
QCBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0CiAgICAgcmV0dXJuIGlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xs
U291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQogewogICAg
IFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAobCAmJiBsLT5zY3JvbGwo
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKSkgewogICAgICAgICBp
ZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNDM1LDcgKzQzNSw3IEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7
CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKKyAgICAg
ICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRp
cGxpZXIsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwogICAgIGludCBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwg
Tm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIg
PSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNhbkJlU2Nyb2xsZWRBbmRIYXNT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1hdGlj
YWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xsKCk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCShyZXZpc2lvbiA2NjAyOSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcwLDYgKzE3MCwxNyBAQCB2b2lkIFJlbmRlckRhdGFHcmlkOjpwYWludENvbHVtbkhlYWRl
cihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKK2ludCBSZW5k
ZXJEYXRhR3JpZDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIp
ICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUo
KSkgOiAwOworfQorCit2b2lkIFJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJE
YXRhR3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAkocmV2aXNpb24gNjYwMjkp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgSFRNTERhdGFHcmlkRWxlbWVudCogZ3JpZEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRGF0YUdyaWRFbGVtZW50Kj4o
bm9kZSgpKTsgfQogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJ
bnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYzLDkgKzEzNjMsOSBA
QCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwKIAogICAgIGlmICh1cGRh
dGVTY3JvbGxiYXJzKSB7CiAgICAgICAgIGlmIChtX2hCYXIpCi0gICAgICAgICAgICBtX2hCYXIt
PnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgICAgICBtX2hCYXItPnNldFZhbHVl
KHNjcm9sbFhPZmZzZXQoKSwgZmFsc2UpOwogICAgICAgICBpZiAobV92QmFyKQotICAgICAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFkpOworICAgICAgICAgICAgbV92QmFyLT5zZXRW
YWx1ZShtX3Njcm9sbFksIGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBTY2hlZHVsZSB0aGUgc2Ny
b2xsIERPTSBldmVudC4KQEAgLTE2MTgsNiArMTYxOCwyMCBAQCB2b2lkIFJlbmRlckxheWVyOjpy
ZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBz
aG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhl
IHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAoraW50IFJlbmRlckxheWVyOjpz
Y3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAg
IFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/IG1faEJhciA6IG1fdkJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/IChz
Y3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3Qg
SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnNl
dFZhbHVlKG9mZnNldC54KCksIHRydWUpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJh
ci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIC8vIFVwZGF0ZSBzY3JvbGwgcG9zaXRpb24g
ZnJvbSBzY3JvbGxiYXJzLgpAQCAtMjA2OCw3ICsyMDgyLDcgQEAgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0byBr
ZWVwIGV2ZXJ5dGhpbmcgd29ya2luZyAoc2VlIGhvdyBzY3JvbGxYT2Zmc2V0KCkKICAgICAgICAg
Ly8gZGlmZmVycyBmcm9tIHNjcm9sbFlPZmZzZXQoKSB0byBnZXQgYW4gaWRlYSBvZiB3aHkgdGhl
IGhvcml6b250YWwgYW5kCiAgICAgICAgIC8vIHZlcnRpY2FsIHNjcm9sbGJhcnMgbmVlZCB0byBi
ZSB0cmVhdGVkIGRpZmZlcmVudGx5KS4KLSAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxY
T2Zmc2V0KCkpOworICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgZmFs
c2UpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQg
PSBib3gtPmNsaWVudEhlaWdodCgpOwpAQCAtMjIyOSw3ICsyMjQzLDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorYm9vbCBSZW5kZXJMYXll
cjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAg
IGJvb2wgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlOwogICAgIGJvb2wgZGlkVmVydGljYWxT
Y3JvbGwgPSBmYWxzZTsKQEAgLTIyMzgsMTMgKzIyNTIsMTMgQEAgYm9vbCBSZW5kZXJMYXllcjo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xs
QnlEb2N1bWVudCkgewogICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIGZvciB0aGUgU2Nyb2xs
QnlEb2N1bWVudCBncmFudWxhcml0eS4gQSBkb2N1bWVudCBzY3JvbGwgY2FuIG9ubHkgYmUgdXAg
CiAgICAgICAgICAgICAvLyBvciBkb3duIGFuZCBpbiBib3RoIGNhc2VzIHRoZSBob3Jpem9udGFs
IGJhciBnb2VzIGFsbCB0aGUgd2F5IHRvIHRoZSBsZWZ0LgotICAgICAgICAgICAgZGlkSG9yaXpv
bnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1lbnQs
IG11bHRpcGxpZXIpOworICAgICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+
c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1lbnQsIHNvdXJjZSwgbXVsdGlwbGllcik7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJh
ci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAgICAg
ICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcik7CiAgICAgfQogCiAgICAgaWYgKG1fdkJhcikKLSAg
ICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBtX3ZCYXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIpOwogCiAg
ICAgcmV0dXJuIChkaWRIb3Jpem9udGFsU2Nyb2xsIHx8IGRpZFZlcnRpY2FsU2Nyb2xsKTsKIH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAot
ICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpOwogICAgIHZv
aWQgYXV0b3Njcm9sbCgpOwogCiAgICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiwgY29uc3QgSW50U2l6ZSYpOwpAQCAtNTE4LDYgKzUxOCw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCiAgICAgLy8gU2Nyb2xsQmFy
Q2xpZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJl
dmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9s
bFRvUmV2ZWFsRWxlbWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAg
ICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC01MTAsOSArNTEwLDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5k
ZXhJc1Zpc2libGUoaQogICAgIHJldHVybiBpbmRleCA+PSBtX2luZGV4T2Zmc2V0ICYmIGluZGV4
IDwgbV9pbmRleE9mZnNldCArIG51bVZpc2libGVJdGVtcygpOwogfQogCi1ib29sIFJlbmRlckxp
c3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQorYm9vbCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUq
KikKIHsKLSAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9p
ZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KQpAQCAtNTIz
LDYgKzUyMywxNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lCiAg
ICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKK2ludCBS
ZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFy
KSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVTaXpl
KCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJM
aXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICBpbnQgbmV3T2Zmc2V0ID0g
bV92QmFyLT52YWx1ZSgpOwpAQCAtNTc4LDcgKzU4OSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwogICAgIG1faW5kZXhPZmZzZXQg
PSBpbmRleDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4
KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgZmFsc2UpOwogfQogCiBib29sIFJl
bmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJ
KHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBz
dG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiog
c3RvcE5vZGUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAg
IHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290
TGluZUJveCkgY29uc3Q7CkBAIC05Niw2ICs5Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKTsKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50
UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MSwxMiArMTA3MSwxMiBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVyVGV4dEVsZW1l
bnQoKS0+c2V0U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKK2Jv
b2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3Vy
Y2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBSZW5kZXJMYXll
ciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwotICAg
IGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIpKQorICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIsIHN0b3BOb2RlKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKIH0KIAogUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xs
YmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gNjYw
MjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50
IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGlu
dCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9h
dCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIGludCB0ZXh0QmxvY2tX
aWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0
cmluZyBmYW1pbHkpOwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMzKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGluZyAg
PHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5k
b3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQ
YWdlUXQuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2ViS2l0
OjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGVmYXVsdEJlaGF2
aW9yRm9yS2V5RXZlbnQpOgorCiAyMDEwLTA4LTE5ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBDYWxsIE5QX0dldEVudHJ5UG9pbnRzIGJlZm9yZSBOUF9Jbml0aWFs
aXplIG9uIFdpbmRvd3MKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBh
Z2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2Vi
UGFnZVF0LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9XZWJQYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgY29u
c3QgY2hhciogV2ViUGFnZTo6aW50ZXJwcmV0S2V5RXZlbnQoYwogCiBzdGF0aWMgaW5saW5lIHZv
aWQgc2Nyb2xsKFBhZ2UqIHBhZ2UsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKTsKIH0KIAogYm9vbCBXZWJQYWdlOjpwZXJmb3Jt
RGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9h
cmRFdmVudCkKQEAgLTIyNiwxMCArMjI2LDcgQEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtRGVmYXVs
dEJlaGF2aW9yRm9ySwogICAgICAgICAgICAgbV9wYWdlLT5nb0JhY2soKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBWS19TUEFDRToKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQuc2hpZnRL
ZXkoKSkKLSAgICAgICAgICAgIHNjcm9sbChtX3BhZ2UsIFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2Up
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGwobV9wYWdlLCBTY3JvbGxEb3duLCBT
Y3JvbGxCeVBhZ2UpOworICAgICAgICBzY3JvbGwobV9wYWdlLCBrZXlib2FyZEV2ZW50LnNoaWZ0
S2V5KCkgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgVktfTEVGVDoKICAgICAgICAgc2Nyb2xsKG1fcGFnZSwgU2Nyb2xsTGVm
dCwgU2Nyb2xsQnlMaW5lKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjYwMzApCisrKyBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Ny
b2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAg
KiBwdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhcjo6KToKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0
Y2hpbmdFbnVtcy5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICog
c3JjL1dlYkZyYW1lSW1wbC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQpOgorICAgICAgICAqIHNy
Yy9XZWJTY3JvbGxiYXJJbXBsLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlv
bi4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuICBBbGxvdyB3aGVlbCBzY3JvbGxzIHRv
IGJlIGFuaW1hdGVkLiAgRml4IGNvbXBpbGF0aW9uIHdhcm5pbmdzLgorICAgICAgICAoV2ViS2l0
OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNj
cm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdo
ZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbik6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogUGx1bWIgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbi4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuaDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAg
ICAgKiBzcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcDogVXBkYXRlIGNvbW1lbnRzIG5v
dyB0aGF0IHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5w
dXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudCk6CisKIDIwMTAtMDgtMjUgIFNhdGlzaCBT
YW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJl
bXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgJKHJldmlz
aW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTksNiArNTksMTMgQEAgcHVibGljOgogICAgICAgICBTY3JvbGxCeVBp
eGVsCiAgICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291cmNlIHsKKyAgICAgICAgS2V5cHJlc3Ms
CisgICAgICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxiYXJQYXJ0T3JNZW51LCAvLyAiU2Nyb2xs
YmFyIiBhbG9uZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNzIG5hbWUuCisgICAgICAgIFByb2dyYW1t
YXRpYworICAgIH07CisKICAgICAvLyBDcmVhdGVzIGEgV2ViU2Nyb2xsYmFyLgogICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYlNjcm9sbGJhciogY3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCosIE9y
aWVudGF0aW9uKTsKIApAQCAtNzQsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQg
dmFsdWUoKSBjb25zdCA9IDA7CiAKICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHZhbHVlLgotICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShpbnQgcG9zaXRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uLCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pID0gMDsK
IAogICAgIC8vIFNldHMgdGhlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgcmVnaW9uIGluIHBpeGVs
cy4gIGkuZS4gaWYgYSBkb2N1bWVudCBpcwogICAgIC8vIDgwMHgxMDAwMCBwaXhlbHMgYW5kIHRo
ZSB2aWV3cG9ydCBpcyAxMDAweDEwMDAgcGl4ZWxzLCB0aGVuIHNldExvY2F0aW9uCkBAIC04NCw3
ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBz
aXplKSA9IDA7CiAKICAgICAvLyBTY3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVu
IGdyYW51bGFyaXR5LgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNl
LCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CiAKICAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFu
Z2xlLgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jikg
PSAwOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3Bw
CShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsMTEgQEAgQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5RG9jdW1lbnQsIFNjcm9sbEJ5RG9jdW1lbnQpOwogQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5UGl4ZWwsIFNj
cm9sbEJ5UGl4ZWwpOwogCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJh
cjo6S2V5cHJlc3MsIEtleXByZXNzKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2Vi
U2Nyb2xsYmFyOjpXaGVlbCwgV2hlZWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJTY3JvbGxiYXI6OlNjcm9sbGJhclBhcnRPck1lbnUsIFNjcm9sbGJhclBhcnRPck1lbnUpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlByb2dyYW1tYXRpYywg
UHJvZ3JhbW1hdGljKTsKKwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTZXR0aW5n
czo6RWRpdGluZ0JlaGF2aW9yTWFjLCBFZGl0aW5nTWFjQmVoYXZpb3IpOwogQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJTZXR0aW5nczo6RWRpdGluZ0JlaGF2aW9yV2luLCBFZGl0aW5n
V2luZG93c0JlaGF2aW9yKTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNw
cAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTIsMTAgKzExNTIsMTAgQEAgYm9vbCBXZWJGcmFtZUlt
cGw6OmV4ZWN1dGVDb21tYW5kKGNvbnN0CiAgICAgLy8gbW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVu
dCBhbmQgbW92ZVRvRW5kZkRvY3VtZW50IGFyZSBvbmx5IGhhbmRsZWQgYnkgV2ViS2l0CiAgICAg
Ly8gZm9yIGVkaXRhYmxlIG5vZGVzLgogICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPmNhbkVk
aXQoKSAmJiB3ZWJOYW1lID09ICJtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IikKLSAgICAgICAg
cmV0dXJuIHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1
bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xs
VXAsIFNjcm9sbEJ5RG9jdW1lbnQsIFByb2dyYW1tYXRpYyk7CiAKICAgICBpZiAoIWZyYW1lKCkt
PmVkaXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvRW5kT2ZEb2N1bWVudCIp
Ci0gICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwg
U2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVT
Y3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgUHJvZ3JhbW1hdGljKTsKIAogICAg
IHJldHVybiBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZCh3ZWJOYW1lKS5leGVjdXRlKHZhbHVl
KTsKIH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2
aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6
c2V0TG9jYXRpb24oY29uc3QKICAgICAgIG1fc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAKICAg
ICBpbnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDogbV9zY3JvbGxiYXItPmhlaWdodCgpOwot
ICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihsZW5ndGggKiBTY3JvbGxiYXI6Om1pbkZy
YWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBC
ZXR3ZWVuUGFnZXMoKSksIDEpOworICAgIGludCBwYWdlU3RlcCA9IG1heChtYXgoc3RhdGljX2Nh
c3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obGVuZ3RoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rp
b25Ub1N0ZXBXaGVuUGFnaW5nKCkpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3
ZWVuUGFnZXMoKSksIDEpOwogICAgIG1fc2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICBtX3Njcm9sbGJhci0+c2V0RW5hYmxl
ZChtX3Njcm9sbGJhci0+dG90YWxTaXplKCkgPiBsZW5ndGgpOwogICAgIG1fc2Nyb2xsYmFyLT5z
ZXRQcm9wb3J0aW9uKGxlbmd0aCwgbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpKTsKQEAgLTkyLDkg
KzkyLDkgQEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKICAgICByZXR1cm4g
bV9zY3JvbGxiYXItPnZhbHVlKCk7CiB9CiAKLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFs
dWUoaW50IHBvc2l0aW9uKQordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9z
aXRpb24sIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikKIHsKLSAgICBtX3Njcm9sbGJhci0+c2V0
VmFsdWUocG9zaXRpb24pOworICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShwb3NpdGlvbiwgZnJv
bVNjcm9sbEFuaW1hdGlvbik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0RG9jdW1l
bnRTaXplKGludCBzaXplKQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1w
bDo6c2V0RG9jdW1lbnRTaXplKGkKICAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5n
dGgsIHNpemUpOwogfQogCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllcikKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291
cmNlLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBk
aXI7CiAgICAgYm9vbCBob3Jpem9udGFsID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcjsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYlNjcm9sbGJh
ckltcGw6OnNjcm9sbChTY3JvbGxEaXJlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3Jv
bGxSaWdodCA6IFNjcm9sbERvd247CiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFs
ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0
aXBsaWVyKTsKKyAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
U2Nyb2xsU291cmNlPihzb3VyY2UpLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBXZWJTY3JvbGxi
YXJJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKQEAg
LTIxNCwxMSArMjE0LDExIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNv
bnMKICAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9s
bGJhcik7CiAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhIDwgMDsKLSAgICAg
ICAgICAgICAgICBkZWx0YSA9IG1heChtYXg8aW50PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUo
KSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIG1fc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAx
KTsKKyAgICAgICAgICAgICAgICBkZWx0YSA9IG1heChtYXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
c2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBX
aGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUo
KSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSksIDEuMGYpOwogICAgICAg
ICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGEgKj0gLTE7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUobV9zY3Jv
bGxiYXItPnZhbHVlKCkgLSBkZWx0YSk7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+c2Nyb2xs
KChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IFdl
YkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Nyb2xsQnlQ
aXhlbCwgV2ViQ29yZTo6V2hlZWwsIGRlbHRhKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAKQEAgLTI1NywxMSArMjU3LDIxIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6
b25LZXlEb3duKGNvbnN0IFcKICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Ny
b2xsR3JhbnVsYXJpdHk7CiAgICAgICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNj
cm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7CiAg
ICAgICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24n
dCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCi0gICAgICAgICAgICByZXR1cm4gbV9z
Y3JvbGxiYXItPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Ny
b2xsR3JhbnVsYXJpdHksIFdlYkNvcmU6OktleXByZXNzKTsKICAgICAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAoraW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZTo6
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIChv
cmllbnRhdGlvbiA9PSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9p
ZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKCht
X3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG9mZnNl
dC54KCkgOiBvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjp2
YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKikKIHsKICAgICBtX2NsaWVudC0+dmFsdWVD
aGFuZ2VkKHRoaXMpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJ
KHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEzICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgLy8gV2Vi
S2l0OjpXZWJTY3JvbGxiYXIgbWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihj
b25zdCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCBpbnQgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWUoaW50IHBvc2l0aW9uLCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pOwogICAgIHZpcnR1YWwg
dm9pZCBzZXREb2N1bWVudFNpemUoaW50IHNpemUpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcik7Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwog
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CiAgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhcios
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA2NjAy
OSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NjMsNyArNzYzLDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXli
b2FyZAogICAgIFNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5OwogICAgIGlmICgh
bWFwS2V5Q29kZUZvclNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3Jh
bnVsYXJpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHByb3BhZ2F0ZVNj
cm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gcHJv
cGFnYXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIEtleXByZXNz
KTsKIH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChpbnQga2V5Q29k
ZSwKQEAgLTgxNywxOSArODE3LDE3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVTZWxlY3RQb3B1
cCgpCiB9CiAKIGJvb2wgV2ViVmlld0ltcGw6OnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gc2Nyb2xsRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNj
cm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbFNvdXJjZSBzY3JvbGxTb3VyY2UpCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9Ci0g
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9s
bEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbEhhbmRsZWQgPSBmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNjcm9sbE92ZXJmbG93KHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHks
IHNjcm9sbFNvdXJjZSk7CiAgICAgRnJhbWUqIGN1cnJlbnRGcmFtZSA9IGZyYW1lOwogICAgIHdo
aWxlICghc2Nyb2xsSGFuZGxlZCAmJiBjdXJyZW50RnJhbWUpIHsKLSAgICAgICAgc2Nyb2xsSGFu
ZGxlZCA9IGN1cnJlbnRGcmFtZS0+dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxH
cmFudWxhcml0eSk7CisgICAgICAgIHNjcm9sbEhhbmRsZWQgPSBjdXJyZW50RnJhbWUtPnZpZXco
KS0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIHNjcm9sbFNvdXJj
ZSk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KTsKICAgICB9CiAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZWQ7CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFRyaWVzIHRvIHNjcm9sbCBhIGZyYW1lIG9yIGFueSBwYXJlbnQgb2YgYSBmcmFtZS4g
UmV0dXJucyB0cnVlIGlmIHRoZSB2aWV3CiAgICAgLy8gd2FzIHNjcm9sbGVkLgotICAgIGJvb2wg
cHJvcGFnYXRlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xs
R3JhbnVsYXJpdHkpOworICAgIGJvb2wgcHJvcGFnYXRlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERp
cmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHksIFdlYkNvcmU6OlNjcm9sbFNvdXJj
ZSk7CiAKICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCBhIHBvcHVwIHdhcyBvcGVuZWQvY2xvc2Vk
LgogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBvcHVwQ29u
dGFpbmVyKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2
ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93
aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTMgKzM5
NiwxNiBAQCBXZWJNb3VzZVdoZWVsRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6CiAKICAgICAv
LyBDb252ZXJ0IHdoZWVsIGRlbHRhIGFtb3VudCB0byBhIG51bWJlciBvZiBwaXhlbHMgdG8gc2Ny
b2xsLgogICAgIC8vCi0gICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVy
IGxpbmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2YgdGhlCi0gICAgLy8gY3VycmVudCBsaW5l
LCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaCB0
aGUKLSAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVudCBwYWdlcy4gIElFIDcgaXMgfjUwIHB4
L2xpbmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQotICAgIC8vIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkg
YnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIFNpbmNlIElFIDcgaGFzIGEgc21vb3RoaW5nCi0gICAg
Ly8gYWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xpZ2h0bHkg
bGFyZ2VyIHNjcm9sbCB2YWx1ZXMKLSAgICAvLyB3aXRob3V0IGZlZWxpbmcgamVya3kuICBIZXJl
IHdlIHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdAotICAgIC8vIHNjcm9s
bCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgorICAgIC8vIEhvdyBtYW55
IHBpeGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgRmlyZWZveCB1c2VzIHRoZSBoZWln
aHQgb2YKKyAgICAvLyB0aGUgY3VycmVudCBsaW5lLCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFu
Y2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaAorICAgIC8vIHRoZSBwYWdlIG9yIGdvIHRvIGRp
ZmZlcmVudCBwYWdlcy4gIElFIDggaXMgfjYwIHB4L2xpbmUsIGFsdGhvdWdoIHRoZQorICAgIC8v
IHZhbHVlIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkgYnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIEFs
c28sIElFIGRlZmF1bHRzCisgICAgLy8gdG8gc21vb3RoIHNjcm9sbGluZyB3aGlsZSBGaXJlZm94
IGRvZXNuJ3QsIHNvIGl0IGNhbiBnZXQgYXdheSB3aXRoCisgICAgLy8gc29tZXdoYXQgbGFyZ2Vy
IHNjcm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGFzIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAw
CisgICAgLy8gcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdCBzY3JvbGwgYW1vdW50IGlz
IHRocmVlIGxpbmVzIHBlciB3aGVlbAorICAgIC8vIHRpY2spLiAgRXZlbiB0aG91Z2ggd2UgaGF2
ZSBzbW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UKKyAgICAvLyBh
cyBJRSBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhl
ciB0aGFuIHlvdSB3YW50CisgICAgLy8gd2hpbGUgcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAg
ICAgd2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdo
ZWVsRGVsdGE7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNjYwMzApCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI1ICBQZXRlciBLYXN0
aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBh
IFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X3JlYWxfbW92ZV9jdXJzb3IpOgorCiAyMDEwLTA4LTI1ICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEuCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24g
NjYwMjkpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0NSw4ICsxMTQ1LDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19yZWFsX21vdgogICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSkpCi0g
ICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAg
ICBpZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgS2V5cHJlc3MpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9Cklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjYwMzApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA4LTI1ICBQZXRlciBLYXN0aW5nICA8cGthc3Rp
bmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1NgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVZpZXcubW06IFBsdW1iIHNj
cm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsT3Zl
cmZsb3dJbkRpcmVjdGlvbjpncmFudWxhcml0eTpzb3VyY2U6XSk6CisgICAgICAgICgtW1dlYkZy
YW1lVmlldyBfc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZy
YW1lVmlldyBfc2Nyb2xsVG9FbmRPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmll
dyBfcGFnZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfcGFnZUhvcml6
b250YWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5lVmVydGljYWxs
eTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5Ol0p
OgorCiAyMDEwLTA4LTI0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3
Lm1tCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTUxOCw3ICs1MTgsNyBAQCAtICh2b2lkKXZpZXdEaWRNb3Zl
VG9XaW5kb3cKICAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1dpbmRvd107CiB9CiAKLS0gKEJPT0wp
X3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3Jh
bnVsYXJpdHk6KFNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CistIChCT09MKV9zY3JvbGxP
dmVyZmxvd0luRGlyZWN0aW9uOihTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5
OihTY3JvbGxHcmFudWxhcml0eSlncmFudWxhcml0eSBzb3VyY2U6KFNjcm9sbFNvdXJjZSlzb3Vy
Y2UKIHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3
ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1bWVu
dFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCkBAIC01MjYsMTIgKzUy
NiwxMiBAQCAtIChCT09MKV9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvCiAgICAgRnJh
bWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxP
dmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2Up
OwogfQogCiAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQKIHsKLSAgICBpZiAo
W3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Ny
b2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9u
OlNjcm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgc291cmNlOktleXByZXNzXSkK
ICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQogICAg
ICAgICByZXR1cm4gTk87CkBAIC01NDEsNyArNTQxLDcgQEAgLSAoQk9PTClfc2Nyb2xsVG9CZWdp
bm5pbmdPZkRvY3VtZW50CiAKIC0gKEJPT0wpX3Njcm9sbFRvRW5kT2ZEb2N1bWVudAogewotICAg
IGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxEb3duIGdyYW51bGFy
aXR5OlNjcm9sbEJ5RG9jdW1lbnRdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRp
cmVjdGlvbjpTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgc291cmNlOktl
eXByZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFi
bGVdKQogICAgICAgICByZXR1cm4gTk87CkBAIC02MTcsNyArNjE3LDcgQEAgLSAoZmxvYXQpX2hv
cml6b250YWxQYWdlU2Nyb2xsRGlzdGFuY2UKIAogLSAoQk9PTClfcGFnZVZlcnRpY2FsbHk6KEJP
T0wpdXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBT
Y3JvbGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlXSkKKyAgICBpZiAo
W3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERv
d24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJl
dHVybiBZRVM7CiAgICAgCiAgICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkKQEAgLTYyOSw3
ICs2MjksNyBAQCAtIChCT09MKV9wYWdlVmVydGljYWxseTooQk9PTCl1cAogCiAtIChCT09MKV9w
YWdlSG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJm
bG93SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0
eTpTY3JvbGxCeVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlv
bjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFn
ZSBzb3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2Vs
ZiBfaXNTY3JvbGxhYmxlXSkKQEAgLTY0MSw3ICs2NDEsNyBAQCAtIChCT09MKV9wYWdlSG9yaXpv
bnRhbGx5OihCT09MKWxlZnQKIAogLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wp
dXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3Jv
bGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkKKyAgICBpZiAoW3Nl
bGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24g
Z3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVy
biBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQpAQCAtNjUzLDcgKzY1Myw3
IEBAIC0gKEJPT0wpX3Njcm9sbExpbmVWZXJ0aWNhbGx5OihCT09MKXVwCiAKIC0gKEJPT0wpX3Nj
cm9sbExpbmVIb3Jpem9udGFsbHk6KEJPT0wpbGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xs
T3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51
bGFyaXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGly
ZWN0aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xs
QnlMaW5lIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAo
IVtzZWxmIF9pc1Njcm9sbGFibGVdKQpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjAzMCkKKysrIFdlYktpdC9x
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0yNSAg
UGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3
b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIEFwaS9xd2VicGFn
ZS5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChRV2ViUGFnZVBy
aXZhdGU6OmhhbmRsZVNjcm9sbGluZyk6CisKIDIwMTAtMDgtMjUgIExlbyBZYW5nICA8bGVvLnlh
bmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODIsNyArMTM4Miw3IEBAIGJvb2wg
UVdlYlBhZ2VQcml2YXRlOjpoYW5kbGVTY3JvbGxpbmcoUUsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNj
cm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKTsKIH0KIAog
I2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQpJbmRleDogV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDY2MDMwKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9u
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYK
KworICAgICAgICAqIFdlYlZpZXcuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgor
ICAgICAgICAoV2ViVmlldzo6a2V5RG93bik6CisKIDIwMTAtMDgtMjQgIEFkYSBDaGFuICA8YWRh
Y2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgRmFsa2VuYnVyZy4K
SW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTM3LDcgKzE5MzcsNyBAQCBib29sIFdlYlZpZXc6OmtleURvd24o
V1BBUkFNIHZpcnR1YWxLZXlDCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0
aW9uLCBncmFudWxhcml0eSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Ny
b2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpOwogfQogCiBi
b29sIFdlYlZpZXc6OmtleVByZXNzKFdQQVJBTSBjaGFyQ29kZSwgTFBBUkFNIGtleURhdGEsIGJv
b2wgc3lzdGVtS2V5RG93bikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65471</attachid>
            <date>2010-08-25 14:06:55 -0700</date>
            <delta_ts>2010-08-26 13:22:13 -0700</delta_ts>
            <desc>patch v4.3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>100823</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNSAgWGFuIExvcGV6ICA8
eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29u
LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjAyOSkK
KysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDggQEAgaWYgYnVpbGRfcG9y
dCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAgICAg
ICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAgICAn
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAg
ICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0IGNy
YXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNlIHRo
ZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAgICAg
ICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTApLgpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2MDMwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMDEgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291
cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEJ5VW5pdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bG9jYWxab29tRm9yUmVuZGVyZXIpOiBGaXggc3R5bGUgZ3VpZGUgdmlvbGF0
aW9uLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1h
bmQgc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OnNjcm9sbFJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHBhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmNwcDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8g
YW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9w
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
OjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JXaW46OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JXaW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldp
bjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaDogQWRkIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3Vy
Y2VzLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4gIEZpeCBjb21waWxhdGlv
biB3YXJuaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBj
b21tYW5kIHNvdXJjZXMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDogQWxsb3cg
U2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYgcHJlc2VudC4gIFBsdW1iIHNjcm9s
bCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW92ZVRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOiBBbGxvdyBTY3JvbGxBbmltYXRvciB0byBo
YW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6aXNTY3JvbGxiYXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOiBBZGQgaG9va3MgZm9yIFNjcm9sbEFuaW1hdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5k
IHNvdXJjZXMuICBVc2Ugc2Nyb2xsKCkgaW4gcHJlZmVyZW5jZSB0byBzZXRWYWx1ZSgpLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250ZXh0TWVudSk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVXaW46OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51
V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudVdpbjo6d25kUHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5oOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogSW1wbGVt
ZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4g
IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogSW1wbGVtZW50IG5ldyBT
Y3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IEltcGxlbWVudCBuZXcgU2Ny
b2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExp
c3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLiAgUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Lmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisKIDIwMTAtMDgtMjUgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUwLDYgKzE5NTAsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlH
ZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBAIC0yNTcxLDYgKzI1NzMsOCBAQCBlbmRpZgogCiBp
ZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvcldpbi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzEw
OSw2ICszMTA5LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU2Nyb2xsVHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuaCcsCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw4ICsxMjIyLDEwIEBACiAgICAgICAgICAg
J3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAog
ICAgICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKLSAgICAgICAgICAgIFsnaW5j
bHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRl
JywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScs
ICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9T
a2lhRm9udFdpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJl
bmN5V2luXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAg
ICAgICAgICAgICAjIE1hdGNoIFNhZmFyaSBhbmQgTW96aWxsYSBvbiBXaW5kb3dzLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0
MjU3LDYgKzI0MjU3LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9s
bEFuaW1hdG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxB
bmltYXRvcldpbi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTExMiw2ICs1MTEyLDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAw
NTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAv
KiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNj
cm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87
IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJB
RTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlw
dENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDk0Miw2
ICsxMDk0NCw4IEBACiAJCUM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFB
MjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Ny
b2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5p
bWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAw
QzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQx
MjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg0LDYgKzE2Njg4LDggQEAKIAkJCQkxQzYzQTI0
NjBGNzE2NDY2MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3
N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3
RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlDQTNCRjY3QjEwRDk5QkFF
MDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAorCQkJCUNBM0JGNjdEMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4
MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyog
U2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNj
cm9sbGJhclRoZW1lLmggKi8sCkBAIC0xOTgwMCw2ICsxOTgwNiw3IEBACiAJCQkJNDE2RjQ1RjAw
RUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0
Q0MwRTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxi
YXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMzNSw2ICsyMjM0Miw3IEBA
CiAJCQkJOUY3MjMwNTAxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxMjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8q
IFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAw
MDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRUY4NjlGMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnNjcm9sbEJ5VW5pdHMoaW50IHVuaXRzLCBTCiAgICAgICAgICAgICAgICAgZGlyZWN0
aW9uID0gU2Nyb2xsVXA7CiAgICAgICAgICAgICAgICAgdW5pdHMgPSAtdW5pdHM7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0b1JlbmRlckJveChyZW5kKS0+bGF5ZXIoKS0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIHVuaXRzKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQm94KHJl
bmQpLT5sYXllcigpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgUHJvZ3JhbW1hdGlj
LCB1bml0cyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzMsOCArMjczLDggQEAgc3RhdGlj
IGZsb2F0IGxvY2FsWm9vbUZvclJlbmRlcmVyKFJlbmRlcgogICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXMgdGhlIHdyb25nIHRoaW5nIGlmIHR3byBvcHBvc2luZyB6b29tcyBhcmUgaW4gZWZmZWN0IGFu
ZCBjYW5jZWxlZCBlYWNoCiAgICAgLy8gb3RoZXIgb3V0LCBidXQgdGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgd2UnZCBoYXZlIHRvIGNyYXdsIHVwIHRoZSB3aG9sZSByZW5kZXIgdHJlZSBldmVyeQog
ICAgIC8vIHRpbWUgKG9yIHN0b3JlIGFuIGFkZGl0aW9uYWwgYml0IGluIHRoZSBSZW5kZXJTdHls
ZSB0byBpbmRpY2F0ZSB0aGF0IGEgem9vbSB3YXMgc3BlY2lmaWVkKS4KLSAgICBmbG9hdCB6b29t
RmFjdG9yID0gMS4wZjsKLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSAhPSAxLjBmKSB7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDE7CisgICAgaWYgKHJlbmRlcmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgIT0gMSkgewogICAgICAgICAvLyBOZWVkIHRvIGZp
bmQgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIFJlbmRlck9iamVjdCB0aGF0IHNldCB1cAogICAgICAg
ICAvLyBhIGRpZmZlcmluZyB6b29tLCBhbmQgdGhlbiB3ZSBkaXZpZGUgb3VyIHJlc3VsdCBieSBp
dCB0byBlbGltaW5hdGUgdGhlIHpvb20uCiAgICAgICAgIFJlbmRlck9iamVjdCogcHJldiA9IHJl
bmRlcmVyOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMyArMTMw
LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHQKICAgICBmbG9h
dCBhYnNEZWx0YSA9IGRlbHRhID4gMCA/IGRlbHRhIDogLWRlbHRhOwogICAgIAogICAgIGlmIChn
cmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQYWdlKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5n
Qm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3NpdGl2ZURpcmVj
dGlvbiwgU2Nyb2xsQnlQYWdlLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBXaGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsK
IAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpMaW5lKQotICAgICAgICByZXR1
cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJlY3Rpb24gOiBw
b3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBhYnNEZWx0YSwgc3RvcE5vZGUpOworICAg
ICAgICByZXR1cm4gZW5jbG9zaW5nQm94LT5zY3JvbGwoZGVsdGEgPCAwID8gbmVnYXRpdmVEaXJl
Y3Rpb24gOiBwb3NpdGl2ZURpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzRGVsdGEs
IHN0b3BOb2RlKTsKIAogICAgIGlmIChncmFudWxhcml0eSA9PSBXaGVlbEV2ZW50OjpQaXhlbCkK
LSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0JveC0+c2Nyb2xsKGRlbHRhIDwgMCA/IG5lZ2F0aXZl
RGlyZWN0aW9uIDogcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbEJ5UGl4ZWwsIGFic0RlbHRhLCBz
dG9wTm9kZSk7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdCb3gtPnNjcm9sbChkZWx0YSA8IDAg
PyBuZWdhdGl2ZURpcmVjdGlvbiA6IHBvc2l0aXZlRGlyZWN0aW9uLCBTY3JvbGxCeVBpeGVsLCBX
aGVlbCwgYWJzRGVsdGEsIHN0b3BOb2RlKTsKICAgICAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtOTc1LDcgKzk3NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZXRNb3VzZVByZXNzTm9k
ZShQYXMKICAgICBtX21vdXNlUHJlc3NOb2RlID0gbm9kZTsKIH0KIAotYm9vbCBFdmVudEhhbmRs
ZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUpCitib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIE5vZGUqIHN0YXJ0aW5nTm9k
ZSkKIHsKICAgICBOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOwogCkBAIC05ODcsNyArOTg3LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIAogICAgIGlm
IChub2RlKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmIChyICYmICFyLT5pc0xpc3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKSB7CisgICAgICAgIGlmIChyICYmICFyLT5pc0xp
c3RCb3goKSAmJiByLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIHNvdXJjZSkpIHsKICAgICAgICAgICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05OTYsMTcgKzk5NiwxNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsT3ZlcmZsb3coU2Nyb2xsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE5vZGUqIHN0
YXJ0aW5nTm9kZSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xs
U291cmNlIHNvdXJjZSwgTm9kZSogc3RhcnRpbmdOb2RlKQogewogICAgIC8vIFRoZSBsYXlvdXQg
bmVlZHMgdG8gYmUgdXAgdG8gZGF0ZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNjcm9sbC4gV2Ug
bWF5IGJlCiAgICAgLy8gaGVyZSBiZWNhdXNlIG9mIGFuIG9uTG9hZCBldmVudCwgaW4gd2hpY2gg
Y2FzZSB0aGUgZmluYWwgbGF5b3V0IGhhc24ndCBiZWVuIHBlcmZvcm1lZCB5ZXQuCiAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
Ci0gICAgYm9vbCBoYW5kbGVkID0gc2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgc3RhcnRpbmdOb2RlKTsKKyAgICBib29sIGhhbmRsZWQgPSBzY3JvbGxPdmVyZmxvdyhkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIHN0YXJ0aW5nTm9kZSk7CiAgICAgaWYgKCFoYW5k
bGVkKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7CiAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgICAgICAgICBo
YW5kbGVkID0gdmlldyA/IHZpZXctPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSA6IGZh
bHNlOworICAgICAgICAgICAgaGFuZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgc291cmNlKSA6IGZhbHNlOwogICAgICAgICAgICAgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgfSB3aGlsZSAoIWhhbmRsZWQgJiYgZnJhbWUp
OwogICAgICB9CkBAIC0yNjkzLDcgKzI2OTMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dFNwYWNlRXZlbnRIYW5kCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBldmVudC0+c2hpZnRLZXkoKSA/IFNjcm9sbFVwIDogU2Nyb2xsRG93bjsKLSAgICBpZiAo
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBTY3JvbGxCeVBhZ2UpKSB7CisgICAgaWYgKHNjcm9s
bE92ZXJmbG93KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpIHsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
NzAyLDcgKzI3MDIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFNwYWNlRXZlbnRIYW5k
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodmlldy0+c2Nyb2xs
KGRpcmVjdGlvbiwgU2Nyb2xsQnlQYWdlKSkKKyAgICBpZiAodmlldy0+c2Nyb2xsKGRpcmVjdGlv
biwgU2Nyb2xsQnlQYWdlLCBLZXlwcmVzcykpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiw5
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5v
ZGUqKTsKIAotICAgIGJvb2wgc2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CisgICAgYm9vbCBzY3JvbGxPdmVy
ZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291
cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKIAotICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2Rl
ID0gMCk7CisgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBOb2RlKiBzdGFydGluZ05vZGUgPSAw
KTsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgYm9vbCBzaG91bGREcmFnQXV0b05v
ZGUoTm9kZSosIGNvbnN0IEludFBvaW50JikgY29uc3Q7IC8vIC13ZWJraXQtdXNlci1kcmFnID09
IGF1dG8KSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNjYwMjkp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NDIsNyArNDQyLDkgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiB9CiAK
IC8vIEluIGEgYm90dG9tLXVwIHdheSwgdGhpcyBtZXRob2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFt
ZXwgaW4gYSBnaXZlbiBkaXJlY3Rpb24KLS8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUg
ZnJhbWUgdHJlZSBoaWVyYXJjaHkgaW4gY2FzZSBpdCBkb2VzIG5vdCBzdWNjZWVkLgorLy8gfGRp
cmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFtZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0
IGRvZXMgbm90CisvLyBzdWNjZWVkLgorLy8gTk9URTogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRo
ZSBjYWxsZXIgaXMgcmVzcG9uZGluZyB0byBhIGtleWJvYXJkIGV2ZW50LgogYm9vbCBzY3JvbGxJ
bkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
Rm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKIHsKICAgICBpZiAoIWZyYW1lKQpAQCAtNDY4LDkg
KzQ3MCw5IEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2MKICAgICB9
CiAKICAgICBpZiAoIWNhbmRpZGF0ZS5pc051bGwoKSAmJiBpc1Njcm9sbGFibGVDb250YWluZXJO
b2RlKGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KSkKLSAgICAgICAgcmV0dXJuIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxCeUxpbmUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KTsKKyAgICAgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxCeUxpbmUsIEtleXByZXNzLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xs
YWJsZUJveCk7CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1
cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSk7CisgICAgcmV0dXJuIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxCeUxpbmUsIEtleXByZXNzKTsKIH0KIAogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50KiBl
bGVtZW50KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3IuaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgZmxvYXQq
IGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9j
dXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4
KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKKyAgICBp
ZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmN1
cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykK
K3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
bV9jdXJyZW50UG9zWCA9IHBvczsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFBvc1kgPSBw
b3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyQ2xpZW50OworCitjbGFzcyBTY3JvbGxBbmltYXRv
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBjcmVhdGUoU2Nyb2xsYmFy
Q2xpZW50Kik7CisKKyAgICBTY3JvbGxBbmltYXRvcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkg
OiBtX2NsaWVudChjbGllbnQpIHsgfQorICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yKCkgeyB9
CisKKyAgICAvLyBDb21wdXRlcyBhIHNjcm9sbCBkZXN0aW5hdGlvbiBmb3IgdGhlIGdpdmVuIHBh
cmFtZXRlcnMuICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gYWxyZWFkeSBhdCB0aGUgZGVzdGlu
YXRpb24uICBPdGhlcndpc2UsIHN0YXJ0cyBzY3JvbGxpbmcgdG93YXJkcyB0aGUKKyAgICAvLyBk
ZXN0aW5hdGlvbiBhbmQgcmV0dXJucyB0cnVlLiAgU2Nyb2xsaW5nIG1heSBiZSBpbW1lZGlhdGUg
b3IgYW5pbWF0ZWQuCisgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24gYWx3YXlz
IHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgorICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3Vy
Y2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworCisgICAgLy8gU3RvcHMgYW55IGFu
aW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmlt
YXRvcgorICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhpcyBkb2Vz
IG5vdCBjYXVzZSBhIGNhbGxiYWNrIHRvIHRoZQorICAgIC8vIFNjcm9sbGJhckNsaWVudC4KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBmbG9hdCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJDbGllbnQq
IG1fY2xpZW50OworICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEg
RmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAv
LyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCit9OworCisjaWYgIU9TKFdJTkRPV1MpCitTY3Jv
bGxBbmltYXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yKGNsaWVudCk7Cit9CisjZW5kaWYK
KworfQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dG9yV2luLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK1Njcm9sbEFuaW1h
dG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQorewor
ICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3JXaW4oY2xpZW50KTsKK30KKworY29uc3QgZG91
YmxlIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKKworU2Ny
b2xsQW5pbWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldp
biogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcykKKyAgICA6IG1fY3VycmVudFBvcyhjdXJyZW50
UG9zKQorICAgICwgbV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJlbnRWZWxvY2l0eSgwKQor
ICAgICwgbV9kZXNpcmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFuaW1hdGlvblRpbWUoMCkK
KyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1h
dGlvblRpbWVyRmlyZWQpCit7Cit9CisKKworU2Nyb2xsQW5pbWF0b3JXaW46OlNjcm9sbEFuaW1h
dG9yV2luKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQorICAgIDogU2Nyb2xsQW5pbWF0b3IoY2xp
ZW50KQorICAgICwgbV9ob3Jpem9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAgICAs
IG1fdmVydGljYWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxBbmlt
YXRvcldpbjo6flNjcm9sbEFuaW1hdG9yV2luKCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJ
Zk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVk
ZWQoJm1fdmVydGljYWxEYXRhKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikKK3sKKyAgICAvLyBEb24ndCBhbmltYXRlIGp1bXBpbmcgdG8gdGhlIGJlZ2lubmluZyBvciBl
bmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3Vt
ZW50KQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwg
Z3JhbnVsYXJpdHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICAvLyBUaGlzIGlz
IGFuIGFuaW1hdGFibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVsdGEuCisgICAg
UGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8g
Jm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisgICAgZmxvYXQgbmV3UG9zID0g
c3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkp
LCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IG5ld1BvczsKKworICAgIC8v
IENhbGN1bGF0ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAgIGlmICgqZGF0YS0+bV9jdXJy
ZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZsb2F0IGFuaW1hdGlvblN0ZXA7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0YS0+
bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIGlmICgoc291cmNlICE9IEtleXByZXNz
KSAmJiAoc291cmNlICE9IFdoZWVsKSkgeworICAgICAgICAvLyBXaGVuIGF1dG9zY3JvbGxpbmcs
IHRoZSBzY3JvbGxiYXIncyBhdXRvc2Nyb2xsIHRpbWVyIHdpbGwgY2FsbCB1cyB0bworICAgICAg
ICAvLyBpbmNyZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8IGV2ZXJ5CisgICAg
ICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHNlY29uZHMuICBJZiB3ZQorICAgICAgICAvLyBzZXQgdGhlIGRlc2lyZWQgdmVsb2NpdHkg
dG8gZXhhY3RseSB0aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbAorICAgICAgICAvLyBu
ZWl0aGVyIHJhY2UgYWhlYWQgKGFuZCB0aGVuIGhhdmUgdG8gc2xvdyBkb3duKSBub3IgaW5jcmVh
c2luZ2x5IGxhZworICAgICAgICAvLyBiZWhpbmQsIGJ1dCB3aWxsIGJlIHNtb290aCBhbmQgc3lu
Y2hyb25pemVkLgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0
aGUgYWNjZWxlcmF0aW9uIHBlcmlvZCwgdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgICAgLy8g
d2lsbCBsYWcgdGhlIGRlc2lyZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50IGFtb3VudCAoc2Vl
IGNvbW1lbnRzIG9uCisgICAgICAgIC8vIGFuaW1hdGVTY3JvbGwoKSk7IHRoZSBleGFjdCBhbW91
bnQgaXMgZ2l2ZW4gYnkKKyAgICAgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQp
CisgICAgICAgIC8vIFdoZXJlCisgICAgICAgIC8vICAgdiA9IFRoZSBzdGVhZHktc3RhdGUgdmVs
b2NpdHksCisgICAgICAgIC8vICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAgICAgIC8vICAgdEEgPSBhY2NlbGVy
YXRpb25UaW1lKCkKKyAgICAgICAgLy8gICB0RCA9IFRoZSB0aW1lIHdlIHByZXRlbmQgaGFzIGFs
cmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRpbmcgdG8KKyAgICAgICAgLy8gICAgICAgIHNjcm9sbCwg
fGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbGFnIHBy
b3ZpZGVzIHNvbWUgYnVmZmVyIGFnYWluc3QgdGltZXIgaml0dGVyIHNvIHdlJ3JlIGxlc3MKKyAg
ICAgICAgLy8gbGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhbmQgc3RvcCAoYW5k
IHRodXMgaGF2ZSB0bworICAgICAgICAvLyByZS1hY2NlbGVyYXRlLCBjYXVzaW5nIGEgdmlzaWJs
ZSBoaXRjaCkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQKKyAgICAgICAgLy8gYXV0b3Njcm9s
bCBpbmNyZW1lbnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBzdGVwOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEZvciBrZXlib2FyZCBhbmQgd2hlZWwgc2Nyb2xscywgd2UgZG9uJ3Qga25v
dyB3aGVuIHRoZSBuZXh0IGluY3JlbWVudAorICAgICAgICAvLyB3aWxsIGJlIHJlcXVlc3RlZC4g
IElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIKKyAgICAgICAg
Ly8gYXdheSBmcm9tIHRoZSB0YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBrZXlib2Fy
ZC93aGVlbCBldmVudHMKKyAgICAgICAgLy8gdGhhdCBjb21lIGZhc3RlciB0aGFuIHRoZSBhdXRv
c2Nyb2xsIGRlbGF5LCB3ZSdsbCBhc3ltcHRvdGljYWxseQorICAgICAgICAvLyBhcHByb2FjaCB0
aGUgdmVsb2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2Vy
J3MKKyAgICAgICAgLy8gYWN0aW9uczsgZm9yIGV2ZW50cyB0aGF0IGNvbWUgc2xvd2VyLCB3ZSds
bCBzY3JvbGwgb25lIGluY3JlbWVudCBhbmQKKyAgICAgICAgLy8gdGhlbiBwYXVzZSB1bnRpbCB0
aGUgbmV4dCBldmVudCBmaXJlcy4gIFRoaXMgbGF0dGVyIGJlaGF2aW9yIG1lYW5zCisgICAgICAg
IC8vIHRoYXQgc2luZ2xlIGtleXByZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwgaGF2ZSB0aGUg
c2FtZSBhcHBlYXJhbmNlCisgICAgICAgIC8vIGFzIHNpbmdsZSBwcmVzc2VzIG9mIGEgc2Nyb2xs
YmFyIHBhcnQuCisgICAgICAgIGFuaW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gKmRhdGEtPm1f
Y3VycmVudFBvcyk7CisgICAgICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdo
ZWVsIGNvbnRpbnVhbGx5IHNwdW4pLCB0aGVuIG9uY2Ugd2UKKyAgICAgICAgLy8gaGF2ZSByZWFj
aGVkIGEgdmVsb2NpdHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUK
KyAgICAgICAgLy8gbGlrZWx5IHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhdCBhcm91bmQg
dGhlIHNhbWUgdGltZSB3ZSdkCisgICAgICAgIC8vIGV4cGVjdCB0aGUgbmV4dCBpbmNyZW1lbnQg
dG8gb2NjdXIgLS0gYmFkIGJlY2F1c2UgaXQgbGVhZHMgdG8KKyAgICAgICAgLy8gaGl0Y2hpbmcg
YXMgZGVzY3JpYmVkIGFib3ZlLiAgU28gd2UgdHJpbSB0aGUgdmVsb2NpdHkgc2xpZ2h0bHkgc28K
KyAgICAgICAgLy8gdGhhdCB3ZSBoYXZlIGEgc21hbGwgYnVmZmVyLCB0byBkZWNyZWFzZSB0aGUg
bGlrZWxpaG9vZCBvZiB0aGlzCisgICAgICAgIC8vIG9jY3VycmluZy4gIE5vdGUgdGhhdCB3ZSB3
b24ndCBmYWxsIHN0ZWFkaWx5IGZ1cnRoZXIgYmVoaW5kIGhlcmUsCisgICAgICAgIC8vIGJlY2F1
c2UgaW4gc3Vic2VxdWVudCB1cGRhdGVzIHdlJ2xsIGJlIGNhbGN1bGF0aW5nIG91ciB2ZWxvY2l0
eSBiYXNlZAorICAgICAgICAvLyBvbiBhIGxhcmdlciBkZXNpcmVkIHN0ZXAgLS0gc28gdGhlIHBy
YWN0aWNhbCBlZmZlY3QgaXMgdGhhdCB3ZSBsYWcgYnkKKyAgICAgICAgLy8gYSBzbWFsbCwgY29u
c3RhbnQgYW1vdW50IGRlcGVuZGluZyBvbiB0aGUgdHJpbSB2YWx1ZSBhbmQgdGhlIHJhdGUgYXQK
KyAgICAgICAgLy8gd2hpY2ggaW5jcmVtZW50cyBvY2N1ciBjb21wYXJlZCB0byB0aGUgYXV0b3Nj
cm9sbCB0aW1lciBkZWxheS4gIFRoZQorICAgICAgICAvLyBleGFjdCBhbW91bnQgaXMgZ2l2ZW4g
YnkKKyAgICAgICAgLy8gICBsYWcgPSB8c3RlcHwgKiAoKHIgLyBrKSAtIDEpCisgICAgICAgIC8v
IFdoZXJlCisgICAgICAgIC8vICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBl
YXQgZGVsYXksCisgICAgICAgIC8vICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgp
LT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpLCB0byB0aGUKKyAgICAgICAgLy8gICAgICAga2V5L3do
ZWVsIHJlcGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBmYXN0ZXIpCisgICAg
ICAgIC8vICAgayA9IFRoZSB2ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAg
ICAgIC8vCisgICAgICAgIC8vIElmIHdlIHdhbnQgdG8gYWN0IGFzIG11Y2ggbGlrZSBhdXRvc2Ny
b2xsaW5nIGFzIHBvc3NpYmxlLCB0aGVuIHdlCisgICAgICAgIC8vIGNob29zZSBrIHN1Y2ggdGhh
dCBsYWcgaXMgdGhlIHNhbWUgYXMgYWJvdmUgd2hlbiByID0gMS4gIFRoZSBlcXVhdGlvbgorICAg
ICAgICAvLyBiZWxvdyBkb2VzIHRoaXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBkb24ndCBkbyB0aGlzIHdoZW4gd2UncmUgbm90IGFscmVhZHkgYW5pbWF0aW5nLCBpLmUu
CisgICAgICAgIC8vIGdldHRpbmcgcmVwZWF0ZWQgZXZlbnRzLiAgSWYgdGhlIHVzZXIgc2ltcGx5
IHByZXNzZWQgYSBrZXkgb25jZSwgd2UKKyAgICAgICAgLy8gd2FudCB0byBhbmltYXRlIGF0IG5v
cm1hbCBzcGVlZCBsaWtlIHdlIHdvdWxkIGFib3ZlLiAgSWYgd2UnbGwgYmUKKyAgICAgICAgLy8g
Z2V0dGluZyBtb3JlIGV2ZW50cyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIHRyaW1taW5nIGJlbG93
LCBvdXIKKyAgICAgICAgLy8gaW5pdGlhbCBhY2NlbGVyYXRpb24gcGVyaW9kIHdpbGwgZ2l2ZSB1
cyBlbm91Z2ggdGltZSBmb3IgdGhlbSB0bworICAgICAgICAvLyBhcnJpdmUuCisgICAgICAgIGlm
IChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICAgICAgYW5pbWF0aW9uU3RlcCAvPSAoMi4wIC0g
KCgxLjAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKSkgKiAoMC41ICogYWNjZWxlcmF0aW9uVGltZSgpICsgYW5pbWF0aW9uVGltZXJEZWxheSkp
KTsKKyAgICB9CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8g
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisK
KyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcsIHN0YXJ0LgorICAgIGlmICgh
YWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9sbChkYXRhKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBw
b3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YTsKKyAgICBz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICAqZGF0YS0+bV9jdXJyZW50UG9z
ID0gcG9zOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2N1cnJl
bnRWZWxvY2l0eSA9IDA7CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworfQorCisv
LyBzdGF0aWMKK2RvdWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YWNjZWxlcmF0aW9uVGltZSgpCit7
CisgICAgLy8gV2UgZWxlY3QgdG8gdXNlIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5h
dXRvc2Nyb2xsVGltZXJEZWxheSgpIGFzCisgICAgLy8gdGhlIGxlbmd0aCBvZiB0aW1lIHdlJ2xs
IHRha2UgdG8gYWNjZWxlcmF0ZSBmcm9tIDAgdG8gb3VyIHRhcmdldAorICAgIC8vIHZlbG9jaXR5
LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUgd291bGQgcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNl
ZAorICAgIC8vIGFjY2VsZXJhdGlvbiBlZmZlY3QuCisgICAgcmV0dXJuIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpOworfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2lu
PiogdGltZXIpCit7CisgICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9yaXpvbnRhbERh
dGEubV9hbmltYXRpb25UaW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0
YSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKFBlckF4aXNEYXRhKiBkYXRhKQoreworICAgIGlmIChkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhKiBkYXRh
KQoreworICAgIC8vIE5vdGUgb24gc21vb3RoIHNjcm9sbGluZyBwZXJmIHZlcnN1cyBub24tc21v
b3RoIHNjcm9sbGluZyBwZXJmOgorICAgIC8vIFRoZSB0b3RhbCB0aW1lIHRvIHBlcmZvcm0gYSBj
b21wbGV0ZSBzY3JvbGwgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIHQgPSB0MCArIDAuNXRBIC0gdEQg
KyB0UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBlcmZvcm0gdGhl
IHNjcm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0gVGhlIGFjY2Vs
ZXJhdGlvbiB0aW1lLAorICAgIC8vICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSAoc2VlIGJlbG93KQorICAgIC8vICAgdEQgPSB8YW5p
bWF0aW9uVGltZXJEZWxheXwKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAgLy8gICAgICAgIHNpbmds
ZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVlIHRvIGNhbGxpbmcKKyAg
ICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBmb3Igc2ltcGxlIHBhZ2Vz
LCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMpLgorICAgIC8vCisgICAg
Ly8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhlIHRvdGFsIGxhZyAoYXMg
dXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgbmVnbGlnaWJsZSBmb3Igc2ltcGxlIHBhZ2Vz
IGFuZCByb3VnaGx5IHRTIGZvciBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dAorICAgIC8vIGtub3dp
bmcgaW4gYWR2YW5jZSBob3cgbGFyZ2UgdFMgaXMgaXQncyBoYXJkIHRvIGRvIGJldHRlciB0aGFu
IHRoaXMuCisgICAgLy8gUGVyaGFwcyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMg
dmFsdWVzIGFuZCBmb3J3YXJkLWNvbXBlbnNhdGUuCisKKworICAgIC8vIFdlIHdhbnQgdG8gdXBk
YXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIHRpbWUgaXQncyBiZWVuIHNpbmNl
CisgICAgLy8gb3VyIGxhc3QgdXBkYXRlLiAgVGhpcyBtYXkgYmUgbG9uZ2VyIHRoYW4gb3VyIGlk
ZWFsIHRpbWUsIGVzcGVjaWFsbHkgaWYKKyAgICAvLyB0aGUgcGFnZSBpcyBjb21wbGV4IG9yIHRo
ZSBzeXN0ZW0gaXMgc2xvdy4KKyAgICAvLworICAgIC8vIFRvIGF2b2lkIGZlZWxpbmcgbGFnZ3ks
IGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xsaW5nIHdlIHByZXRlbmQKKyAgICAv
LyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUgaWRlYWwgaW50ZXJ2YWwsIHNvIHRo
YXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29tZSBkaXN0YW5jZSBpbW1lZGlhdGVs
eS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSkgOiBh
bmltYXRpb25UaW1lckRlbGF5OworCisgICAgLy8gRmlndXJlIG91dCBob3cgZmFyIHdlJ3ZlIGFj
dHVhbGx5IHRyYXZlbGVkIGFuZCB1cGRhdGUgb3VyIGN1cnJlbnQKKyAgICAvLyB2ZWxvY2l0eS4K
KyAgICBmbG9hdCBkaXN0YW5jZVRyYXZlbGVkOworICAgIGlmIChkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSA8IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgIC8vIFdlIGFjY2VsZXJh
dGUgYXQgYSBjb25zdGFudCByYXRlIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHZlbG9jaXR5
LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2Np
dHkgLyBhY2NlbGVyYXRpb25UaW1lKCk7CisKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGV0aGVy
IGNvbnRhbnQgYWNjZWxlcmF0aW9uIGhhcyBjYXVzZWQgdXMgdG8gcmVhY2ggb3VyCisgICAgICAg
IC8vIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgcG90ZW50aWFsVmVsb2NpdHlDaGFu
Z2UgPSBhY2NlbGVyYXRpb25SYXRlICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICBmbG9h
dCBwb3RlbnRpYWxOZXdWZWxvY2l0eSA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsgcG90ZW50
aWFsVmVsb2NpdHlDaGFuZ2U7CisgICAgICAgIGlmIChwb3RlbnRpYWxOZXdWZWxvY2l0eSA+IGRh
dGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSB0
YXJnZXQgdmVsb2NpdHkgYXQgc29tZSBwb2ludCBiZXR3ZWVuIG91ciBsYXN0CisgICAgICAgICAg
ICAvLyB1cGRhdGUgYW5kIG5vdy4gIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBjYW4gYmUgY2FsY3Vs
YXRlZCBpbiB0d28KKyAgICAgICAgICAgIC8vIHBpZWNlczogdGhlIGRpc3RhbmNlIHRyYXZlbGVk
IHdoaWxlIGFjY2VsZXJhdGluZywgYW5kIHRoZQorICAgICAgICAgICAgLy8gZGlzdGFuY2UgdHJh
dmVsZWQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgICAgIGZs
b2F0IGFjdHVhbFZlbG9jaXR5Q2hhbmdlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgLSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eTsKKyAgICAgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvbkludGVy
dmFsID0gYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyBhY2NlbGVyYXRpb25SYXRlOworICAgICAgICAg
ICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIHVuZGVyIGNvbnN0YW50IGFjY2VsZXJhdGlvbiBp
cyB0aGUgYXJlYQorICAgICAgICAgICAgLy8gdW5kZXIgYSBsaW5lIHNlZ21lbnQgd2l0aCBhIGNv
bnN0YW50IHJpc2luZyBzbG9wZS4gIEJyZWFrIHRoaXMKKyAgICAgICAgICAgIC8vIGludG8gYSB0
cmlhbmd1bGFyIHBvcnRpb24gYXRvcCBhIHJlY3Rhbmd1bGFyIHBvcnRpb24gYW5kIHN1bS4KKyAg
ICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsg
KGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogYWNjZWxlcmF0aW9uSW50ZXJ2YWwpOworICAg
ICAgICAgICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGF0IHRoZSB0YXJnZXQgdmVsb2NpdHkg
aXMgc2ltcGx5CisgICAgICAgICAgICAvLyAodGFyZ2V0IHZlbG9jaXR5KSAqIChyZW1haW5pbmcg
dGltZSBhZnRlciBhY2NlbGVyYXRpbmcpLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCAr
PSAoZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgKiAobGFzdFNjcm9sbEludGVydmFsIC0gYWNjZWxl
cmF0aW9uSW50ZXJ2YWwpKTsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0g
ZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBDb25zdGFudCBhY2NlbGVyYXRpb24gdGhyb3VnaCB0aGUgZW50aXJlIHRpbWUgaW50ZXJ2YWwu
CisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5
ICsgKHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogbGFzdFNjcm9sbEludGVydmFsOwor
ICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBwb3RlbnRpYWxOZXdWZWxvY2l0
eTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVh
Y2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5LCBzbyB0aGUgZGlzdGFuY2Ugd2UndmUKKyAgICAgICAg
Ly8gdHJhdmVsZWQgaXMgc2ltcGx5IChjdXJyZW50IHZlbG9jaXR5KSAqIChlbGFwc2VkIHRpbWUp
LgorICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIC8vIElmIG91ciBkZXNpcmVkIHZlbG9jaXR5IGhh
cyBkZWNyZWFzZWQsIGRyb3AgdGhlIGN1cnJlbnQgdmVsb2NpdHkgdG9vLgorICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5OworICAgIH0KKwor
ICAgIC8vIE5vdyB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgZGlzdGFu
Y2UgdHJhdmVsZWQuCisgICAgaWYgKGRpc3RhbmNlVHJhdmVsZWQgPj0gYWJzKGRhdGEtPm1fZGVz
aXJlZFBvcyAtICpkYXRhLT5tX2N1cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZl
bGVkIGZhciBlbm91Z2ggdG8gcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290
aAorICAgICAgICAvLyBzY3JvbGxpbmcuCisgICAgICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBk
YXRhLT5tX2Rlc2lyZWRQb3M7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsK
KyAgICAgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCB5ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0
IGFuZCBzZXQgdXAgdGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoKmRh
dGEtPm1fY3VycmVudFBvcyA+IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSAtZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgKmRhdGEtPm1fY3VycmVu
dFBvcyArPSBkaXN0YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICAgICAgZGF0YS0+bV9sYXN0
QW5pbWF0aW9uVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQt
PnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQoKm1faG9yaXpvbnRhbERhdGEu
bV9jdXJyZW50UG9zLCAqbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50UG9zKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcldpbl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yV2luX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxBbmltYXRv
cldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0
b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JXaW4o
KTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhp
c0RhdGEgeworICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFyZW50LCBm
bG9hdCogY3VycmVudFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsKKyAgICAg
ICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxvY2l0eTsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBtX2xhc3RB
bmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9hbmltYXRp
b25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25UaW1lKCk7
CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAgdm9p
ZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOworICAgIHZv
aWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2b2lkIGFu
aW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRh
bERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9CisjZW5kaWYK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4u
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxUeXBlcy5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBTY3JvbGxCeVBpeGVsCiAgICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291
cmNlIHsKKyAgICAgICAgS2V5cHJlc3MsCisgICAgICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxi
YXJQYXJ0T3JNZW51LCAvLyAiU2Nyb2xsYmFyIiBhbG9uZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNz
IG5hbWUuCisgICAgICAgIFByb2dyYW1tYXRpYworICAgIH07CisKICAgICBlbnVtIFNjcm9sbGJh
ck9yaWVudGF0aW9uIHsgSG9yaXpvbnRhbFNjcm9sbGJhciwgVmVydGljYWxTY3JvbGxiYXIgfTsK
IAogICAgIGVudW0gU2Nyb2xsYmFyTW9kZSB7IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhckFsd2F5
c09mZiwgU2Nyb2xsYmFyQWx3YXlzT24gfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAko
cmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDIwIEBAIEludFBvaW50IFNjcm9sbFZpZXc6Om1heGlt
dW1TY3JvbGxQb3NpdGkKICAgICByZXR1cm4gSW50UG9pbnQobWF4aW11bU9mZnNldC53aWR0aCgp
LCBtYXhpbXVtT2Zmc2V0LmhlaWdodCgpKTsKIH0KIAoraW50IFNjcm9sbFZpZXc6OnNjcm9sbFNp
emUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7CisgICAg
cmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52
aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUo
b2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2
b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKICAg
ICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTMxNSwxNyArMzI5LDE3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QKICAgICB1cGRhdGVTY3Jv
bGxiYXJzKEludFNpemUobmV3U2Nyb2xsUG9zaXRpb24ueCgpLCBuZXdTY3JvbGxQb3NpdGlvbi55
KCkpKTsKIH0KIAotYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIFNjcm9sbFZpZXc6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkK
ICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwog
CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93
bikgewogICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVy
biBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIHNvdXJjZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJldHVybiBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2Up
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00NDEsNyArNDU1LDcgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRp
b24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpLCBmYWxzZSk7CiAgICAgICAgIGlmICht
X3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAogICAgIH0gCkBAIC00NjMsNyArNDc3
LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFBy
b3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAg
IGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAgLTY2OSwxMSAr
NjgzLDE2IEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUKICAgICAg
ICAgaWYgKGUuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBhZ2VXaGVlbEV2ZW50KSB7CiAgICAg
ICAgICAgICBBU1NFUlQoZGVsdGFYID09IDApOwogICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9
IGRlbHRhWSA8IDA7Ci0gICAgICAgICAgICBkZWx0YVkgPSBtYXgobWF4PGludD4odmlzaWJsZUhl
aWdodCgpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgdmlzaWJs
ZUhlaWdodCgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKKyAg
ICAgICAgICAgIGRlbHRhWSA9IG1heChtYXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZpc2libGVIZWln
aHQoKSkgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4odmlzaWJsZUhlaWdodCgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2Vl
blBhZ2VzKCkpKSwgMS4wZik7CiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAg
ICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRT
aXplKC1kZWx0YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNr
IG9uIHNjcm9sbEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRl
bHRhPworICAgICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWws
IFdoZWVsLCBkZWx0YVkpOworICAgICAgICBpZiAoZGVsdGFZICYmIG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbExl
ZnQsIFNjcm9sbEJ5UGl4ZWwsIFdoZWVsLCBkZWx0YVgpOwogICAgIH0KIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDkgQEAgY2xhc3MgU2Nyb2xsVmll
dyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGljOgogICAgIH5TY3JvbGxWaWV3KCk7CiAK
LSAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uIEZyYW1lVmlldyBvdmVycmlkZXMgdGhl
IG90aGVyIHR3by4KKyAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgRnJhbWVWaWV3
IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICAKICAgICAvLyBUaGUgd2luZG93IHRo
YXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xsVmlldyB3aWxsIGNvbW11bmljYXRl
IHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpAQCAtMTU0LDcgKzE1Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHMpIHsgcmV0dXJuIHNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzKTsgfQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBz
Y3JvbGxzIGJ5IGxpbmVzLCBwYWdlcyBvciBwaXhlbHMuCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgICAg
IAogICAgIC8vIFNjcm9sbCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSB2aWV3IChlaXRoZXIg
YmxpdHRpbmcgb3IgaW52YWxpZGF0aW5nIGFzIG5lZWRlZCkuCiAgICAgdm9pZCBzY3JvbGxDb250
ZW50cyhjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDEyICsxMDEsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFy
KCkKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMpOwogfQogCi1ib29sIFNj
cm9sbGJhcjo6c2V0VmFsdWUoaW50IHYpCitib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUoaW50IHYs
IGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikKIHsKICAgICB2ID0gbWF4KG1pbih2LCBtX3RvdGFs
U2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKICAgICBpZiAodmFsdWUoKSA9PSB2KQogICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQgdGhlIHNhbWUuCi0gICAgc2V0Q3Vy
cmVudFBvcyh2KTsKKyAgICBzZXRDdXJyZW50UG9zKHYsICFmcm9tU2Nyb2xsQW5pbWF0aW9uKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgU2Nyb2xsYmFy
OjpzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhl
bHNQZXJTdGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQorYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVs
dGlwbGllcikKIHsKICNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKQEAgLTE0MiwyNCArMTQyLDI1IEBAIGJvb2wg
U2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKICAgICB9CiAjZW5kaWYKIAotICAg
IGZsb2F0IHN0ZXAgPSAwOwotICAgIGlmICgoZGlyZWN0aW9uID09IFNjcm9sbFVwICYmIG1fb3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHx8IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVm
dCAmJiBtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBzdGVw
ID0gLTE7Ci0gICAgZWxzZSBpZiAoKGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duICYmIG1fb3JpZW50
YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHx8IChkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQg
JiYgbV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgc3RlcCA9
IDE7CisgICAgLy8gSWdub3JlIHBlcnBlbmRpY3VsYXIgc2Nyb2xscy4KKyAgICBpZiAoKG1fb3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9sbFVw
IHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCB8
fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBmbG9hdCBzdGVwOwogICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeUxpbmUpCi0gICAg
ICAgIHN0ZXAgKj0gbV9saW5lU3RlcDsKKyAgICAgICAgc3RlcCA9IHN0YXRpY19jYXN0PGZsb2F0
PihtX2xpbmVTdGVwKTsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeVBhZ2Up
Ci0gICAgICAgIHN0ZXAgKj0gbV9wYWdlU3RlcDsKKyAgICAgICAgc3RlcCA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3BhZ2VTdGVwKTsKICAgICBlbHNlIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxC
eURvY3VtZW50KQotICAgICAgICBzdGVwICo9IG1fdG90YWxTaXplOworICAgICAgICBzdGVwID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplKTsKICAgICBlbHNlIGlmIChncmFudWxhcml0
eSA9PSBTY3JvbGxCeVBpeGVsKQotICAgICAgICBzdGVwICo9IG1fcGl4ZWxTdGVwOworICAgICAg
ICBzdGVwID0gbV9waXhlbFN0ZXA7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBk
aXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVy
OworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zY3JvbGwobV9v
cmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHNvdXJjZSwgc3RlcCwgbXVsdGlwbGllcik7CiAKLSAg
ICBmbG9hdCBuZXdQb3MgPSBtX2N1cnJlbnRQb3MgKyBzdGVwICogbXVsdGlwbGllcjsKLSAgICBm
bG9hdCBtYXhQb3MgPSBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemU7Ci0gICAgcmV0dXJuIHNl
dEN1cnJlbnRQb3MobWF4KG1pbihuZXdQb3MsIG1heFBvcyksIDAuMGYpKTsKKyAgICByZXR1cm4g
c2V0Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciks
IHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpKSwgMC4wZiks
IGZhbHNlKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6OnVwZGF0ZVRodW1iKCkKQEAgLTIyMSw3ICsy
MjIsNyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQog
CiAgICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJl
c3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgp
KSkKKyAgICBpZiAoc2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQ
YXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSwgU2Nyb2xsYmFyUGFydE9yTWVudSkpCiAgICAgICAgIHN0
YXJ0VGltZXJJZk5lZWRlZChkZWxheSk7CiB9CiAKQEAgLTI5MSwxMSArMjkyLDE0IEBAIHZvaWQg
U2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcykKICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAg
ICAgICAgIGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVsdGEpOwogICAgIGlmIChkZWx0YSkKLSAg
ICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkg
KiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbikpOworICAgICAgICBzZXRDdXJyZW50
UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0
cmFja0xlbiAtIHRodW1iTGVuKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRDdXJy
ZW50UG9zKGZsb2F0IHBvcykKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKGZsb2F0IHBv
cywgYm9vbCBub3RpZnlTY3JvbGxBbmltYXRvcikKIHsKKyAgICBpZiAobm90aWZ5U2Nyb2xsQW5p
bWF0b3IgJiYgY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5zZXRTY3JvbGxQb3NpdGlvbkFu
ZFN0b3BBbmltYXRpb24obV9vcmllbnRhdGlvbiwgcG9zKTsKKwogICAgIGlmIChwb3MgPT0gbV9j
dXJyZW50UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM0MCw3ICszNDQsNyBAQCBi
b29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiB7CiAgICAgaWYgKG1fcHJl
c3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7CiAgICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFw
QmFja1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVudFBvcyht
X2RyYWdPcmlnaW4pOworICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmlnaW4sIHRy
dWUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS54KCkgOgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDExICs3NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAgICAgdm9pZCBzZXRTdGVwcyhpbnQg
bGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1BlclN0ZXAgPSAxKTsKLSAgICBib29s
IHNldFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1ZShpbnQsIGJvb2wgZnJvbVNjcm9sbEFu
aW1hdGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6ZSwgaW50IHRv
dGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3NlZFBvcyA9
IHA7IH0KIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIg
PSAxKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAKQEAgLTEyNCw5ICsxMjQsNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmll
dyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBp
c1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQogcHJvdGVjdGVkOgogICAgIFNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDApOwogCkBAIC0xNDIsNyArMTM5LDYgQEAg
cHJvdGVjdGVkOgogICAgIFNjcm9sbEdyYW51bGFyaXR5IHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVs
YXJpdHkoKTsKICAgICAKICAgICB2b2lkIG1vdmVUaHVtYihpbnQgcG9zKTsKLSAgICBib29sIHNl
dEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKIAogICAgIFNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7
CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKQEAgLTE2Nyw2ICsxNjMs
MTEgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9vdmVybGFwc1Jlc2l6ZXI7CiAgICAgCiAgICAg
Ym9vbCBtX3N1cHByZXNzSW52YWxpZGF0aW9uOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9v
bCBpc1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgc2V0Q3Vy
cmVudFBvcyhmbG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpOwogfTsKIAogfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDkgQEAKICNpZm5kZWYgU2Nyb2xsYmFyQ2xpZW50X2gKICNkZWZpbmUgU2Nyb2xsYmFyQ2xp
ZW50X2gKIAorI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zNCw3ICszNiwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xs
YmFyQ2xpZW50KCkge30KKyAgICBTY3JvbGxiYXJDbGllbnQoKSA6IG1fc2Nyb2xsQW5pbWF0b3Io
U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSh0aGlzKSkgeyB9CisgICAgdmlydHVhbCB+U2Nyb2xsYmFy
Q2xpZW50KCkgeyB9CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3Vy
Y2UsIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCisgICAgeworICAgICAgICByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc291cmNl
LCBzdGVwLCBtdWx0aXBsaWVyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
QW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQg
cG9zKQorICAgIHsKKyAgICAgICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOworICAgIH0KKworICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0
IEludFBvaW50JikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxi
YXIqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKQEAgLTY3LDYgKzg1LDkgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNj
cm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJRdC5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIzICs3MiwyMSBAQCBi
b29sIFNjcm9sbGJhcjo6Y29udGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgY29uc3QgUVBvaW50
IGdsb2JhbFBvcyA9IFFQb2ludChldmVudC5nbG9iYWxYKCksIGV2ZW50Lmdsb2JhbFkoKSk7CiAg
ICAgUUFjdGlvbiogYWN0aW9uU2VsZWN0ZWQgPSBtZW51LmV4ZWMoZ2xvYmFsUG9zKTsKIAotICAg
IGlmICghYWN0aW9uU2VsZWN0ZWQpCi0gICAgICAgIHsgLyogRG8gbm90aGluZyAqLyB9Ci0gICAg
ZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsSGVyZSkgeworICAgIGlmIChhY3Rp
b25TZWxlY3RlZCA9PSBhY3RTY3JvbGxIZXJlKSB7CiAgICAgICAgIGNvbnN0IFFQb2ludCBwb3Mg
PSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZlbnQucG9zKCkpOwogICAgICAgICBtb3Zl
VGh1bWIoaG9yaXpvbnRhbCA/IHBvcy54KCkgOiBwb3MueSgpKTsKICAgICB9IGVsc2UgaWYgKGFj
dGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFRvcCkKLSAgICAgICAgc2V0VmFsdWUoMCk7CisgICAg
ICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURv
Y3VtZW50LCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3Rl
ZCA9PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAgIHNldFZhbHVlKG1heGltdW0oKSk7CisgICAg
ICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxC
eURvY3VtZW50LCBTY3JvbGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxl
Y3RlZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVm
dDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSwgMSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFs
ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UsIFNjcm9sbGJhclBhcnRPck1l
bnUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAg
ICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQ
YWdlLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9s
bERvd24sIFNjcm9sbEJ5UGFnZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7CiAgICAgZWxzZSBpZiAo
YWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFs
ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUsIDEpOworICAgICAgICBzY3Jv
bGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lLCBTY3Jv
bGxiYXJQYXJ0T3JNZW51KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3Jv
bGxEb3duKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xs
RG93biwgU2Nyb2xsQnlMaW5lLCAxKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3Jv
bGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgU2Nyb2xsYmFyUGFydE9yTWVudSk7
CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NjQsNiArNjY0LDE3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0Jgog
ICAgICAgICA6OlJlbGVhc2VEQyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAoraW50IFBvcHVwTWVu
dVdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QK
K3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1f
c2Nyb2xsYmFyKSA/IChtX3Njcm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlz
aWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9s
bGJhcikKKyAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOwor
fQorCiB2b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFy
KQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CkBAIC05NzksNyArOTkwLDcgQEAgTFJFU1VM
VCBQb3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBoV25kLAogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Ny
b2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlM
aW5lLCBhYnMoaSkpOworICAgICAgICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNj
cm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBXaGVlbCwgYWJzKGkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJp
bmdNb3VzZSA9IGI7IH0KIAogICAgIC8vIFNjcm9sbEJhckNsaWVudAorICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsMTAgKzQyMSwx
MCBAQCBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0CiAgICAgcmV0dXJu
IGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAotYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQorYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Ny
b2xsU291cmNlIHNvdXJjZSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQogewog
ICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBpZiAobCAmJiBsLT5zY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKSkgewogICAgICAg
ICBpZiAoc3RvcE5vZGUpCiAgICAgICAgICAgICAqc3RvcE5vZGUgPSBub2RlKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDM1LDcgKzQzNSw3IEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGQKIAogICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKKyAg
ICAgICAgcmV0dXJuIGItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11
bHRpcGxpZXIsIHN0b3BOb2RlKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwogICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4w
ZiwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxp
ZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAgICBib29sIGNhbkJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1h
dGljYWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xs
KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCShyZXZpc2lvbiA2NjAy
OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcwLDYgKzE3MCwxNyBAQCB2b2lkIFJlbmRlckRhdGFHcmlkOjpwYWludENvbHVtbkhl
YWRlcihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKK2ludCBS
ZW5kZXJEYXRhR3JpZDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxi
YXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNp
emUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5k
ZXJEYXRhR3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAkocmV2aXNpb24gNjYw
MjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgSFRNTERhdGFHcmlkRWxlbWVudCogZ3Jp
ZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRGF0YUdyaWRFbGVtZW50
Kj4obm9kZSgpKTsgfQogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2
aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7
CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYzLDkgKzEzNjMs
OSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwKIAogICAgIGlmICh1
cGRhdGVTY3JvbGxiYXJzKSB7CiAgICAgICAgIGlmIChtX2hCYXIpCi0gICAgICAgICAgICBtX2hC
YXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgICAgICBtX2hCYXItPnNldFZh
bHVlKHNjcm9sbFhPZmZzZXQoKSwgZmFsc2UpOwogICAgICAgICBpZiAobV92QmFyKQotICAgICAg
ICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFkpOworICAgICAgICAgICAgbV92QmFyLT5z
ZXRWYWx1ZShtX3Njcm9sbFksIGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBTY2hlZHVsZSB0aGUg
c2Nyb2xsIERPTSBldmVudC4KQEAgLTE2MTgsNiArMTYxOCwyMCBAQCB2b2lkIFJlbmRlckxheWVy
OjpyZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBX
ZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAg
dGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAoraW50IFJlbmRlckxheWVy
OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAorewor
ICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKSA/IG1faEJhciA6IG1fdkJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/
IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXIt
PnNldFZhbHVlKG9mZnNldC54KCksIHRydWUpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1f
dkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6
OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIC8vIFVwZGF0ZSBzY3JvbGwgcG9zaXRp
b24gZnJvbSBzY3JvbGxiYXJzLgpAQCAtMjA2OCw3ICsyMDgyLDcgQEAgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0
byBrZWVwIGV2ZXJ5dGhpbmcgd29ya2luZyAoc2VlIGhvdyBzY3JvbGxYT2Zmc2V0KCkKICAgICAg
ICAgLy8gZGlmZmVycyBmcm9tIHNjcm9sbFlPZmZzZXQoKSB0byBnZXQgYW4gaWRlYSBvZiB3aHkg
dGhlIGhvcml6b250YWwgYW5kCiAgICAgICAgIC8vIHZlcnRpY2FsIHNjcm9sbGJhcnMgbmVlZCB0
byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5KS4KLSAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3Jv
bGxYT2Zmc2V0KCkpOworICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwg
ZmFsc2UpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWln
aHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwpAQCAtMjIyOSw3ICsyMjQzLDcgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorYm9vbCBSZW5kZXJM
YXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNlLCBmbG9hdCBtdWx0aXBsaWVyKQogewog
ICAgIGJvb2wgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlOwogICAgIGJvb2wgZGlkVmVydGlj
YWxTY3JvbGwgPSBmYWxzZTsKQEAgLTIyMzgsMTMgKzIyNTIsMTMgQEAgYm9vbCBSZW5kZXJMYXll
cjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Ny
b2xsQnlEb2N1bWVudCkgewogICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIGZvciB0aGUgU2Ny
b2xsQnlEb2N1bWVudCBncmFudWxhcml0eS4gQSBkb2N1bWVudCBzY3JvbGwgY2FuIG9ubHkgYmUg
dXAgCiAgICAgICAgICAgICAvLyBvciBkb3duIGFuZCBpbiBib3RoIGNhc2VzIHRoZSBob3Jpem9u
dGFsIGJhciBnb2VzIGFsbCB0aGUgd2F5IHRvIHRoZSBsZWZ0LgotICAgICAgICAgICAgZGlkSG9y
aXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1l
bnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJh
ci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5RG9jdW1lbnQsIHNvdXJjZSwgbXVsdGlwbGll
cik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1f
aEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgICAg
ICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcik7CiAgICAgfQogCiAgICAgaWYgKG1fdkJhcikK
LSAgICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBtX3ZC
YXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIpOwog
CiAgICAgcmV0dXJuIChkaWRIb3Jpem9udGFsU2Nyb2xsIHx8IGRpZFZlcnRpY2FsU2Nyb2xsKTsK
IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsK
IAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpOwogICAg
IHZvaWQgYXV0b3Njcm9sbCgpOwogCiAgICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiwgY29uc3QgSW50U2l6ZSYpOwpAQCAtNTE4LDYgKzUxOCw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCiAgICAgLy8gU2Nyb2xs
QmFyQ2xpZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJ
KHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNj
cm9sbFRvUmV2ZWFsRWxlbWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAg
IGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7Cisg
ICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC01MTAsOSArNTEwLDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0
SW5kZXhJc1Zpc2libGUoaQogICAgIHJldHVybiBpbmRleCA+PSBtX2luZGV4T2Zmc2V0ICYmIGlu
ZGV4IDwgbV9pbmRleE9mZnNldCArIG51bVZpc2libGVJdGVtcygpOwogfQogCi1ib29sIFJlbmRl
ckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQorYm9vbCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBzb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5v
ZGUqKikKIHsKLSAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc291cmNlLCBtdWx0aXBsaWVyKTsKIH0KIAog
dm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KQpAQCAt
NTIzLDYgKzUyMywxNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25l
CiAgICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKK2lu
dCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xs
YmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVT
aXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5k
ZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICBpbnQgbmV3T2Zmc2V0
ID0gbV92QmFyLT52YWx1ZSgpOwpAQCAtNTc4LDcgKzU4OSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJv
eDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwogICAgIG1faW5kZXhPZmZz
ZXQgPSBpbmRleDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGlu
ZGV4KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgZmFsc2UpOwogfQogCiBib29s
IFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmgJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYsIE5vZGUq
KiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBmbG9hdCBtdWx0aXBsaWVyLCBOb2Rl
Kiogc3RvcE5vZGUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwog
ICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNS
b290TGluZUJveCkgY29uc3Q7CkBAIC05Niw2ICs5Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKTsKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmly
dHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3Qg
SW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwog
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJ
KHJldmlzaW9uIDY2MDI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MSwxMiArMTA3MSwxMiBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2NyCiAgICAgICAgIGlubmVyVGV4dEVs
ZW1lbnQoKS0+c2V0U2Nyb2xsVG9wKG5ld1RvcCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkK
K2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFNjcm9sbFNvdXJjZSBz
b3VyY2UsIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBSZW5kZXJM
YXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwot
ICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIHNvdXJjZSwgbXVsdGlwbGllcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIsIHN0b3BOb2RlKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKIH0KIAogUGFz
c1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24g
NjYwMjkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
aW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0
KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBm
bG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIGludCB0ZXh0Qmxv
Y2tXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRoKEF0b21p
Y1N0cmluZyBmYW1pbHkpOwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDMzKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGlu
ZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBX
aW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9X
ZWJQYWdlUXQuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAoV2Vi
S2l0OjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGVmYXVsdEJl
aGF2aW9yRm9yS2V5RXZlbnQpOgorCiAyMDEwLTA4LTE5ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBDYWxsIE5QX0dldEVudHJ5UG9pbnRzIGJlZm9yZSBOUF9Jbml0
aWFsaXplIG9uIFdpbmRvd3MKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dl
YlBhZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
V2ViUGFnZVF0LmNwcAkocmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9XZWJQYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAg
Y29uc3QgY2hhciogV2ViUGFnZTo6aW50ZXJwcmV0S2V5RXZlbnQoYwogCiBzdGF0aWMgaW5saW5l
IHZvaWQgc2Nyb2xsKFBhZ2UqIHBhZ2UsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewotICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIEtleXByZXNzKTsKIH0KIAogYm9vbCBXZWJQYWdlOjpwZXJm
b3JtRGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5
Ym9hcmRFdmVudCkKQEAgLTIyNiwxMCArMjI2LDcgQEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtRGVm
YXVsdEJlaGF2aW9yRm9ySwogICAgICAgICAgICAgbV9wYWdlLT5nb0JhY2soKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBWS19TUEFDRToKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQuc2hp
ZnRLZXkoKSkKLSAgICAgICAgICAgIHNjcm9sbChtX3BhZ2UsIFNjcm9sbFVwLCBTY3JvbGxCeVBh
Z2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGwobV9wYWdlLCBTY3JvbGxEb3du
LCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBzY3JvbGwobV9wYWdlLCBrZXlib2FyZEV2ZW50LnNo
aWZ0S2V5KCkgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgVktfTEVGVDoKICAgICAgICAgc2Nyb2xsKG1fcGFnZSwgU2Nyb2xs
TGVmdCwgU2Nyb2xsQnlMaW5lKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjYwMzkpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGgg
c2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViU2Nyb2xsYmFyLmg6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMu
CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhcjo6KToKKyAgICAgICAgKiBzcmMvQXNzZXJ0
TWF0Y2hpbmdFbnVtcy5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAg
ICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6IFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZUNvbW1hbmQpOgorICAgICAgICAq
IHNyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5j
dGlvbi4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuICBBbGxvdyB3aGVlbCBzY3JvbGxz
IHRvIGJlIGFuaW1hdGVkLiAgRml4IGNvbXBpbGF0aW9uIHdhcm5pbmdzLgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNjcm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFy
SW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25Nb3Vz
ZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbik6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogUGx1bWIgbmV3IFNj
cm9sbGJhckNsaWVudCBmdW5jdGlvbi4gIFBsdW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNl
cy4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cHJvcGFnYXRlU2Nyb2xsKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuaDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNlcy4KKyAg
ICAgICAgKiBzcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcDogVXBkYXRlIGNvbW1lbnRz
IG5vdyB0aGF0IHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudCk6CisKIDIwMTAtMDgtMjQgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1
c3NlbGwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgJKHJldmlzaW9u
IDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksMTMgQEAgcHVibGljOgogICAgICAgICBTY3JvbGxCeVBpeGVs
CiAgICAgfTsKIAorICAgIGVudW0gU2Nyb2xsU291cmNlIHsKKyAgICAgICAgS2V5cHJlc3MsCisg
ICAgICAgIFdoZWVsLAorICAgICAgICBTY3JvbGxiYXJQYXJ0T3JNZW51LCAvLyAiU2Nyb2xsYmFy
IiBhbG9uZSBjbGFzaGVzIHdpdGggdGhlIGNsYXNzIG5hbWUuCisgICAgICAgIFByb2dyYW1tYXRp
YworICAgIH07CisKICAgICAvLyBDcmVhdGVzIGEgV2ViU2Nyb2xsYmFyLgogICAgIFdFQktJVF9B
UEkgc3RhdGljIFdlYlNjcm9sbGJhciogY3JlYXRlKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVu
dGF0aW9uKTsKIApAQCAtNzQsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgdmFs
dWUoKSBjb25zdCA9IDA7CiAKICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHZhbHVlLgotICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZShpbnQgcG9zaXRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWUoaW50IHBvc2l0aW9uLCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pID0gMDsKIAog
ICAgIC8vIFNldHMgdGhlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgcmVnaW9uIGluIHBpeGVscy4g
IGkuZS4gaWYgYSBkb2N1bWVudCBpcwogICAgIC8vIDgwMHgxMDAwMCBwaXhlbHMgYW5kIHRoZSB2
aWV3cG9ydCBpcyAxMDAweDEwMDAgcGl4ZWxzLCB0aGVuIHNldExvY2F0aW9uCkBAIC04NCw3ICs5
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RG9jdW1lbnRTaXplKGludCBzaXpl
KSA9IDA7CiAKICAgICAvLyBTY3JvbGwgYmFjayBvciBmb3J3YXJkIHdpdGggdGhlIGdpdmVuIGdy
YW51bGFyaXR5LgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgU2Nyb2xsU291cmNlLCBm
bG9hdCBtdWx0aXBsaWVyKSA9IDA7CiAKICAgICAvLyBQYWludCB0aGUgZ2l2ZW4gcmVjdGFuZ2xl
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAw
OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCShy
ZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVt
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsMTEgQEAgQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYQogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJTY3JvbGxiYXI6OlNjcm9sbEJ5RG9jdW1lbnQsIFNjcm9sbEJ5RG9jdW1lbnQpOwogQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlNjcm9sbEJ5UGl4ZWwsIFNjcm9s
bEJ5UGl4ZWwpOwogCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlNjcm9sbGJhcjo6
S2V5cHJlc3MsIEtleXByZXNzKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViU2Ny
b2xsYmFyOjpXaGVlbCwgV2hlZWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJT
Y3JvbGxiYXI6OlNjcm9sbGJhclBhcnRPck1lbnUsIFNjcm9sbGJhclBhcnRPck1lbnUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTY3JvbGxiYXI6OlByb2dyYW1tYXRpYywgUHJv
Z3JhbW1hdGljKTsKKwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJTZXR0aW5nczo6
RWRpdGluZ0JlaGF2aW9yTWFjLCBFZGl0aW5nTWFjQmVoYXZpb3IpOwogQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJTZXR0aW5nczo6RWRpdGluZ0JlaGF2aW9yV2luLCBFZGl0aW5nV2lu
ZG93c0JlaGF2aW9yKTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAko
cmV2aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNTIsMTAgKzExNTIsMTAgQEAgYm9vbCBXZWJGcmFtZUltcGw6
OmV4ZWN1dGVDb21tYW5kKGNvbnN0CiAgICAgLy8gbW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCBh
bmQgbW92ZVRvRW5kZkRvY3VtZW50IGFyZSBvbmx5IGhhbmRsZWQgYnkgV2ViS2l0CiAgICAgLy8g
Zm9yIGVkaXRhYmxlIG5vZGVzLgogICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPmNhbkVkaXQo
KSAmJiB3ZWJOYW1lID09ICJtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IikKLSAgICAgICAgcmV0
dXJuIHZpZXdJbXBsKCktPnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVu
dCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsVXAs
IFNjcm9sbEJ5RG9jdW1lbnQsIFByb2dyYW1tYXRpYyk7CiAKICAgICBpZiAoIWZyYW1lKCktPmVk
aXRvcigpLT5jYW5FZGl0KCkgJiYgd2ViTmFtZSA9PSAibW92ZVRvRW5kT2ZEb2N1bWVudCIpCi0g
ICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3JvbGwoU2Nyb2xsRG93biwgU2Ny
b2xsQnlEb2N1bWVudCk7CisgICAgICAgIHJldHVybiB2aWV3SW1wbCgpLT5wcm9wYWdhdGVTY3Jv
bGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCwgUHJvZ3JhbW1hdGljKTsKIAogICAgIHJl
dHVybiBmcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZCh3ZWJOYW1lKS5leGVjdXRlKHZhbHVlKTsK
IH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2aXNp
b24gNjYwMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0
TG9jYXRpb24oY29uc3QKICAgICAgIG1fc2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAKICAgICBp
bnQgbGVuZ3RoID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1fc2Nyb2xsYmFyLT53aWR0aCgpIDogbV9zY3JvbGxiYXItPmhlaWdodCgpOwotICAg
IGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihsZW5ndGggKiBTY3JvbGxiYXI6Om1pbkZyYWN0
aW9uVG9TdGVwV2hlblBhZ2luZygpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3
ZWVuUGFnZXMoKSksIDEpOworICAgIGludCBwYWdlU3RlcCA9IG1heChtYXgoc3RhdGljX2Nhc3Q8
aW50PihzdGF0aWNfY2FzdDxmbG9hdD4obGVuZ3RoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25U
b1N0ZXBXaGVuUGFnaW5nKCkpLCBsZW5ndGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVu
UGFnZXMoKSksIDEpOwogICAgIG1fc2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICBtX3Njcm9sbGJhci0+c2V0RW5hYmxlZCht
X3Njcm9sbGJhci0+dG90YWxTaXplKCkgPiBsZW5ndGgpOwogICAgIG1fc2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKGxlbmd0aCwgbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpKTsKQEAgLTkyLDkgKzky
LDkgQEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gbV9z
Y3JvbGxiYXItPnZhbHVlKCk7CiB9CiAKLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUo
aW50IHBvc2l0aW9uKQordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRp
b24sIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikKIHsKLSAgICBtX3Njcm9sbGJhci0+c2V0VmFs
dWUocG9zaXRpb24pOworICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShwb3NpdGlvbiwgZnJvbVNj
cm9sbEFuaW1hdGlvbik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0RG9jdW1lbnRT
aXplKGludCBzaXplKQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6
c2V0RG9jdW1lbnRTaXplKGkKICAgICBtX3Njcm9sbGJhci0+c2V0UHJvcG9ydGlvbihsZW5ndGgs
IHNpemUpOwogfQogCi12b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllcikKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxTb3VyY2Ugc291cmNl
LCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBkaXI7
CiAgICAgYm9vbCBob3Jpem9udGFsID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcjsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYlNjcm9sbGJhcklt
cGw6OnNjcm9sbChTY3JvbGxEaXJlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxS
aWdodCA6IFNjcm9sbERvd247CiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8g
U2Nyb2xsTGVmdCA6IFNjcm9sbFVwOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBs
aWVyKTsKKyAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Ny
b2xsU291cmNlPihzb3VyY2UpLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKQEAgLTIx
NCwxMSArMjE0LDExIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnMK
ICAgICAgICAgICAgIGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
cik7CiAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhIDwgMDsKLSAgICAgICAg
ICAgICAgICBkZWx0YSA9IG1heChtYXg8aW50PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAq
IFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIG1fc2Nyb2xsYmFyLT52
aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsK
KyAgICAgICAgICAgICAgICBkZWx0YSA9IG1heChtYXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVu
UGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAt
IFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSksIDEuMGYpOwogICAgICAgICAg
ICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGEgKj0gLTE7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUobV9zY3JvbGxi
YXItPnZhbHVlKCkgLSBkZWx0YSk7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKCht
X3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IFdlYkNv
cmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Nyb2xsQnlQaXhl
bCwgV2ViQ29yZTo6V2hlZWwsIGRlbHRhKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKQEAgLTI1NywxMSArMjU3LDIxIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25L
ZXlEb3duKGNvbnN0IFcKICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xs
R3JhbnVsYXJpdHk7CiAgICAgICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9s
bChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7CiAgICAg
ICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24ndCBj
b21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCi0gICAgICAgICAgICByZXR1cm4gbV9zY3Jv
bGxiYXItPnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xs
R3JhbnVsYXJpdHksIFdlYkNvcmU6OktleXByZXNzKTsKICAgICAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAoraW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZTo6U2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIChvcmll
bnRhdGlvbiA9PSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxiYXItPnRv
dGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBX
ZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKChtX3Nj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG9mZnNldC54
KCkgOiBvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1
ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKikKIHsKICAgICBtX2NsaWVudC0+dmFsdWVDaGFu
Z2VkKHRoaXMpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHJl
dmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDEzICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgLy8gV2ViS2l0
OjpXZWJTY3JvbGxiYXIgbWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhdGlvbihjb25z
dCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCBpbnQgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWUoaW50IHBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUo
aW50IHBvc2l0aW9uLCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREb2N1bWVudFNpemUoaW50IHNpemUpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcik7CisgICAg
dmlydHVhbCB2b2lkIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBT
Y3JvbGxTb3VyY2UsIGZsb2F0IG11bHRpcGxpZXIpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChX
ZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0
RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFy
Q2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA2NjAyOSkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NjMsNyArNzYzLDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2Nyb2xsVmlld1dpdGhLZXlib2Fy
ZAogICAgIFNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5OwogICAgIGlmICghbWFw
S2V5Q29kZUZvclNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVs
YXJpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHByb3BhZ2F0ZVNjcm9s
bChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gcHJvcGFn
YXRlU2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIEtleXByZXNzKTsK
IH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChpbnQga2V5Q29kZSwK
QEAgLTgxNywxOSArODE3LDE3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVTZWxlY3RQb3B1cCgp
CiB9CiAKIGJvb2wgV2ViVmlld0ltcGw6OnByb3BhZ2F0ZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
c2Nyb2xsRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9s
bEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbFNvdXJjZSBzY3JvbGxTb3VyY2UpCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgc2Nyb2xsSGFuZGxlZCA9Ci0gICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coc2Nyb2xsRGlyZWN0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEdy
YW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbEhhbmRsZWQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNjcm9sbE92ZXJmbG93KHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIHNj
cm9sbFNvdXJjZSk7CiAgICAgRnJhbWUqIGN1cnJlbnRGcmFtZSA9IGZyYW1lOwogICAgIHdoaWxl
ICghc2Nyb2xsSGFuZGxlZCAmJiBjdXJyZW50RnJhbWUpIHsKLSAgICAgICAgc2Nyb2xsSGFuZGxl
ZCA9IGN1cnJlbnRGcmFtZS0+dmlldygpLT5zY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgICAgIHNjcm9sbEhhbmRsZWQgPSBjdXJyZW50RnJhbWUtPnZpZXcoKS0+
c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHksIHNjcm9sbFNvdXJjZSk7
CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsK
ICAgICB9CiAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZWQ7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIFRyaWVzIHRvIHNjcm9sbCBhIGZyYW1lIG9yIGFueSBwYXJlbnQgb2YgYSBmcmFtZS4gUmV0
dXJucyB0cnVlIGlmIHRoZSB2aWV3CiAgICAgLy8gd2FzIHNjcm9sbGVkLgotICAgIGJvb2wgcHJv
cGFnYXRlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3Jh
bnVsYXJpdHkpOworICAgIGJvb2wgcHJvcGFnYXRlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVj
dGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHksIFdlYkNvcmU6OlNjcm9sbFNvdXJjZSk7
CiAKICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCBhIHBvcHVwIHdhcyBvcGVuZWQvY2xvc2VkLgog
ICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBvcHVwQ29udGFp
bmVyKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50
RmFjdG9yeS5jcHAJKHJldmlzaW9uIDY2MDI5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93aW4v
V2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTMgKzM5Niwx
NiBAQCBXZWJNb3VzZVdoZWVsRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6CiAKICAgICAvLyBD
b252ZXJ0IHdoZWVsIGRlbHRhIGFtb3VudCB0byBhIG51bWJlciBvZiBwaXhlbHMgdG8gc2Nyb2xs
LgogICAgIC8vCi0gICAgLy8gSG93IG1hbnkgcGl4ZWxzIHNob3VsZCB3ZSBzY3JvbGwgcGVyIGxp
bmU/ICBHZWNrbyB1c2VzIHRoZSBoZWlnaHQgb2YgdGhlCi0gICAgLy8gY3VycmVudCBsaW5lLCB3
aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2UgY2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaCB0aGUK
LSAgICAvLyBwYWdlIG9yIGdvIHRvIGRpZmZlcmVudCBwYWdlcy4gIElFIDcgaXMgfjUwIHB4L2xp
bmUsIGFsdGhvdWdoIHRoZSB2YWx1ZQotICAgIC8vIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkgYnkg
cGFnZSBhbmQgem9vbSBsZXZlbC4gIFNpbmNlIElFIDcgaGFzIGEgc21vb3RoaW5nCi0gICAgLy8g
YWxnb3JpdGhtIG9uIHNjcm9sbGluZywgaXQgY2FuIGdldCBhd2F5IHdpdGggc2xpZ2h0bHkgbGFy
Z2VyIHNjcm9sbCB2YWx1ZXMKLSAgICAvLyB3aXRob3V0IGZlZWxpbmcgamVya3kuICBIZXJlIHdl
IHVzZSAxMDAgcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdAotICAgIC8vIHNjcm9sbCBh
bW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgorICAgIC8vIEhvdyBtYW55IHBp
eGVscyBzaG91bGQgd2Ugc2Nyb2xsIHBlciBsaW5lPyAgRmlyZWZveCB1c2VzIHRoZSBoZWlnaHQg
b2YKKyAgICAvLyB0aGUgY3VycmVudCBsaW5lLCB3aGljaCBtZWFucyBzY3JvbGwgZGlzdGFuY2Ug
Y2hhbmdlcyBhcyB5b3UgZ28gdGhyb3VnaAorICAgIC8vIHRoZSBwYWdlIG9yIGdvIHRvIGRpZmZl
cmVudCBwYWdlcy4gIElFIDggaXMgfjYwIHB4L2xpbmUsIGFsdGhvdWdoIHRoZQorICAgIC8vIHZh
bHVlIHNlZW1zIHRvIHZhcnkgc2xpZ2h0bHkgYnkgcGFnZSBhbmQgem9vbSBsZXZlbC4gIEFsc28s
IElFIGRlZmF1bHRzCisgICAgLy8gdG8gc21vb3RoIHNjcm9sbGluZyB3aGlsZSBGaXJlZm94IGRv
ZXNuJ3QsIHNvIGl0IGNhbiBnZXQgYXdheSB3aXRoCisgICAgLy8gc29tZXdoYXQgbGFyZ2VyIHNj
cm9sbCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGFzIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAwCisg
ICAgLy8gcHggcGVyIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdCBzY3JvbGwgYW1vdW50IGlzIHRo
cmVlIGxpbmVzIHBlciB3aGVlbAorICAgIC8vIHRpY2spLiAgRXZlbiB0aG91Z2ggd2UgaGF2ZSBz
bW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UKKyAgICAvLyBhcyBJ
RSBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhlciB0
aGFuIHlvdSB3YW50CisgICAgLy8gd2hpbGUgcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAgICAg
d2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdoZWVs
RGVsdGE7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI1ICBQZXRlciBLYXN0aW5n
ICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdp
bmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
OiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X3JlYWxfbW92ZV9jdXJzb3IpOgorCiAyMDEwLTA4LTI1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEuCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNjYw
MjkpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0NSw4ICsxMTQ1LDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19y
ZWFsX21vdgogICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSkpCi0gICAg
ICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBp
ZiAoIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgS2V5cHJlc3MpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgS2V5cHJlc3MpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4
OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA4LTI1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVt
ZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMjM1NgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVZpZXcubW06IFBsdW1iIHNjcm9s
bCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfc2Nyb2xsT3ZlcmZs
b3dJbkRpcmVjdGlvbjpncmFudWxhcml0eTpzb3VyY2U6XSk6CisgICAgICAgICgtW1dlYkZyYW1l
VmlldyBfc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1l
VmlldyBfc2Nyb2xsVG9FbmRPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBf
cGFnZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfcGFnZUhvcml6b250
YWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5lVmVydGljYWxseTpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5lSG9yaXpvbnRhbGx5Ol0pOgor
CiAyMDEwLTA4LTI0ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1t
CShyZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTUxOCw3ICs1MTgsNyBAQCAtICh2b2lkKXZpZXdEaWRNb3ZlVG9X
aW5kb3cKICAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1dpbmRvd107CiB9CiAKLS0gKEJPT0wpX3Nj
cm9sbE92ZXJmbG93SW5EaXJlY3Rpb246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVs
YXJpdHk6KFNjcm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CistIChCT09MKV9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOihTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihT
Y3JvbGxHcmFudWxhcml0eSlncmFudWxhcml0eSBzb3VyY2U6KFNjcm9sbFNvdXJjZSlzb3VyY2UK
IHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdy
ZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1bWVudFZp
ZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCkBAIC01MjYsMTIgKzUyNiwx
MiBAQCAtIChCT09MKV9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvCiAgICAgRnJhbWUq
IGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBOTzsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxPdmVy
ZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zY3JvbGxPdmVyZmxvdyhkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UpOwog
fQogCiAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQKIHsKLSAgICBpZiAoW3Nl
bGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Nyb2xs
QnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNj
cm9sbFVwIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgc291cmNlOktleXByZXNzXSkKICAg
ICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQogICAgICAg
ICByZXR1cm4gTk87CkBAIC01NDEsNyArNTQxLDcgQEAgLSAoQk9PTClfc2Nyb2xsVG9CZWdpbm5p
bmdPZkRvY3VtZW50CiAKIC0gKEJPT0wpX3Njcm9sbFRvRW5kT2ZEb2N1bWVudAogewotICAgIGlm
IChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpTY3JvbGxEb3duIGdyYW51bGFyaXR5
OlNjcm9sbEJ5RG9jdW1lbnRdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVj
dGlvbjpTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5RG9jdW1lbnQgc291cmNlOktleXBy
ZXNzXSkKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVd
KQogICAgICAgICByZXR1cm4gTk87CkBAIC02MTcsNyArNjE3LDcgQEAgLSAoZmxvYXQpX2hvcml6
b250YWxQYWdlU2Nyb2xsRGlzdGFuY2UKIAogLSAoQk9PTClfcGFnZVZlcnRpY2FsbHk6KEJPT0wp
dXAKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3Jv
bGxVcCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlXSkKKyAgICBpZiAoW3Nl
bGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24g
Z3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVy
biBZRVM7CiAgICAgCiAgICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkKQEAgLTYyOSw3ICs2
MjksNyBAQCAtIChCT09MKV9wYWdlVmVydGljYWxseTooQk9PTCl1cAogCiAtIChCT09MKV9wYWdl
SG9yaXpvbnRhbGx5OihCT09MKWxlZnQKIHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93
SW5EaXJlY3Rpb246bGVmdCA/IFNjcm9sbExlZnQgOiBTY3JvbGxSaWdodCBncmFudWxhcml0eTpT
Y3JvbGxCeVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjps
ZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5UGFnZSBz
b3VyY2U6S2V5cHJlc3NdKQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBf
aXNTY3JvbGxhYmxlXSkKQEAgLTY0MSw3ICs2NDEsNyBAQCAtIChCT09MKV9wYWdlSG9yaXpvbnRh
bGx5OihCT09MKWxlZnQKIAogLSAoQk9PTClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wpdXAK
IHsKLSAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxV
cCA6IFNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Nyb2xsQnlMaW5lXSkKKyAgICBpZiAoW3NlbGYg
X3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24gZ3Jh
bnVsYXJpdHk6U2Nyb2xsQnlMaW5lIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVybiBZ
RVM7CiAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQpAQCAtNjUzLDcgKzY1Myw3IEBA
IC0gKEJPT0wpX3Njcm9sbExpbmVWZXJ0aWNhbGx5OihCT09MKXVwCiAKIC0gKEJPT0wpX3Njcm9s
bExpbmVIb3Jpem9udGFsbHk6KEJPT0wpbGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3Zl
cmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFy
aXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0
aW9uOmxlZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlM
aW5lIHNvdXJjZTpLZXlwcmVzc10pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAoIVtz
ZWxmIF9pc1Njcm9sbGFibGVdKQpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYktpdC9xdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wOC0yNSAgUGV0
ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3Jr
LCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUu
Y3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3VyY2VzLgorICAgICAgICAocXR3ZWJraXRfd2Vi
ZnJhbWVfc2Nyb2xsT3ZlcmZsb3cpOgorICAgICAgICAoUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJW
YWx1ZSk6CisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6aGFuZGxlU2Nyb2xsaW5nKToKKwog
MjAxMC0wOC0yNSAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShy
ZXZpc2lvbiA2NjAyOSkKKysrIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDE0ICsxMjAsMTQgQEAgYm9vbCBRV0VCS0lUX0VYUE9SVCBxdHdlYmtpdF93
ZWJmcmFtZV9zYwogCiAgICAgZG8gewogICAgICAgICBpZiAoZHggPiAwKQotICAgICAgICAgICAg
c2Nyb2xsZWRIb3Jpem9udGFsID0gcmVuZGVyTGF5ZXItPnNjcm9sbChTY3JvbGxSaWdodCwgU2Ny
b2xsQnlQaXhlbCwgZHgpOworICAgICAgICAgICAgc2Nyb2xsZWRIb3Jpem9udGFsID0gcmVuZGVy
TGF5ZXItPnNjcm9sbChTY3JvbGxSaWdodCwgU2Nyb2xsQnlQaXhlbCwgUHJvZ3JhbW1hdGljLCBk
eCk7CiAgICAgICAgIGVsc2UgaWYgKGR4IDwgMCkKLSAgICAgICAgICAgIHNjcm9sbGVkSG9yaXpv
bnRhbCA9IHJlbmRlckxheWVyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgcUFi
cyhkeCkpOworICAgICAgICAgICAgc2Nyb2xsZWRIb3Jpem9udGFsID0gcmVuZGVyTGF5ZXItPnNj
cm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBQcm9ncmFtbWF0aWMsIHFBYnMoZHgpKTsK
IAogICAgICAgICBpZiAoZHkgPiAwKQotICAgICAgICAgICAgc2Nyb2xsZWRWZXJ0aWNhbCA9IHJl
bmRlckxheWVyLT5zY3JvbGwoU2Nyb2xsRG93biwgU2Nyb2xsQnlQaXhlbCwgZHkpOworICAgICAg
ICAgICAgc2Nyb2xsZWRWZXJ0aWNhbCA9IHJlbmRlckxheWVyLT5zY3JvbGwoU2Nyb2xsRG93biwg
U2Nyb2xsQnlQaXhlbCwgUHJvZ3JhbW1hdGljLCBkeSk7CiAgICAgICAgIGVsc2UgaWYgKGR5IDwg
MCkKLSAgICAgICAgICAgIHNjcm9sbGVkVmVydGljYWwgPSByZW5kZXJMYXllci0+c2Nyb2xsKFNj
cm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBxQWJzKGR5KSk7CisgICAgICAgICAgICBzY3JvbGxlZFZl
cnRpY2FsID0gcmVuZGVyTGF5ZXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgUHJv
Z3JhbW1hdGljLCBxQWJzKGR5KSk7CiAKICAgICAgICAgaWYgKHNjcm9sbGVkSG9yaXpvbnRhbCB8
fCBzY3JvbGxlZFZlcnRpY2FsKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05MjksNyAr
OTI5LDcgQEAgdm9pZCBRV2ViRnJhbWU6OnNldFNjcm9sbEJhclZhbHVlKFF0OjpPcgogICAgICAg
ICAgICAgdmFsdWUgPSAwOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHNjcm9sbEJhck1heGlt
dW0ob3JpZW50YXRpb24pKQogICAgICAgICAgICAgdmFsdWUgPSBzY3JvbGxCYXJNYXhpbXVtKG9y
aWVudGF0aW9uKTsKLSAgICAgICAgc2ItPnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgc2ItPnNl
dFZhbHVlKHZhbHVlLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2
aXNpb24gNjYwMjkpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM4Miw3ICsxMzgyLDcgQEAgYm9vbCBRV2ViUGFnZVByaXZhdGU6OmhhbmRsZVNjcm9s
bGluZyhRSwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgS2V5cHJlc3MpOwogfQogCiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O
X0NIRUNLKDQsIDYsIDApCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJLaXQvd2luL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI1ICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogV2ViVmlldy5jcHA6IFBs
dW1iIHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJWaWV3OjprZXlEb3duKToK
KwogMjAxMC0wOC0yNCAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTdGV2ZSBGYWxrZW5idXJnLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2NjAyOSkK
KysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzcsNyArMTkz
Nyw3IEBAIGJvb2wgV2ViVmlldzo6a2V5RG93bihXUEFSQU0gdmlydHVhbEtleUMKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1
cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBLZXlwcmVzcyk7CiB9CiAKIGJvb2wgV2ViVmlldzo6a2V5UHJlc3MoV1BBUkFN
IGNoYXJDb2RlLCBMUEFSQU0ga2V5RGF0YSwgYm9vbCBzeXN0ZW1LZXlEb3duKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65609</attachid>
            <date>2010-08-26 13:22:13 -0700</date>
            <delta_ts>2010-08-26 13:44:38 -0700</delta_ts>
            <desc>patch v5.0</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>61198</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MTI3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNiAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjEy
NikKKysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgaWYgYnVpbGRf
cG9ydCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAg
ICAgICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVO
b2RlQ2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAg
ICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAg
ICAgICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0
IGNyYXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNl
IHRoZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAg
ICAgICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTAp
LgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2MTI3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3NyBAQAorMjAxMC0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEFkZCBXaW5kb3dzIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6U2Nyb2xsYmFyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcDoKKyAgICAgICAgKFNj
cm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJlbmNlIHRvIHNldFZhbHVlKCkuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRNZW51KToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNjcm9sbFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0Qm94OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Ny
b2xsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNj
cm9sbFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorCiAyMDEwLTA4LTI2ICBQZXRlciBLYXN0
aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY2MTI2KQorKysgV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTk0Nyw2ICsxOTQ3LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU1NMS2V5R2Vu
ZXJhdG9yLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmggXApAQCAtMjU2Niw2ICsyNTY4LDggQEAgZW5kaWYKIAogaWYg
VEFSR0VUX1dJTjMyCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JXaW4uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2lu
LmggXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwKIAlXZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKIAlXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDY2MTI2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMxMDks
NiArMzEwOSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmgnLApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNiArMTIyMiw4IEBACiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAogICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcv
U2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1RyYW5zcGFy
ZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjQ5LDYgKzI0MjQ5LDIyIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTEwOSw2ICs1MTA5LDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVy
LmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAq
LzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAq
LzsgfTsKKwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBE
OTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBE
OTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRD
b250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdG
QTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzEx
MDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdG
QTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAw
QTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDkzNiw2ICsxMDkzOCw4IEBACiAJCUM1
RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3QjEwRDk5
QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENv
bnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENv
bnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3RkEzMTIy
MDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8q
IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2Njc1LDYgKzE2Njc5LDggQEAKIAkJCQkxQzYzQTI0NjBGNzE2NDY2MDBDMDlENUEg
LyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2No
ZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xs
QW5pbWF0b3IuY3BwICovLAorCQkJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxB
bmltYXRvci5oICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIu
aCAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50Lmgg
Ki8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8s
CkBAIC0xOTc4OSw2ICsxOTc5NSw3IEBACiAJCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8q
IFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0Q0MwRTIwRUQzOUQ2RjAwQTY1
OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMjhDMjg0NTEwRDgyNTAw
MDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDQTNCRjY3
RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMjMyMyw2ICsyMjMzMCw3IEBACiAJCQkJOUY3MjMwNTAxMTE4
NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
MjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxi
YXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgzNjgwODAwMzE5NzE3IC8qIFNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUY4NjlGMEU4
NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKwor
I2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIU9TKFdJTkRPV1MpCitTY3JvbGxBbmltYXRvciogU2Ny
b2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1
cm4gbmV3IFNjcm9sbEFuaW1hdG9yKGNsaWVudCk7Cit9CisjZW5kaWYKKworYm9vbCBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBmbG9hdCog
Y3VycmVudFBvcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2N1
cnJlbnRQb3NYIDogJm1fY3VycmVudFBvc1k7CisgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgo
c3RkOjptaW4oKmN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxm
bG9hdD4obV9jbGllbnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlm
ICgqY3VycmVudFBvcyA9PSBuZXdQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqY3Vy
cmVudFBvcyA9IG5ld1BvczsKKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3Rv
cEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQor
eworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBt
X2N1cnJlbnRQb3NYID0gcG9zOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50UG9zWSA9IHBv
czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yX2gKKyNkZWZpbmUgU2Ny
b2xsQW5pbWF0b3JfaAorCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJDbGllbnQ7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9y
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2Nyb2xsQW5pbWF0b3IqIGNyZWF0ZShTY3JvbGxiYXJD
bGllbnQqKTsKKworICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGJhckNsaWVudCogY2xpZW50KSA6
IG1fY2xpZW50KGNsaWVudCkgeyB9CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3IoKSB7IH0K
KworICAgIC8vIENvbXB1dGVzIGEgc2Nyb2xsIGRlc3RpbmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGFy
YW1ldGVycy4gIFJldHVybnMgZmFsc2UgaWYKKyAgICAvLyBhbHJlYWR5IGF0IHRoZSBkZXN0aW5h
dGlvbi4gIE90aGVyd2lzZSwgc3RhcnRzIHNjcm9sbGluZyB0b3dhcmRzIHRoZQorICAgIC8vIGRl
c3RpbmF0aW9uIGFuZCByZXR1cm5zIHRydWUuICBTY3JvbGxpbmcgbWF5IGJlIGltbWVkaWF0ZSBv
ciBhbmltYXRlZC4KKyAgICAvLyBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBhbHdheXMg
c2Nyb2xscyBpbW1lZGlhdGVseSwgbmV2ZXIgYW5pbWF0ZXMuCisgICAgdmlydHVhbCBib29sIHNj
cm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAs
IGZsb2F0IG11bHRpcGxpZXIpOworCisgICAgLy8gU3RvcHMgYW55IGFuaW1hdGlvbiBpbiB0aGUg
Z2l2ZW4gZGlyZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmltYXRvcgorICAgIC8vIHdp
dGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhpcyBkb2VzIG5vdCBjYXVzZSBhIGNh
bGxiYWNrIHRvIHRoZQorICAgIC8vIFNjcm9sbGJhckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uLCBm
bG9hdCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50OworICAg
IGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBv
cmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAvLyBzdWJjbGFzcyBjb2Rl
IGNvbXBsZXhpdHkuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JXaW4uaCIKKworI2luY2x1
ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBTY3Jv
bGxBbmltYXRvcldpbihjbGllbnQpOworfQorCitjb25zdCBkb3VibGUgU2Nyb2xsQW5pbWF0b3JX
aW46OmFuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAxOworCitTY3JvbGxBbmltYXRvcldpbjo6UGVy
QXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJlbnQsIGZsb2F0KiBj
dXJyZW50UG9zKQorICAgIDogbV9jdXJyZW50UG9zKGN1cnJlbnRQb3MpCisgICAgLCBtX2Rlc2ly
ZWRQb3MoMCkKKyAgICAsIG1fY3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX2Rlc2lyZWRWZWxv
Y2l0eSgwKQorICAgICwgbV9sYXN0QW5pbWF0aW9uVGltZSgwKQorICAgICwgbV9hbmltYXRpb25U
aW1lcihwYXJlbnQsICZTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sK
K30KKworCitTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBTY3JvbGxBbmltYXRvcihjbGllbnQpCisgICAgLCBtX2hvcml6
b250YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYKQorICAgICwgbV92ZXJ0aWNhbERhdGEodGhp
cywgJm1fY3VycmVudFBvc1kpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yV2luOjp+U2Nyb2xsQW5p
bWF0b3JXaW4oKQoreworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250
YWxEYXRhKTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEp
OworfQorCitib29sIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIC8vIERvbid0IGFuaW1hdGUganVtcGluZyB0byB0
aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGdyYW51bGFyaXR5
ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICAv
LyBUaGlzIGlzIGFuIGFuaW1hdGFibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVs
dGEuCisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3Jv
bGxiYXIpID8gJm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisgICAgZmxvYXQg
bmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsgKHN0ZXAgKiBt
dWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVu
dGF0aW9uKSkpLCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IG5ld1BvczsK
KworICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAgIGlmICgqZGF0
YS0+bV9jdXJyZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGJvb2wgYWxyZWFkeUFuaW1hdGluZyA9IGRhdGEtPm1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKTsKKyAgICAvLyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IHNvdXJj
ZXMgb2Ygc2Nyb2xsIHJlcXVlc3RzLiAgV2Ugd2FudCB0bworICAgIC8vIG1ha2UgYm90aCBrZXli
b2FyZCBhbmQgd2hlZWwtZ2VuZXJhdGVkIHNjcm9sbCByZXF1ZXN0cyAod2hpY2ggY2FuIGNvbWUg
YXQKKyAgICAvLyB1bnByZWRpY3RhYmxlIHJhdGVzKSBhbmQgYXV0b3Njcm9sbGluZyBmcm9tIGhv
bGRpbmcgZG93biB0aGUgbW91c2UgYnV0dG9uCisgICAgLy8gb24gYSBzY3JvbGxiYXIgcGFydCAo
d2hlcmUgdGhlIHJlcXVlc3QgcmF0ZSBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUKKyAgICAvLyBz
Y3JvbGxiYXIgdGhlbWUpIGZlZWwgc21vb3RoLCByZXNwb25zaXZlLCBhbmQgc2ltaWxhci4KKyAg
ICAvLworICAgIC8vIFdoZW4gYXV0b3Njcm9sbGluZywgdGhlIHNjcm9sbGJhcidzIGF1dG9zY3Jv
bGwgdGltZXIgd2lsbCBjYWxsIHVzIHRvCisgICAgLy8gaW5jcmVtZW50IHRoZSBkZXNpcmVkIHBv
c2l0aW9uIGJ5IHxzdGVwfCAod2l0aCB8bXVsdGlwbGllcnwgPT0gMSkgZXZlcnkKKyAgICAvLyBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBzZWNv
bmRzLiAgSWYgd2Ugc2V0CisgICAgLy8gdGhlIGRlc2lyZWQgdmVsb2NpdHkgdG8gZXhhY3RseSB0
aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbCBuZWl0aGVyCisgICAgLy8gcmFjZSBhaGVh
ZCAoYW5kIHRoZW4gaGF2ZSB0byBzbG93IGRvd24pIG5vciBpbmNyZWFzaW5nbHkgbGFnIGJlaGlu
ZCwgYnV0CisgICAgLy8gd2lsbCBiZSBzbW9vdGggYW5kIHN5bmNocm9uaXplZC4KKyAgICAvLwor
ICAgIC8vIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBhY2NlbGVyYXRpb24gcGVyaW9kLCB0aGUg
Y3VycmVudCBwb3NpdGlvbiBpbgorICAgIC8vIHRoaXMgY2FzZSB3b3VsZCBsYWcgdGhlIGRlc2ly
ZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50IGFtb3VudCAoc2VlCisgICAgLy8gY29tbWVudHMg
b24gYW5pbWF0ZVNjcm9sbCgpKTsgdGhlIGV4YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgIC8v
ICAgbGFnID0gfHN0ZXB8IC0gdigwLjV0QSArIHREKQorICAgIC8vIFdoZXJlCisgICAgLy8gICB2
ID0gVGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwKKyAgICAvLyAgICAgICB8c3RlcHwgLyBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQorICAgIC8v
ICAgdEEgPSBhY2NlbGVyYXRpb25UaW1lKCkKKyAgICAvLyAgIHREID0gVGhlIHRpbWUgd2UgcHJl
dGVuZCBoYXMgYWxyZWFkeSBwYXNzZWQgd2hlbiBzdGFydGluZyB0byBzY3JvbGwsCisgICAgLy8g
ICAgICAgIHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vCisgICAgLy8gVGhpcyBsYWcgcHJv
dmlkZXMgc29tZSBidWZmZXIgYWdhaW5zdCB0aW1lciBqaXR0ZXIgc28gd2UncmUgbGVzcyBsaWtl
bHkKKyAgICAvLyB0byBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYW5kIHN0b3AgKGFuZCB0aHVz
IGhhdmUgdG8gcmUtYWNjZWxlcmF0ZSwKKyAgICAvLyBjYXVzaW5nIGEgdmlzaWJsZSBoaXRjaCkg
d2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQgYXV0b3Njcm9sbCBpbmNyZW1lbnQuCisgICAgLy8K
KyAgICAvLyBUaHVzLCBmb3IgYXV0b3Njcm9sbC10aW1lci10cmlnZ2VyZWQgcmVxdWVzdHMsIHRo
ZSBpZGVhbCBzdGVhZHktc3RhdGUKKyAgICAvLyBkaXN0YW5jZSB0byB0cmF2ZWwgaW4gZWFjaCB0
aW1lIGludGVydmFsIGlzOgorICAgIC8vICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9IHN0ZXA7Cisg
ICAgLy8gTm90ZSB0aGF0IHdoZW4gd2UncmUgbm90IGFscmVhZHkgYW5pbWF0aW5nLCB0aGlzIGlz
IGV4YWN0bHkgdGhlIHNhbWUgYXMKKyAgICAvLyB0aGUgZGlzdGFuY2UgdG8gdGhlIHRhcmdldCBw
b3NpdGlvbi4gIFdlJ2xsIHJldHVybiB0byB0aGF0IGluIGEgbW9tZW50LgorICAgIC8vCisgICAg
Ly8gRm9yIGtleWJvYXJkIGFuZCB3aGVlbCBzY3JvbGxzLCB3ZSBkb24ndCBrbm93IHdoZW4gdGhl
IG5leHQgaW5jcmVtZW50CisgICAgLy8gd2lsbCBiZSByZXF1ZXN0ZWQuICBJZiB3ZSBzZXQgdGhl
IHRhcmdldCB2ZWxvY2l0eSBiYXNlZCBvbiBob3cgZmFyIGF3YXkKKyAgICAvLyBmcm9tIHRoZSB0
YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBrZXlib2FyZC93aGVlbCBldmVudHMgdGhh
dCBjb21lCisgICAgLy8gZmFzdGVyIHRoYW4gdGhlIGF1dG9zY3JvbGwgZGVsYXksIHdlJ2xsIGFz
eW1wdG90aWNhbGx5IGFwcHJvYWNoIHRoZQorICAgIC8vIHZlbG9jaXR5IG5lZWRlZCB0byBzdGF5
IHNtb290aGx5IGluIHN5bmMgd2l0aCB0aGUgdXNlcidzIGFjdGlvbnM7IGZvcgorICAgIC8vIGV2
ZW50cyB0aGF0IGNvbWUgc2xvd2VyLCB3ZSdsbCBzY3JvbGwgb25lIGluY3JlbWVudCBhbmQgdGhl
biBwYXVzZSB1bnRpbAorICAgIC8vIHRoZSBuZXh0IGV2ZW50IGZpcmVzLgorICAgIGZsb2F0IGFu
aW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcyk7CisgICAgLy8g
SWYgYSBrZXkgaXMgaGVsZCBkb3duIChvciB0aGUgd2hlZWwgY29udGludWFsbHkgc3B1biksIHRo
ZW4gb25jZSB3ZSBoYXZlCisgICAgLy8gcmVhY2hlZCBhIHZlbG9jaXR5IGNsb3NlIHRvIHRoZSBz
dGVhZHktc3RhdGUgdmVsb2NpdHksIHdlJ3JlIGxpa2VseSB0bworICAgIC8vIGhpdCB0aGUgZGVz
aXJlZCBwb3NpdGlvbiBhdCBhcm91bmQgdGhlIHNhbWUgdGltZSB3ZSdkIGV4cGVjdCB0aGUgbmV4
dAorICAgIC8vIGluY3JlbWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVzZSBpdCBsZWFkcyB0byBo
aXRjaGluZyBhcyBkZXNjcmliZWQgYWJvdmUKKyAgICAvLyAoaWYgYXV0b3Njcm9sbC1iYXNlZCBy
ZXF1ZXN0cyBkaWRuJ3QgcmVzdWx0IGluIGEgc21hbGwgYW1vdW50IG9mIGNvbnN0YW50CisgICAg
Ly8gbGFnKS4gIFNvIGlmIHdlJ3JlIGNhbGxlZCBhZ2FpbiB3aGlsZSBhbHJlYWR5IGFuaW1hdGlu
Zywgd2Ugd2FudCB0byB0cmltCisgICAgLy8gdGhlIGFuaW1hdGlvblN0ZXAgc2xpZ2h0bHkgdG8g
bWFpbnRhaW4gbGFnIGxpa2Ugd2hhdCdzIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAvLyAoSSBzYXkg
Im1haW50YWluIiBzaW5jZSB3ZSdsbCBhbHJlYWR5IGJlIGxhZ2dlZCBkdWUgdG8gdGhlIGFjY2Vs
ZXJhdGlvbgorICAgIC8vIGR1cmluZyB0aGUgZmlyc3Qgc2Nyb2xsIHBlcmlvZC4pCisgICAgLy8K
KyAgICAvLyBSZW1lbWJlciB0aGF0IHRyaW1taW5nIHdvbid0IGNhdXNlIHVzIHRvIGZhbGwgc3Rl
YWRpbHkgZnVydGhlciBiZWhpbmQKKyAgICAvLyBoZXJlLCBiZWNhdXNlIHRoZSBmdXJ0aGVyIGJl
aGluZCB3ZSBhcmUsIHRoZSBsYXJnZXIgdGhlIGJhc2Ugc3RlcCB2YWx1ZQorICAgIC8vIGFib3Zl
LiAgR2l2ZW4gdGhlIHNjcm9sbGluZyBhbGdvcml0aG0gaW4gYW5pbWF0ZVNjcm9sbCgpLCB0aGUg
cHJhY3RpY2FsCisgICAgLy8gZWZmZWN0IHdpbGwgYWN0dWFsbHkgYmUgdGhhdCwgYXNzdW1pbmcg
YSBjb25zdGFudCB0cmltIGZhY3Rvciwgd2UnbGwgbGFnCisgICAgLy8gYnkgYSBjb25zdGFudCBh
bW91bnQgZGVwZW5kaW5nIG9uIHRoZSByYXRlIGF0IHdoaWNoIGluY3JlbWVudHMgb2NjdXIKKyAg
ICAvLyBjb21wYXJlZCB0byB0aGUgYXV0b3Njcm9sbCB0aW1lciBkZWxheS4gIFRoZSBleGFjdCBs
YWcgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgociAvIGspIC0gMSkKKyAg
ICAvLyBXaGVyZQorICAgIC8vICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBl
YXQgZGVsYXksCisgICAgLy8gICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1
dG9zY3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQorICAgIC8vICAgICAgIGtleS93aGVlbCByZXBl
YXQgZGVsYXkgKGkuZS4gPiAxIHdoZW4ga2V5cyByZXBlYXQgZmFzdGVyKQorICAgIC8vICAgayA9
IFRoZSB2ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAgLy8KKyAgICAvLyBX
ZSB3YW50IHRvIGNob29zZSB0aGUgdHJpbSBmYWN0b3Igc3VjaCB0aGF0IGZvciBjYWxscyB0aGF0
IGNvbWUgYXQgdGhlCisgICAgLy8gYXV0b3Njcm9sbCB0aW1lciByYXRlLCB3ZSdsbCB3aW5kIHVw
IHdpdGggdGhlIHNhbWUgbGFnIGFzIGluIHRoZQorICAgIC8vICJwZXJmZWN0IiBjYXNlIGRlc2Ny
aWJlZCBhYm92ZSAob3IsIHRvIHB1dCBpdCBhbm90aGVyIHdheSwgd2UnbGwgZW5kIHVwCisgICAg
Ly8gd2l0aCB8YW5pbWF0aW9uU3RlcHwgPT0gfHN0ZXB8ICogfG11bHRpcGxpZXJ8IGRlc3BpdGUg
dGhlIGFjdHVhbCBkaXN0YW5jZQorICAgIC8vIGNhbGN1bGF0ZWQgYWJvdmUgYmVpbmcgbGFyZ2Vy
IHRoYW4gdGhhdCkuICBUaGlzIHdpbGwgcmVzdWx0IGluICJwZXJmZWN0IgorICAgIC8vIGJlaGF2
aW9yIGZvciBhdXRvc2Nyb2xsaW5nIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpYWwtY2FzZSBpdC4K
KyAgICBpZiAoYWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0aW9uU3RlcCAvPSAoMi4w
IC0gKCgxLjAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKSkgKiAoMC41ICogYWNjZWxlcmF0aW9uVGltZSgpICsgYW5pbWF0aW9uVGltZXJEZWxh
eSkpKTsKKyAgICAvLyBUaGUgcmVzdWx0IG9mIGFsbCB0aGlzIGlzIHRoYXQgc2luZ2xlIGtleXBy
ZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwKKyAgICAvLyBzY3JvbGwgaW4gdGhlIHNhbWUgdGlt
ZSBwZXJpb2QgYXMgc2luZ2xlIHByZXNzZXMgb2Ygc2Nyb2xsYmFyIGVsZW1lbnRzOworICAgIC8v
IGhvbGRpbmcgdGhlIG1vdXNlIGRvd24gb24gYSBzY3JvbGxiYXIgcGFydCB3aWxsIHNjcm9sbCBh
cyBmYXN0IGFzCisgICAgLy8gcG9zc2libGUgd2l0aG91dCBoaXRjaGluZzsgYW5kIG90aGVyIHJl
cGVhdGVkIHNjcm9sbCBldmVudHMgd2lsbCBhbHNvCisgICAgLy8gc2Nyb2xsIHdpdGggdGhlIHNh
bWUgdGltZSBsYWcgYXMgaG9sZGluZyBkb3duIHRoZSBtb3VzZSBvbiBhIHNjcm9sbGJhcgorICAg
IC8vIHBhcnQuCisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8g
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisK
KyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcsIHN0YXJ0LgorICAgIGlmICgh
YWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9sbChkYXRhKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBw
b3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YTsKKyAgICBz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICAqZGF0YS0+bV9jdXJyZW50UG9z
ID0gcG9zOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2N1cnJl
bnRWZWxvY2l0eSA9IDA7CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworfQorCisv
LyBzdGF0aWMKK2RvdWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YWNjZWxlcmF0aW9uVGltZSgpCit7
CisgICAgLy8gV2UgZWxlY3QgdG8gdXNlIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5h
dXRvc2Nyb2xsVGltZXJEZWxheSgpIGFzCisgICAgLy8gdGhlIGxlbmd0aCBvZiB0aW1lIHdlJ2xs
IHRha2UgdG8gYWNjZWxlcmF0ZSBmcm9tIDAgdG8gb3VyIHRhcmdldAorICAgIC8vIHZlbG9jaXR5
LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUgd291bGQgcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNl
ZAorICAgIC8vIGFjY2VsZXJhdGlvbiBlZmZlY3QuCisgICAgcmV0dXJuIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpOworfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2lu
PiogdGltZXIpCit7CisgICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9yaXpvbnRhbERh
dGEubV9hbmltYXRpb25UaW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0
YSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKFBlckF4aXNEYXRhKiBkYXRhKQoreworICAgIGlmIChkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhKiBkYXRh
KQoreworICAgIC8vIE5vdGUgb24gc21vb3RoIHNjcm9sbGluZyBwZXJmIHZlcnN1cyBub24tc21v
b3RoIHNjcm9sbGluZyBwZXJmOgorICAgIC8vIFRoZSB0b3RhbCB0aW1lIHRvIHBlcmZvcm0gYSBj
b21wbGV0ZSBzY3JvbGwgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIHQgPSB0MCArIDAuNXRBIC0gdEQg
KyB0UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBlcmZvcm0gdGhl
IHNjcm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0gVGhlIGFjY2Vs
ZXJhdGlvbiB0aW1lLAorICAgIC8vICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSAoc2VlIGJlbG93KQorICAgIC8vICAgdEQgPSB8YW5p
bWF0aW9uVGltZXJEZWxheXwKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAgLy8gICAgICAgIHNpbmds
ZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVlIHRvIGNhbGxpbmcKKyAg
ICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBmb3Igc2ltcGxlIHBhZ2Vz
LCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMpLgorICAgIC8vCisgICAg
Ly8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhlIHRvdGFsIGxhZyAoYXMg
dXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgbmVnbGlnaWJsZSBmb3Igc2ltcGxlIHBhZ2Vz
IGFuZCByb3VnaGx5IHRTIGZvciBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dAorICAgIC8vIGtub3dp
bmcgaW4gYWR2YW5jZSBob3cgbGFyZ2UgdFMgaXMgaXQncyBoYXJkIHRvIGRvIGJldHRlciB0aGFu
IHRoaXMuCisgICAgLy8gUGVyaGFwcyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMg
dmFsdWVzIGFuZCBmb3J3YXJkLWNvbXBlbnNhdGUuCisKKworICAgIC8vIFdlIHdhbnQgdG8gdXBk
YXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIHRpbWUgaXQncyBiZWVuIHNpbmNl
CisgICAgLy8gb3VyIGxhc3QgdXBkYXRlLiAgVGhpcyBtYXkgYmUgbG9uZ2VyIHRoYW4gb3VyIGlk
ZWFsIHRpbWUsIGVzcGVjaWFsbHkgaWYKKyAgICAvLyB0aGUgcGFnZSBpcyBjb21wbGV4IG9yIHRo
ZSBzeXN0ZW0gaXMgc2xvdy4KKyAgICAvLworICAgIC8vIFRvIGF2b2lkIGZlZWxpbmcgbGFnZ3ks
IGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xsaW5nIHdlIHByZXRlbmQKKyAgICAv
LyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUgaWRlYWwgaW50ZXJ2YWwsIHNvIHRo
YXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29tZSBkaXN0YW5jZSBpbW1lZGlhdGVs
eS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSkgOiBh
bmltYXRpb25UaW1lckRlbGF5OworCisgICAgLy8gRmlndXJlIG91dCBob3cgZmFyIHdlJ3ZlIGFj
dHVhbGx5IHRyYXZlbGVkIGFuZCB1cGRhdGUgb3VyIGN1cnJlbnQKKyAgICAvLyB2ZWxvY2l0eS4K
KyAgICBmbG9hdCBkaXN0YW5jZVRyYXZlbGVkOworICAgIGlmIChkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSA8IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgIC8vIFdlIGFjY2VsZXJh
dGUgYXQgYSBjb25zdGFudCByYXRlIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHZlbG9jaXR5
LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2Np
dHkgLyBhY2NlbGVyYXRpb25UaW1lKCk7CisKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGV0aGVy
IGNvbnRhbnQgYWNjZWxlcmF0aW9uIGhhcyBjYXVzZWQgdXMgdG8gcmVhY2ggb3VyCisgICAgICAg
IC8vIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgcG90ZW50aWFsVmVsb2NpdHlDaGFu
Z2UgPSBhY2NlbGVyYXRpb25SYXRlICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICBmbG9h
dCBwb3RlbnRpYWxOZXdWZWxvY2l0eSA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsgcG90ZW50
aWFsVmVsb2NpdHlDaGFuZ2U7CisgICAgICAgIGlmIChwb3RlbnRpYWxOZXdWZWxvY2l0eSA+IGRh
dGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSB0
YXJnZXQgdmVsb2NpdHkgYXQgc29tZSBwb2ludCBiZXR3ZWVuIG91ciBsYXN0CisgICAgICAgICAg
ICAvLyB1cGRhdGUgYW5kIG5vdy4gIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBjYW4gYmUgY2FsY3Vs
YXRlZCBpbiB0d28KKyAgICAgICAgICAgIC8vIHBpZWNlczogdGhlIGRpc3RhbmNlIHRyYXZlbGVk
IHdoaWxlIGFjY2VsZXJhdGluZywgYW5kIHRoZQorICAgICAgICAgICAgLy8gZGlzdGFuY2UgdHJh
dmVsZWQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgICAgIGZs
b2F0IGFjdHVhbFZlbG9jaXR5Q2hhbmdlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgLSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eTsKKyAgICAgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvbkludGVy
dmFsID0gYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyBhY2NlbGVyYXRpb25SYXRlOworICAgICAgICAg
ICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIHVuZGVyIGNvbnN0YW50IGFjY2VsZXJhdGlvbiBp
cyB0aGUgYXJlYQorICAgICAgICAgICAgLy8gdW5kZXIgYSBsaW5lIHNlZ21lbnQgd2l0aCBhIGNv
bnN0YW50IHJpc2luZyBzbG9wZS4gIEJyZWFrIHRoaXMKKyAgICAgICAgICAgIC8vIGludG8gYSB0
cmlhbmd1bGFyIHBvcnRpb24gYXRvcCBhIHJlY3Rhbmd1bGFyIHBvcnRpb24gYW5kIHN1bS4KKyAg
ICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsg
KGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogYWNjZWxlcmF0aW9uSW50ZXJ2YWwpOworICAg
ICAgICAgICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGF0IHRoZSB0YXJnZXQgdmVsb2NpdHkg
aXMgc2ltcGx5CisgICAgICAgICAgICAvLyAodGFyZ2V0IHZlbG9jaXR5KSAqIChyZW1haW5pbmcg
dGltZSBhZnRlciBhY2NlbGVyYXRpbmcpLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCAr
PSAoZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgKiAobGFzdFNjcm9sbEludGVydmFsIC0gYWNjZWxl
cmF0aW9uSW50ZXJ2YWwpKTsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0g
ZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBDb25zdGFudCBhY2NlbGVyYXRpb24gdGhyb3VnaCB0aGUgZW50aXJlIHRpbWUgaW50ZXJ2YWwu
CisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5
ICsgKHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogbGFzdFNjcm9sbEludGVydmFsOwor
ICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBwb3RlbnRpYWxOZXdWZWxvY2l0
eTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVh
Y2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5LCBzbyB0aGUgZGlzdGFuY2Ugd2UndmUKKyAgICAgICAg
Ly8gdHJhdmVsZWQgaXMgc2ltcGx5IChjdXJyZW50IHZlbG9jaXR5KSAqIChlbGFwc2VkIHRpbWUp
LgorICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIC8vIElmIG91ciBkZXNpcmVkIHZlbG9jaXR5IGhh
cyBkZWNyZWFzZWQsIGRyb3AgdGhlIGN1cnJlbnQgdmVsb2NpdHkgdG9vLgorICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5OworICAgIH0KKwor
ICAgIC8vIE5vdyB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgZGlzdGFu
Y2UgdHJhdmVsZWQuCisgICAgaWYgKGRpc3RhbmNlVHJhdmVsZWQgPj0gYWJzKGRhdGEtPm1fZGVz
aXJlZFBvcyAtICpkYXRhLT5tX2N1cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZl
bGVkIGZhciBlbm91Z2ggdG8gcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290
aAorICAgICAgICAvLyBzY3JvbGxpbmcuCisgICAgICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBk
YXRhLT5tX2Rlc2lyZWRQb3M7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsK
KyAgICAgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCB5ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0
IGFuZCBzZXQgdXAgdGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoKmRh
dGEtPm1fY3VycmVudFBvcyA+IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSAtZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgKmRhdGEtPm1fY3VycmVu
dFBvcyArPSBkaXN0YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICAgICAgZGF0YS0+bV9sYXN0
QW5pbWF0aW9uVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQt
PnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQoKm1faG9yaXpvbnRhbERhdGEu
bV9jdXJyZW50UG9zLCAqbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50UG9zKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcldpbl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yV2luX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxBbmltYXRv
cldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0
b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JXaW4o
KTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0
aW9uLCBmbG9hdCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBlckF4aXNEYXRhIHsKKyAgICAg
ICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JXaW4qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQ
b3MpOworCisgICAgICAgIGZsb2F0KiBtX2N1cnJlbnRQb3M7CisgICAgICAgIGZsb2F0IG1fZGVz
aXJlZFBvczsKKyAgICAgICAgZmxvYXQgbV9jdXJyZW50VmVsb2NpdHk7CisgICAgICAgIGZsb2F0
IG1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uVGltZTsK
KyAgICAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+IG1fYW5pbWF0aW9uVGltZXI7CisgICAg
fTsKKworICAgIHN0YXRpYyBkb3VibGUgYWNjZWxlcmF0aW9uVGltZSgpOworICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgYW5pbWF0aW9uVGltZXJEZWxheTsKKworICAgIHZvaWQgYW5pbWF0aW9uVGlt
ZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4qKTsKKyAgICB2b2lkIHN0b3BBbmltYXRp
b25UaW1lcklmTmVlZGVkKFBlckF4aXNEYXRhKik7CisgICAgdm9pZCBhbmltYXRlU2Nyb2xsKFBl
ckF4aXNEYXRhKik7CisKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6b250YWxEYXRhOworICAgIFBl
ckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
CShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsMjAgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4
aW11bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRo
KCksIG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCitpbnQgU2Nyb2xsVmlldzo6c2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAg
ICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXIt
PnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1
ZShvZmZzZXQueCgpLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisK
IHZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewog
ICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgpAQCAtNDQxLDcgKzQ1NSw3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSwgZmFsc2UpOwogICAgICAg
ICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAKICAgICB9IApAQCAtNDYz
LDcgKzQ3Nyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAg
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1
ZSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSwgZmFsc2UpOwog
ICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAgICB9CkBAIC02
NzMsNyArNjg3LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUK
ICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICBkZWx0YVkgPSAtZGVs
dGFZOwogICAgICAgICB9Ci0gICAgICAgIHNjcm9sbEJ5KEludFNpemUoLWRlbHRhWCwgLWRlbHRh
WSkpOworCisgICAgICAgIC8vIFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gc2Nyb2xsQnkoKSBpZiB0
aGVyZSBpcyBubyBzY3JvbGxiYXIgZm9yIGEgbm9uLXplcm8gZGVsdGE/CisgICAgICAgIGlmIChk
ZWx0YVkgJiYgbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsKKyAgICAgICAg
aWYgKGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgp
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDY2MTI2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDkgQEAgY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGlj
OgogICAgIH5TY3JvbGxWaWV3KCk7CiAKLSAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24u
IEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAgICAvLyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb25zLiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICAK
ICAgICAvLyBUaGUgd2luZG93IHRoYXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xs
VmlldyB3aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMiArMTAxLDEyIEBAIFNjcm9s
bGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlz
KTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6
OnNldFZhbHVlKGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9IG1h
eChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVl
KCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBz
YW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJvbVNj
cm9sbEFuaW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Miw5ICsxNDIsNiBA
QCBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogI2VuZGlm
CiAKLSAgICAvLyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgotICAgIGlmICgobV9vcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAg
fHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8
IGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBm
bG9hdCBzdGVwID0gMDsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBTY3Jv
bGxCeUxpbmU6ICAgICBzdGVwID0gbV9saW5lU3RlcDsgIGJyZWFrOwpAQCAtMTU0LDggKzE1MSwx
MCBAQCBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogICAg
IGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCiAg
ICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBz
dGVwLCBtdWx0aXBsaWVyKTsKIAotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9j
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90
YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkpLCAwLjBmKSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQ
b3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4obV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpLCBmYWxzZSk7CiB9
CiAKIHZvaWQgU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYigpCkBAIC0yODcsMTEgKzI4NiwxNCBAQCB2
b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBpZiAoZGVsdGEgPCAw
KQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAgICBpZiAoZGVsdGEp
Ci0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVs
dGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgc2V0Q3Vy
cmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkg
LyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9h
dCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAgaWYgKG5vdGlmeVNjcm9s
bEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+c2V0U2Nyb2xsUG9zaXRp
b25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisKICAgICBpZiAocG9zID09
IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzYsNyArMzM4LDcg
QEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcgogewogICAgIGlmICht
X3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxk
U25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2lu
LCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAKICAgICB2b2lkIHNldFN0ZXBzKGlu
dCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxzUGVyU3RlcCA9IDEpOwotICAgIGJv
b2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVlKGludCwgYm9vbCBmcm9tU2Nyb2xs
QW5pbWF0aW9uKTsKICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBpbnQg
dG90YWxTaXplKTsKICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2VkUG9z
ID0gcDsgfQogCkBAIC0xNjcsNyArMTY3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBi
b29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBib29sIHNldEN1cnJlbnRQb3MoZmxv
YXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAj
aWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtMzQsNyArMzYsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JvbGxiYXJDbGllbnQgewogcHVibGljOgorICAgIFNjcm9sbGJhckNsaWVudCgpIDogbV9zY3Jv
bGxBbmltYXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKSB7IH0KICAgICB2aXJ0dWFs
IH5TY3JvbGxiYXJDbGllbnQoKSB7IH0KKworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
c3RlcCwgZmxvYXQgbXVsdGlwbGllcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Njcm9sbEFu
aW1hdG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVy
KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQorICAgIHsKKyAgICAg
ICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9y
aWVudGF0aW9uLCBwb3MpOworICAgIH0KKworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwor
CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpID0gMDsKQEAgLTY3LDYgKzg1LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBv
aW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Nj
cm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJH
dGsuY3BwCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJh
ckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFNjcm9sbGJh
ckd0azo6c2V0RnJhbWVSZWN0KGNvbnN0IEluCiAKIHZvaWQgU2Nyb2xsYmFyR3RrOjpndGtWYWx1
ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFNjcm9sbGJhckd0ayogdGhhdCkKIHsKLSAgICB0aGF0
LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0
LT5tX2FkanVzdG1lbnQpKSk7CisgICAgdGhhdC0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pihn
dGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSksIGZhbHNlKTsKIH0K
IAogdm9pZCBTY3JvbGxiYXJHdGs6OnNldEVuYWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEg
Kzc2LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjpjb250ZXh0TWVudShjb25zdCBQbGF0Zm8KICAgICAg
ICAgY29uc3QgUVBvaW50IHBvcyA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldmVudC5w
b3MoKSk7CiAgICAgICAgIG1vdmVUaHVtYihob3Jpem9udGFsID8gcG9zLngoKSA6IHBvcy55KCkp
OwogICAgIH0gZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVG9wKQotICAgICAg
ICBzZXRWYWx1ZSgwKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDog
U2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVk
ID09IGFjdFNjcm9sbEJvdHRvbSkKLSAgICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKKyAgICAg
ICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VVcCkKLSAg
ICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQ
YWdlKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAs
IFNjcm9sbEJ5UGFnZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURv
d24pCiAgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3du
LCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9s
bFVwKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA2
NjEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2NCw2ICs2NjQsMTcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0
IEludFJlY3QmCiAgICAgICAgIDo6UmVsZWFzZURDKG1fcG9wdXAsIGxvY2FsREMpOwogfQogCitp
bnQgUG9wdXBNZW51V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9s
bGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
aWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0Lnko
KSwgdHJ1ZSk7Cit9CisKIHZvaWQgUG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
KiBzY3JvbGxCYXIpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9z
Y3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KIAogICAgIC8vIFNjcm9sbEJhckNsaWVudAor
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9u
KGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxi
YXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJl
dmlzaW9uIDY2MTI2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDE3IEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBh
aW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucworaW50IFJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsbFNjcm9sbGJhcikgJiYgbV92QmFyKSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgpIC0gbV92QmFy
LT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9s
bE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAo
bV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQor
CiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShy
ZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0ZToKICAgICBIVE1MRGF0YUdyaWRF
bGVtZW50KiBncmlkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRh
R3JpZEVsZW1lbnQqPihub2RlKCkpOyB9CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJm
YWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChT
Y3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNjYxMjYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NjMsOSArMTM2Myw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LAog
CiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAgICAgICAgaWYgKG1faEJhcikKLSAgICAg
ICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgICAgIG1f
aEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3ZC
YXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSk7CisgICAgICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSwgZmFsc2UpOwogICAgIH0KIAogICAgIC8vIFNj
aGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgpAQCAtMTYxOCw2ICsxNjE4LDIwIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICAvLyBGSVhNRSAoUmFkYXIg
NDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nh
cnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCitpbnQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92QmFyKS5nZXQoKTsKKyAgICByZXR1cm4g
c2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hCYXIpCisgICAg
ICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdkJhcikK
KyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBS
ZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNj
cm9sbCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0yMDY4LDcgKzIwODIsNyBAQCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIC8vIHNvIHRoaXMg
aXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nIChzZWUgaG93IHNjcm9sbFhPZmZz
ZXQoKQogICAgICAgICAvLyBkaWZmZXJzIGZyb20gc2Nyb2xsWU9mZnNldCgpIHRvIGdldCBhbiBp
ZGVhIG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBhbmQKICAgICAgICAgLy8gdmVydGljYWwgc2Nyb2xs
YmFycyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkpLgotICAgICAgICBtX2hCYXItPnNl
dFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xs
WE9mZnNldCgpLCBmYWxzZSk7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgJKHJldmlzaW9uIDY2MTI2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCiAgICAgLy8gU2Nyb2xsQmFyQ2xp
ZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlz
aW9uIDY2MTI2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRv
UmV2ZWFsRWxlbWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlmICht
X3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAgICAg
IG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC01MTIsNyArNTEyLDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJ
c1Zpc2libGUoaQogCiBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciwgTm9kZSoqKQogewotICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIG1fdkJhciAmJiBtX3ZC
YXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBzb3VyY2UsIG11bHRpcGxpZXIpOwog
fQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgp
CkBAIC01MjMsNiArNTIzLDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVu
c2lnbmUKICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0K
IAoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxT
Y3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlz
aWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFy
KQorICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lk
IFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIGludCBuZXdP
ZmZzZXQgPSBtX3ZCYXItPnZhbHVlKCk7CkBAIC01NzgsNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJM
aXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgICAgICByZXR1cm47CiAgICAgbV9pbmRl
eE9mZnNldCA9IGluZGV4OwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFs
dWUoaW5kZXgpOworICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4LCBmYWxzZSk7CiB9CiAK
IGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2
aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7
CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gNjYxMjcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgtMjYgIFBldGVyIEthc3Rp
bmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEg
V2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5j
cHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgQWxsb3cgd2hlZWwgc2Ny
b2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6
c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNj
cm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHNy
Yy9XZWJTY3JvbGxiYXJJbXBsLmg6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25z
LgorICAgICAgICAqIHNyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwOiBVcGRhdGUgY29t
bWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVlbEV2ZW50KToKKwogMjAxMC0wOC0yNiAg
UGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxi
YXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJh
ckltcGwuY3BwCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgaW50IFdlYlNj
cm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRW
YWx1ZShpbnQgcG9zaXRpb24pCiB7Ci0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9u
KTsKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRpb24sIGZhbHNlKTsKIH0KIAogdm9p
ZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUpCkBAIC0yMTgsNyAr
MjE4LDcgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29ucwogICAgICAg
ICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGEgKj0gLTE7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUobV9zY3Jv
bGxiYXItPnZhbHVlKCkgLSBkZWx0YSk7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+c2Nyb2xs
KChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IFdl
YkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Nyb2xsQnlQ
aXhlbCwgZGVsdGEpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAt
MjYyLDYgKzI2MiwxNiBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihjb25zdCBX
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsU2l6
ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAg
ICByZXR1cm4gKG9yaWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKSA/ICht
X3Njcm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAw
OworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbGJhci0+
c2V0VmFsdWUoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFdlYlNjcm9s
bGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQogewogICAgIG1fY2xp
ZW50LT52YWx1ZUNoYW5nZWQodGhpcyk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9s
bGJhckltcGwuaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwog
CiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2Vi
Q29yZTo6U2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
d2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDY2MTI2KQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MDMsNiArNDAzLDkgQEAgV2ViTW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZl
bnRGYWN0b3J5OgogICAgIC8vIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0
LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aCBzb21ld2hhdAogICAgIC8vIGxhcmdlciBzY3JvbGwg
dmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMCBweCBwZXIK
ICAgICAvLyB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBs
aW5lcyBwZXIgd2hlZWwgdGljaykuCisgICAgLy8gRXZlbiB0aG91Z2ggd2UgaGF2ZSBzbW9vdGgg
c2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UgYXMgSUUKKyAgICAvLyBiZWNh
dXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhlciB0aGFuIHlv
dSB3YW50IHdoaWxlCisgICAgLy8gcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAgICAgd2hlZWxE
ZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdoZWVsRGVsdGE7
CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY2MTI3KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI2ICBQZXRlciBLYXN0aW5nICA8cGthc3Rp
bmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2Vi
RnJhbWU6OnNldFNjcm9sbEJhclZhbHVlKToKKwogMjAxMC0wOC0yNiAgWXVyeSBTZW1pa2hhdHNr
eSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZXZlcnQgcjY2
MTAzIHNpbmNlIFF0IHRlc3RzIGFyZSBmYWlsaW5nLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2
aXNpb24gNjYxMjYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyOSw3ICs5MjksNyBAQCB2b2lkIFFXZWJGcmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUo
UXQ6Ok9yCiAgICAgICAgICAgICB2YWx1ZSA9IDA7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4g
c2Nyb2xsQmFyTWF4aW11bShvcmllbnRhdGlvbikpCiAgICAgICAgICAgICB2YWx1ZSA9IHNjcm9s
bEJhck1heGltdW0ob3JpZW50YXRpb24pOwotICAgICAgICBzYi0+c2V0VmFsdWUodmFsdWUpOwor
ICAgICAgICBzYi0+c2V0VmFsdWUodmFsdWUsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NjEyNikKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMy
MzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQgc291cmNl
cy4KKyAgICAgICAgKFdlYlZpZXc6OmtleURvd24pOgorCiAyMDEwLTA4LTI2ICBZdXJ5IFNlbWlr
aGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJldmVy
dCByNjYxMDMgc2luY2UgUXQgdGVzdHMgYXJlIGZhaWxpbmcuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65613</attachid>
            <date>2010-08-26 13:44:38 -0700</date>
            <delta_ts>2010-08-26 15:24:24 -0700</delta_ts>
            <desc>patch v5.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>60805</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MTI3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNiAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjEy
NikKKysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgaWYgYnVpbGRf
cG9ydCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAg
ICAgICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVO
b2RlQ2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAg
ICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAg
ICAgICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0
IGNyYXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNl
IHRoZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAg
ICAgICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTAp
LgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2MTI3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3NyBAQAorMjAxMC0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEFkZCBXaW5kb3dzIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6U2Nyb2xsYmFyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcDoKKyAgICAgICAgKFNj
cm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJlbmNlIHRvIHNldFZhbHVlKCkuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRNZW51KToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNjcm9sbFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0Qm94OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Ny
b2xsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNj
cm9sbFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorCiAyMDEwLTA4LTI2ICBQZXRlciBLYXN0
aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY2MTI2KQorKysgV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTk0Nyw2ICsxOTQ3LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU1NMS2V5R2Vu
ZXJhdG9yLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmggXApAQCAtMjU2Niw2ICsyNTY4LDggQEAgZW5kaWYKIAogaWYg
VEFSR0VUX1dJTjMyCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JXaW4uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2lu
LmggXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwKIAlXZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKIAlXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDY2MTI2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMxMDks
NiArMzEwOSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmgnLApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNiArMTIyMiw4IEBACiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAogICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcv
U2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1RyYW5zcGFy
ZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjQ5LDYgKzI0MjQ5LDIyIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTEwOSw2ICs1MTA5LDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVy
LmggKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAq
LzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAq
LzsgfTsKKwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBE
OTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBE
OTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRD
b250cm9sbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdG
QTUxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzEx
MDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdG
QTYxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAw
QTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDkzNiw2ICsxMDkzOCw4IEBACiAJCUM1
RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3QjEwRDk5
QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENv
bnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENv
bnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3RkEzMTIy
MDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8q
IERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2Njc1LDYgKzE2Njc5LDggQEAKIAkJCQkxQzYzQTI0NjBGNzE2NDY2MDBDMDlENUEg
LyogUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQk1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2No
ZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xs
QW5pbWF0b3IuY3BwICovLAorCQkJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxB
bmltYXRvci5oICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIu
aCAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50Lmgg
Ki8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8s
CkBAIC0xOTc4OSw2ICsxOTc5NSw3IEBACiAJCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8q
IFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0Q0MwRTIwRUQzOUQ2RjAwQTY1
OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMjhDMjg0NTEwRDgyNTAw
MDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDQTNCRjY3
RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OUI4MDgyNDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMjMyMyw2ICsyMjMzMCw3IEBACiAJCQkJOUY3MjMwNTAxMTE4
NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
MjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxi
YXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgzNjgwODAwMzE5NzE3IC8qIFNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUY4NjlGMEU4
NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKwor
I2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIU9TKFdJTkRPV1MpCitTY3JvbGxBbmltYXRvciogU2Ny
b2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1
cm4gbmV3IFNjcm9sbEFuaW1hdG9yKGNsaWVudCk7Cit9CisjZW5kaWYKKworYm9vbCBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBmbG9hdCog
Y3VycmVudFBvcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2N1
cnJlbnRQb3NYIDogJm1fY3VycmVudFBvc1k7CisgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgo
c3RkOjptaW4oKmN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxm
bG9hdD4obV9jbGllbnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlm
ICgqY3VycmVudFBvcyA9PSBuZXdQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqY3Vy
cmVudFBvcyA9IG5ld1BvczsKKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3Rv
cEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQor
eworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBt
X2N1cnJlbnRQb3NYID0gcG9zOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50UG9zWSA9IHBv
czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yX2gKKyNkZWZpbmUgU2Ny
b2xsQW5pbWF0b3JfaAorCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJDbGllbnQ7CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9y
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2Nyb2xsQW5pbWF0b3IqIGNyZWF0ZShTY3JvbGxiYXJD
bGllbnQqKTsKKworICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGJhckNsaWVudCogY2xpZW50KSA6
IG1fY2xpZW50KGNsaWVudCkgeyB9CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3IoKSB7IH0K
KworICAgIC8vIENvbXB1dGVzIGEgc2Nyb2xsIGRlc3RpbmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGFy
YW1ldGVycy4gIFJldHVybnMgZmFsc2UgaWYKKyAgICAvLyBhbHJlYWR5IGF0IHRoZSBkZXN0aW5h
dGlvbi4gIE90aGVyd2lzZSwgc3RhcnRzIHNjcm9sbGluZyB0b3dhcmRzIHRoZQorICAgIC8vIGRl
c3RpbmF0aW9uIGFuZCByZXR1cm5zIHRydWUuICBTY3JvbGxpbmcgbWF5IGJlIGltbWVkaWF0ZSBv
ciBhbmltYXRlZC4KKyAgICAvLyBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBhbHdheXMg
c2Nyb2xscyBpbW1lZGlhdGVseSwgbmV2ZXIgYW5pbWF0ZXMuCisgICAgdmlydHVhbCBib29sIHNj
cm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAs
IGZsb2F0IG11bHRpcGxpZXIpOworCisgICAgLy8gU3RvcHMgYW55IGFuaW1hdGlvbiBpbiB0aGUg
Z2l2ZW4gZGlyZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmltYXRvcgorICAgIC8vIHdp
dGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhpcyBkb2VzIG5vdCBjYXVzZSBhIGNh
bGxiYWNrIHRvIHRoZQorICAgIC8vIFNjcm9sbGJhckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uLCBm
bG9hdCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50OworICAg
IGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBv
cmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAvLyBzdWJjbGFzcyBjb2Rl
IGNvbXBsZXhpdHkuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKClByb3Bl
cnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JXaW4uaCIKKworI2luY2x1
ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBTY3Jv
bGxBbmltYXRvcldpbihjbGllbnQpOworfQorCitjb25zdCBkb3VibGUgU2Nyb2xsQW5pbWF0b3JX
aW46OmFuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAxOworCitTY3JvbGxBbmltYXRvcldpbjo6UGVy
QXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJlbnQsIGZsb2F0KiBj
dXJyZW50UG9zKQorICAgIDogbV9jdXJyZW50UG9zKGN1cnJlbnRQb3MpCisgICAgLCBtX2Rlc2ly
ZWRQb3MoMCkKKyAgICAsIG1fY3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX2Rlc2lyZWRWZWxv
Y2l0eSgwKQorICAgICwgbV9sYXN0QW5pbWF0aW9uVGltZSgwKQorICAgICwgbV9hbmltYXRpb25U
aW1lcihwYXJlbnQsICZTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKK3sK
K30KKworCitTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBTY3JvbGxBbmltYXRvcihjbGllbnQpCisgICAgLCBtX2hvcml6
b250YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYKQorICAgICwgbV92ZXJ0aWNhbERhdGEodGhp
cywgJm1fY3VycmVudFBvc1kpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yV2luOjp+U2Nyb2xsQW5p
bWF0b3JXaW4oKQoreworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250
YWxEYXRhKTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEp
OworfQorCitib29sIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIC8vIERvbid0IGFuaW1hdGUganVtcGluZyB0byB0
aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGdyYW51bGFyaXR5
ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisKKyAgICAv
LyBUaGlzIGlzIGFuIGFuaW1hdGFibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBzY3JvbGwgZGVs
dGEuCisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3Jv
bGxiYXIpID8gJm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7CisgICAgZmxvYXQg
bmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsgKHN0ZXAgKiBt
dWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVu
dGF0aW9uKSkpLCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IG5ld1BvczsK
KworICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAgIGlmICgqZGF0
YS0+bV9jdXJyZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGJvb2wgYWxyZWFkeUFuaW1hdGluZyA9IGRhdGEtPm1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKTsKKyAgICAvLyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IHNvdXJj
ZXMgb2Ygc2Nyb2xsIHJlcXVlc3RzLiAgV2Ugd2FudCB0bworICAgIC8vIG1ha2UgYm90aCBrZXli
b2FyZCBhbmQgd2hlZWwtZ2VuZXJhdGVkIHNjcm9sbCByZXF1ZXN0cyAod2hpY2ggY2FuIGNvbWUg
YXQKKyAgICAvLyB1bnByZWRpY3RhYmxlIHJhdGVzKSBhbmQgYXV0b3Njcm9sbGluZyBmcm9tIGhv
bGRpbmcgZG93biB0aGUgbW91c2UgYnV0dG9uCisgICAgLy8gb24gYSBzY3JvbGxiYXIgcGFydCAo
d2hlcmUgdGhlIHJlcXVlc3QgcmF0ZSBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUKKyAgICAvLyBz
Y3JvbGxiYXIgdGhlbWUpIGZlZWwgc21vb3RoLCByZXNwb25zaXZlLCBhbmQgc2ltaWxhci4KKyAg
ICAvLworICAgIC8vIFdoZW4gYXV0b3Njcm9sbGluZywgdGhlIHNjcm9sbGJhcidzIGF1dG9zY3Jv
bGwgdGltZXIgd2lsbCBjYWxsIHVzIHRvCisgICAgLy8gaW5jcmVtZW50IHRoZSBkZXNpcmVkIHBv
c2l0aW9uIGJ5IHxzdGVwfCAod2l0aCB8bXVsdGlwbGllcnwgPT0gMSkgZXZlcnkKKyAgICAvLyBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBzZWNv
bmRzLiAgSWYgd2Ugc2V0CisgICAgLy8gdGhlIGRlc2lyZWQgdmVsb2NpdHkgdG8gZXhhY3RseSB0
aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbCBuZWl0aGVyCisgICAgLy8gcmFjZSBhaGVh
ZCAoYW5kIHRoZW4gaGF2ZSB0byBzbG93IGRvd24pIG5vciBpbmNyZWFzaW5nbHkgbGFnIGJlaGlu
ZCwgYnV0CisgICAgLy8gd2lsbCBiZSBzbW9vdGggYW5kIHN5bmNocm9uaXplZC4KKyAgICAvLwor
ICAgIC8vIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBhY2NlbGVyYXRpb24gcGVyaW9kLCB0aGUg
Y3VycmVudCBwb3NpdGlvbiBpbgorICAgIC8vIHRoaXMgY2FzZSB3b3VsZCBsYWcgdGhlIGRlc2ly
ZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50IGFtb3VudCAoc2VlCisgICAgLy8gY29tbWVudHMg
b24gYW5pbWF0ZVNjcm9sbCgpKTsgdGhlIGV4YWN0IGFtb3VudCBpcyBnaXZlbiBieQorICAgIC8v
ICAgbGFnID0gfHN0ZXB8IC0gdigwLjV0QSArIHREKQorICAgIC8vIFdoZXJlCisgICAgLy8gICB2
ID0gVGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwKKyAgICAvLyAgICAgICB8c3RlcHwgLyBTY3Jv
bGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKQorICAgIC8v
ICAgdEEgPSBhY2NlbGVyYXRpb25UaW1lKCkKKyAgICAvLyAgIHREID0gVGhlIHRpbWUgd2UgcHJl
dGVuZCBoYXMgYWxyZWFkeSBwYXNzZWQgd2hlbiBzdGFydGluZyB0byBzY3JvbGwsCisgICAgLy8g
ICAgICAgIHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vCisgICAgLy8gVGhpcyBsYWcgcHJv
dmlkZXMgc29tZSBidWZmZXIgYWdhaW5zdCB0aW1lciBqaXR0ZXIgc28gd2UncmUgbGVzcyBsaWtl
bHkKKyAgICAvLyB0byBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYW5kIHN0b3AgKGFuZCB0aHVz
IGhhdmUgdG8gcmUtYWNjZWxlcmF0ZSwKKyAgICAvLyBjYXVzaW5nIGEgdmlzaWJsZSBoaXRjaCkg
d2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQgYXV0b3Njcm9sbCBpbmNyZW1lbnQuCisgICAgLy8K
KyAgICAvLyBUaHVzLCBmb3IgYXV0b3Njcm9sbC10aW1lci10cmlnZ2VyZWQgcmVxdWVzdHMsIHRo
ZSBpZGVhbCBzdGVhZHktc3RhdGUKKyAgICAvLyBkaXN0YW5jZSB0byB0cmF2ZWwgaW4gZWFjaCB0
aW1lIGludGVydmFsIGlzOgorICAgIC8vICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9IHN0ZXA7Cisg
ICAgLy8gTm90ZSB0aGF0IHdoZW4gd2UncmUgbm90IGFscmVhZHkgYW5pbWF0aW5nLCB0aGlzIGlz
IGV4YWN0bHkgdGhlIHNhbWUgYXMKKyAgICAvLyB0aGUgZGlzdGFuY2UgdG8gdGhlIHRhcmdldCBw
b3NpdGlvbi4gIFdlJ2xsIHJldHVybiB0byB0aGF0IGluIGEgbW9tZW50LgorICAgIC8vCisgICAg
Ly8gRm9yIGtleWJvYXJkIGFuZCB3aGVlbCBzY3JvbGxzLCB3ZSBkb24ndCBrbm93IHdoZW4gdGhl
IG5leHQgaW5jcmVtZW50CisgICAgLy8gd2lsbCBiZSByZXF1ZXN0ZWQuICBJZiB3ZSBzZXQgdGhl
IHRhcmdldCB2ZWxvY2l0eSBiYXNlZCBvbiBob3cgZmFyIGF3YXkKKyAgICAvLyBmcm9tIHRoZSB0
YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBrZXlib2FyZC93aGVlbCBldmVudHMgdGhh
dCBjb21lCisgICAgLy8gZmFzdGVyIHRoYW4gdGhlIGF1dG9zY3JvbGwgZGVsYXksIHdlJ2xsIGFz
eW1wdG90aWNhbGx5IGFwcHJvYWNoIHRoZQorICAgIC8vIHZlbG9jaXR5IG5lZWRlZCB0byBzdGF5
IHNtb290aGx5IGluIHN5bmMgd2l0aCB0aGUgdXNlcidzIGFjdGlvbnM7IGZvcgorICAgIC8vIGV2
ZW50cyB0aGF0IGNvbWUgc2xvd2VyLCB3ZSdsbCBzY3JvbGwgb25lIGluY3JlbWVudCBhbmQgdGhl
biBwYXVzZSB1bnRpbAorICAgIC8vIHRoZSBuZXh0IGV2ZW50IGZpcmVzLgorICAgIGZsb2F0IGFu
aW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcyk7CisgICAgLy8g
SWYgYSBrZXkgaXMgaGVsZCBkb3duIChvciB0aGUgd2hlZWwgY29udGludWFsbHkgc3B1biksIHRo
ZW4gb25jZSB3ZSBoYXZlCisgICAgLy8gcmVhY2hlZCBhIHZlbG9jaXR5IGNsb3NlIHRvIHRoZSBz
dGVhZHktc3RhdGUgdmVsb2NpdHksIHdlJ3JlIGxpa2VseSB0bworICAgIC8vIGhpdCB0aGUgZGVz
aXJlZCBwb3NpdGlvbiBhdCBhcm91bmQgdGhlIHNhbWUgdGltZSB3ZSdkIGV4cGVjdCB0aGUgbmV4
dAorICAgIC8vIGluY3JlbWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVzZSBpdCBsZWFkcyB0byBo
aXRjaGluZyBhcyBkZXNjcmliZWQgYWJvdmUKKyAgICAvLyAoaWYgYXV0b3Njcm9sbC1iYXNlZCBy
ZXF1ZXN0cyBkaWRuJ3QgcmVzdWx0IGluIGEgc21hbGwgYW1vdW50IG9mIGNvbnN0YW50CisgICAg
Ly8gbGFnKS4gIFNvIGlmIHdlJ3JlIGNhbGxlZCBhZ2FpbiB3aGlsZSBhbHJlYWR5IGFuaW1hdGlu
Zywgd2Ugd2FudCB0byB0cmltCisgICAgLy8gdGhlIGFuaW1hdGlvblN0ZXAgc2xpZ2h0bHkgdG8g
bWFpbnRhaW4gbGFnIGxpa2Ugd2hhdCdzIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAvLyAoSSBzYXkg
Im1haW50YWluIiBzaW5jZSB3ZSdsbCBhbHJlYWR5IGJlIGxhZ2dlZCBkdWUgdG8gdGhlIGFjY2Vs
ZXJhdGlvbgorICAgIC8vIGR1cmluZyB0aGUgZmlyc3Qgc2Nyb2xsIHBlcmlvZC4pCisgICAgLy8K
KyAgICAvLyBSZW1lbWJlciB0aGF0IHRyaW1taW5nIHdvbid0IGNhdXNlIHVzIHRvIGZhbGwgc3Rl
YWRpbHkgZnVydGhlciBiZWhpbmQKKyAgICAvLyBoZXJlLCBiZWNhdXNlIHRoZSBmdXJ0aGVyIGJl
aGluZCB3ZSBhcmUsIHRoZSBsYXJnZXIgdGhlIGJhc2Ugc3RlcCB2YWx1ZQorICAgIC8vIGFib3Zl
LiAgR2l2ZW4gdGhlIHNjcm9sbGluZyBhbGdvcml0aG0gaW4gYW5pbWF0ZVNjcm9sbCgpLCB0aGUg
cHJhY3RpY2FsCisgICAgLy8gZWZmZWN0IHdpbGwgYWN0dWFsbHkgYmUgdGhhdCwgYXNzdW1pbmcg
YSBjb25zdGFudCB0cmltIGZhY3Rvciwgd2UnbGwgbGFnCisgICAgLy8gYnkgYSBjb25zdGFudCBh
bW91bnQgZGVwZW5kaW5nIG9uIHRoZSByYXRlIGF0IHdoaWNoIGluY3JlbWVudHMgb2NjdXIKKyAg
ICAvLyBjb21wYXJlZCB0byB0aGUgYXV0b3Njcm9sbCB0aW1lciBkZWxheS4gIFRoZSBleGFjdCBs
YWcgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgociAvIGspIC0gMSkKKyAg
ICAvLyBXaGVyZQorICAgIC8vICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Njcm9sbCByZXBl
YXQgZGVsYXksCisgICAgLy8gICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1
dG9zY3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQorICAgIC8vICAgICAgIGtleS93aGVlbCByZXBl
YXQgZGVsYXkgKGkuZS4gPiAxIHdoZW4ga2V5cyByZXBlYXQgZmFzdGVyKQorICAgIC8vICAgayA9
IFRoZSB2ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAgLy8KKyAgICAvLyBX
ZSB3YW50IHRvIGNob29zZSB0aGUgdHJpbSBmYWN0b3Igc3VjaCB0aGF0IGZvciBjYWxscyB0aGF0
IGNvbWUgYXQgdGhlCisgICAgLy8gYXV0b3Njcm9sbCB0aW1lciByYXRlLCB3ZSdsbCB3aW5kIHVw
IHdpdGggdGhlIHNhbWUgbGFnIGFzIGluIHRoZQorICAgIC8vICJwZXJmZWN0IiBjYXNlIGRlc2Ny
aWJlZCBhYm92ZSAob3IsIHRvIHB1dCBpdCBhbm90aGVyIHdheSwgd2UnbGwgZW5kIHVwCisgICAg
Ly8gd2l0aCB8YW5pbWF0aW9uU3RlcHwgPT0gfHN0ZXB8ICogfG11bHRpcGxpZXJ8IGRlc3BpdGUg
dGhlIGFjdHVhbCBkaXN0YW5jZQorICAgIC8vIGNhbGN1bGF0ZWQgYWJvdmUgYmVpbmcgbGFyZ2Vy
IHRoYW4gdGhhdCkuICBUaGlzIHdpbGwgcmVzdWx0IGluICJwZXJmZWN0IgorICAgIC8vIGJlaGF2
aW9yIGZvciBhdXRvc2Nyb2xsaW5nIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpYWwtY2FzZSBpdC4K
KyAgICBpZiAoYWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0aW9uU3RlcCAvPSAoMi4w
IC0gKCgxLjAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVy
RGVsYXkoKSkgKiAoMC41ICogYWNjZWxlcmF0aW9uVGltZSgpICsgYW5pbWF0aW9uVGltZXJEZWxh
eSkpKTsKKyAgICAvLyBUaGUgcmVzdWx0IG9mIGFsbCB0aGlzIGlzIHRoYXQgc2luZ2xlIGtleXBy
ZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwKKyAgICAvLyBzY3JvbGwgaW4gdGhlIHNhbWUgdGlt
ZSBwZXJpb2QgYXMgc2luZ2xlIHByZXNzZXMgb2Ygc2Nyb2xsYmFyIGVsZW1lbnRzOworICAgIC8v
IGhvbGRpbmcgdGhlIG1vdXNlIGRvd24gb24gYSBzY3JvbGxiYXIgcGFydCB3aWxsIHNjcm9sbCBh
cyBmYXN0IGFzCisgICAgLy8gcG9zc2libGUgd2l0aG91dCBoaXRjaGluZzsgYW5kIG90aGVyIHJl
cGVhdGVkIHNjcm9sbCBldmVudHMgd2lsbCBhbHNvCisgICAgLy8gc2Nyb2xsIHdpdGggdGhlIHNh
bWUgdGltZSBsYWcgYXMgaG9sZGluZyBkb3duIHRoZSBtb3VzZSBvbiBhIHNjcm9sbGJhcgorICAg
IC8vIHBhcnQuCisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRpb25TdGVwIC8g
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7CisK
KyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcsIHN0YXJ0LgorICAgIGlmICgh
YWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9sbChkYXRhKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBw
b3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YTsKKyAgICBz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICAqZGF0YS0+bV9jdXJyZW50UG9z
ID0gcG9zOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2N1cnJl
bnRWZWxvY2l0eSA9IDA7CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworfQorCisv
LyBzdGF0aWMKK2RvdWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YWNjZWxlcmF0aW9uVGltZSgpCit7
CisgICAgLy8gV2UgZWxlY3QgdG8gdXNlIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5h
dXRvc2Nyb2xsVGltZXJEZWxheSgpIGFzCisgICAgLy8gdGhlIGxlbmd0aCBvZiB0aW1lIHdlJ2xs
IHRha2UgdG8gYWNjZWxlcmF0ZSBmcm9tIDAgdG8gb3VyIHRhcmdldAorICAgIC8vIHZlbG9jaXR5
LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUgd291bGQgcHJvZHVjZSBhIG1vcmUgcHJvbm91bmNl
ZAorICAgIC8vIGFjY2VsZXJhdGlvbiBlZmZlY3QuCisgICAgcmV0dXJuIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpOworfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2lu
PiogdGltZXIpCit7CisgICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9yaXpvbnRhbERh
dGEubV9hbmltYXRpb25UaW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0
YSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKFBlckF4aXNEYXRhKiBkYXRhKQoreworICAgIGlmIChkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhKiBkYXRh
KQoreworICAgIC8vIE5vdGUgb24gc21vb3RoIHNjcm9sbGluZyBwZXJmIHZlcnN1cyBub24tc21v
b3RoIHNjcm9sbGluZyBwZXJmOgorICAgIC8vIFRoZSB0b3RhbCB0aW1lIHRvIHBlcmZvcm0gYSBj
b21wbGV0ZSBzY3JvbGwgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIHQgPSB0MCArIDAuNXRBIC0gdEQg
KyB0UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBlcmZvcm0gdGhl
IHNjcm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0gVGhlIGFjY2Vs
ZXJhdGlvbiB0aW1lLAorICAgIC8vICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSAoc2VlIGJlbG93KQorICAgIC8vICAgdEQgPSB8YW5p
bWF0aW9uVGltZXJEZWxheXwKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAgLy8gICAgICAgIHNpbmds
ZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVlIHRvIGNhbGxpbmcKKyAg
ICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBmb3Igc2ltcGxlIHBhZ2Vz
LCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMpLgorICAgIC8vCisgICAg
Ly8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhlIHRvdGFsIGxhZyAoYXMg
dXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgbmVnbGlnaWJsZSBmb3Igc2ltcGxlIHBhZ2Vz
IGFuZCByb3VnaGx5IHRTIGZvciBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dAorICAgIC8vIGtub3dp
bmcgaW4gYWR2YW5jZSBob3cgbGFyZ2UgdFMgaXMgaXQncyBoYXJkIHRvIGRvIGJldHRlciB0aGFu
IHRoaXMuCisgICAgLy8gUGVyaGFwcyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIgcHJldmlvdXMg
dmFsdWVzIGFuZCBmb3J3YXJkLWNvbXBlbnNhdGUuCisKKworICAgIC8vIFdlIHdhbnQgdG8gdXBk
YXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIHRpbWUgaXQncyBiZWVuIHNpbmNl
CisgICAgLy8gb3VyIGxhc3QgdXBkYXRlLiAgVGhpcyBtYXkgYmUgbG9uZ2VyIHRoYW4gb3VyIGlk
ZWFsIHRpbWUsIGVzcGVjaWFsbHkgaWYKKyAgICAvLyB0aGUgcGFnZSBpcyBjb21wbGV4IG9yIHRo
ZSBzeXN0ZW0gaXMgc2xvdy4KKyAgICAvLworICAgIC8vIFRvIGF2b2lkIGZlZWxpbmcgbGFnZ3ks
IGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xsaW5nIHdlIHByZXRlbmQKKyAgICAv
LyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUgaWRlYWwgaW50ZXJ2YWwsIHNvIHRo
YXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29tZSBkaXN0YW5jZSBpbW1lZGlhdGVs
eS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSkgOiBh
bmltYXRpb25UaW1lckRlbGF5OworCisgICAgLy8gRmlndXJlIG91dCBob3cgZmFyIHdlJ3ZlIGFj
dHVhbGx5IHRyYXZlbGVkIGFuZCB1cGRhdGUgb3VyIGN1cnJlbnQKKyAgICAvLyB2ZWxvY2l0eS4K
KyAgICBmbG9hdCBkaXN0YW5jZVRyYXZlbGVkOworICAgIGlmIChkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSA8IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgIC8vIFdlIGFjY2VsZXJh
dGUgYXQgYSBjb25zdGFudCByYXRlIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHZlbG9jaXR5
LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2Np
dHkgLyBhY2NlbGVyYXRpb25UaW1lKCk7CisKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGV0aGVy
IGNvbnRhbnQgYWNjZWxlcmF0aW9uIGhhcyBjYXVzZWQgdXMgdG8gcmVhY2ggb3VyCisgICAgICAg
IC8vIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgcG90ZW50aWFsVmVsb2NpdHlDaGFu
Z2UgPSBhY2NlbGVyYXRpb25SYXRlICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICBmbG9h
dCBwb3RlbnRpYWxOZXdWZWxvY2l0eSA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsgcG90ZW50
aWFsVmVsb2NpdHlDaGFuZ2U7CisgICAgICAgIGlmIChwb3RlbnRpYWxOZXdWZWxvY2l0eSA+IGRh
dGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSB0
YXJnZXQgdmVsb2NpdHkgYXQgc29tZSBwb2ludCBiZXR3ZWVuIG91ciBsYXN0CisgICAgICAgICAg
ICAvLyB1cGRhdGUgYW5kIG5vdy4gIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBjYW4gYmUgY2FsY3Vs
YXRlZCBpbiB0d28KKyAgICAgICAgICAgIC8vIHBpZWNlczogdGhlIGRpc3RhbmNlIHRyYXZlbGVk
IHdoaWxlIGFjY2VsZXJhdGluZywgYW5kIHRoZQorICAgICAgICAgICAgLy8gZGlzdGFuY2UgdHJh
dmVsZWQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgICAgIGZs
b2F0IGFjdHVhbFZlbG9jaXR5Q2hhbmdlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgLSBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eTsKKyAgICAgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvbkludGVy
dmFsID0gYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyBhY2NlbGVyYXRpb25SYXRlOworICAgICAgICAg
ICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIHVuZGVyIGNvbnN0YW50IGFjY2VsZXJhdGlvbiBp
cyB0aGUgYXJlYQorICAgICAgICAgICAgLy8gdW5kZXIgYSBsaW5lIHNlZ21lbnQgd2l0aCBhIGNv
bnN0YW50IHJpc2luZyBzbG9wZS4gIEJyZWFrIHRoaXMKKyAgICAgICAgICAgIC8vIGludG8gYSB0
cmlhbmd1bGFyIHBvcnRpb24gYXRvcCBhIHJlY3Rhbmd1bGFyIHBvcnRpb24gYW5kIHN1bS4KKyAg
ICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ICsg
KGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogYWNjZWxlcmF0aW9uSW50ZXJ2YWwpOworICAg
ICAgICAgICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGF0IHRoZSB0YXJnZXQgdmVsb2NpdHkg
aXMgc2ltcGx5CisgICAgICAgICAgICAvLyAodGFyZ2V0IHZlbG9jaXR5KSAqIChyZW1haW5pbmcg
dGltZSBhZnRlciBhY2NlbGVyYXRpbmcpLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCAr
PSAoZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgKiAobGFzdFNjcm9sbEludGVydmFsIC0gYWNjZWxl
cmF0aW9uSW50ZXJ2YWwpKTsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0g
ZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBDb25zdGFudCBhY2NlbGVyYXRpb24gdGhyb3VnaCB0aGUgZW50aXJlIHRpbWUgaW50ZXJ2YWwu
CisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKGRhdGEtPm1fY3VycmVudFZlbG9jaXR5
ICsgKHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogbGFzdFNjcm9sbEludGVydmFsOwor
ICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBwb3RlbnRpYWxOZXdWZWxvY2l0
eTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVh
Y2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5LCBzbyB0aGUgZGlzdGFuY2Ugd2UndmUKKyAgICAgICAg
Ly8gdHJhdmVsZWQgaXMgc2ltcGx5IChjdXJyZW50IHZlbG9jaXR5KSAqIChlbGFwc2VkIHRpbWUp
LgorICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIC8vIElmIG91ciBkZXNpcmVkIHZlbG9jaXR5IGhh
cyBkZWNyZWFzZWQsIGRyb3AgdGhlIGN1cnJlbnQgdmVsb2NpdHkgdG9vLgorICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5OworICAgIH0KKwor
ICAgIC8vIE5vdyB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgZGlzdGFu
Y2UgdHJhdmVsZWQuCisgICAgaWYgKGRpc3RhbmNlVHJhdmVsZWQgPj0gYWJzKGRhdGEtPm1fZGVz
aXJlZFBvcyAtICpkYXRhLT5tX2N1cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdlJ3ZlIHRyYXZl
bGVkIGZhciBlbm91Z2ggdG8gcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBTdG9wIHNtb290
aAorICAgICAgICAvLyBzY3JvbGxpbmcuCisgICAgICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBk
YXRhLT5tX2Rlc2lyZWRQb3M7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsK
KyAgICAgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCB5ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0b3dhcmRzIGl0
IGFuZCBzZXQgdXAgdGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoKmRh
dGEtPm1fY3VycmVudFBvcyA+IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAgICAgIGRpc3Rh
bmNlVHJhdmVsZWQgPSAtZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgKmRhdGEtPm1fY3VycmVu
dFBvcyArPSBkaXN0YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICAgICAgZGF0YS0+bV9sYXN0
QW5pbWF0aW9uVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAgbV9jbGllbnQt
PnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQoKm1faG9yaXpvbnRhbERhdGEu
bV9jdXJyZW50UG9zLCAqbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50UG9zKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcldpbl9oCisjZGVmaW5lIFNj
cm9sbEFuaW1hdG9yV2luX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxBbmltYXRv
cldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2Nyb2xsQW5pbWF0
b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JXaW4o
KTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0
aW9uLCBmbG9hdCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBlckF4aXNEYXRhIHsKKyAgICAg
ICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JXaW4qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQ
b3MpOworCisgICAgICAgIGZsb2F0KiBtX2N1cnJlbnRQb3M7CisgICAgICAgIGZsb2F0IG1fZGVz
aXJlZFBvczsKKyAgICAgICAgZmxvYXQgbV9jdXJyZW50VmVsb2NpdHk7CisgICAgICAgIGZsb2F0
IG1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uVGltZTsK
KyAgICAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+IG1fYW5pbWF0aW9uVGltZXI7CisgICAg
fTsKKworICAgIHN0YXRpYyBkb3VibGUgYWNjZWxlcmF0aW9uVGltZSgpOworICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgYW5pbWF0aW9uVGltZXJEZWxheTsKKworICAgIHZvaWQgYW5pbWF0aW9uVGlt
ZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4qKTsKKyAgICB2b2lkIHN0b3BBbmltYXRp
b25UaW1lcklmTmVlZGVkKFBlckF4aXNEYXRhKik7CisgICAgdm9pZCBhbmltYXRlU2Nyb2xsKFBl
ckF4aXNEYXRhKik7CisKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6b250YWxEYXRhOworICAgIFBl
ckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
CShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsMjAgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4
aW11bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRo
KCksIG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCitpbnQgU2Nyb2xsVmlldzo6c2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAg
ICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXIt
PnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1
ZShvZmZzZXQueCgpLCB0cnVlKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisK
IHZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewog
ICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgpAQCAtNDQxLDcgKzQ1NSw3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSwgZmFsc2UpOwogICAgICAg
ICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAKICAgICB9IApAQCAtNDYz
LDcgKzQ3Nyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAg
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1
ZSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSwgZmFsc2UpOwog
ICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAgICB9CkBAIC02
NzMsNyArNjg3LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUK
ICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICBkZWx0YVkgPSAtZGVs
dGFZOwogICAgICAgICB9Ci0gICAgICAgIHNjcm9sbEJ5KEludFNpemUoLWRlbHRhWCwgLWRlbHRh
WSkpOworCisgICAgICAgIC8vIFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gc2Nyb2xsQnkoKSBpZiB0
aGVyZSBpcyBubyBzY3JvbGxiYXIgZm9yIGEgbm9uLXplcm8gZGVsdGE/CisgICAgICAgIGlmIChk
ZWx0YVkgJiYgbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsKKyAgICAgICAg
aWYgKGRlbHRhWSAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgp
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDY2MTI2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDkgQEAgY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGlj
OgogICAgIH5TY3JvbGxWaWV3KCk7CiAKLSAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24u
IEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAgICAvLyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb25zLiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICAK
ICAgICAvLyBUaGUgd2luZG93IHRoYXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xs
VmlldyB3aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMiArMTAxLDEyIEBAIFNjcm9s
bGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlz
KTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6
OnNldFZhbHVlKGludCB2LCBib29sIGZyb21TY3JvbGxBbmltYXRpb24pCiB7CiAgICAgdiA9IG1h
eChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVl
KCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBz
YW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCAhZnJvbVNj
cm9sbEFuaW1hdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Miw5ICsxNDIsNiBA
QCBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogI2VuZGlm
CiAKLSAgICAvLyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgotICAgIGlmICgobV9vcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAg
fHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8
IGRpcmVjdGlvbiA9PSBTY3JvbGxSaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBm
bG9hdCBzdGVwID0gMDsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBTY3Jv
bGxCeUxpbmU6ICAgICBzdGVwID0gbV9saW5lU3RlcDsgIGJyZWFrOwpAQCAtMTU0LDggKzE1MSwx
MCBAQCBib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogICAg
IGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCiAg
ICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAg
ICAgIHJldHVybiBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBz
dGVwLCBtdWx0aXBsaWVyKTsKIAotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9j
dXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90
YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkpLCAwLjBmKSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQ
b3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4obV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpLCBmYWxzZSk7CiB9
CiAKIHZvaWQgU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYigpCkBAIC0yODcsMTEgKzI4NiwxNCBAQCB2
b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBpZiAoZGVsdGEgPCAw
KQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAgICBpZiAoZGVsdGEp
Ci0gICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVs
dGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgc2V0Q3Vy
cmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkg
LyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIHRydWUpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0
Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9h
dCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpCiB7CisgICAgaWYgKG5vdGlmeVNjcm9s
bEFuaW1hdG9yICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+c2V0U2Nyb2xsUG9zaXRp
b25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisKICAgICBpZiAocG9zID09
IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzYsNyArMzM4LDcg
QEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcgogewogICAgIGlmICht
X3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxk
U25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2lu
LCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAKICAgICB2b2lkIHNldFN0ZXBzKGlu
dCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxzUGVyU3RlcCA9IDEpOwotICAgIGJv
b2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVlKGludCwgYm9vbCBmcm9tU2Nyb2xs
QW5pbWF0aW9uKTsKICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBpbnQg
dG90YWxTaXplKTsKICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2VkUG9z
ID0gcDsgfQogCkBAIC0xNjcsNyArMTY3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBi
b29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBib29sIHNldEN1cnJlbnRQb3MoZmxv
YXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAj
aWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtMzQsNyArMzYsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JvbGxiYXJDbGllbnQgewogcHVibGljOgorICAgIFNjcm9sbGJhckNsaWVudCgpIDogbV9zY3Jv
bGxBbmltYXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKSB7IH0KICAgICB2aXJ0dWFs
IH5TY3JvbGxiYXJDbGllbnQoKSB7IH0KKworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
c3RlcCwgZmxvYXQgbXVsdGlwbGllcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Njcm9sbEFu
aW1hdG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVy
KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQorICAgIHsKKyAgICAg
ICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9y
aWVudGF0aW9uLCBwb3MpOworICAgIH0KKworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwor
CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpID0gMDsKQEAgLTY3LDYgKzg1LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBv
aW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Nj
cm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJH
dGsuY3BwCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJh
ckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIFNjcm9sbGJh
ckd0azo6c2V0RnJhbWVSZWN0KGNvbnN0IEluCiAKIHZvaWQgU2Nyb2xsYmFyR3RrOjpndGtWYWx1
ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFNjcm9sbGJhckd0ayogdGhhdCkKIHsKLSAgICB0aGF0
LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0
LT5tX2FkanVzdG1lbnQpKSk7CisgICAgdGhhdC0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pihn
dGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSksIGZhbHNlKTsKIH0K
IAogdm9pZCBTY3JvbGxiYXJHdGs6OnNldEVuYWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEg
Kzc2LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjpjb250ZXh0TWVudShjb25zdCBQbGF0Zm8KICAgICAg
ICAgY29uc3QgUVBvaW50IHBvcyA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldmVudC5w
b3MoKSk7CiAgICAgICAgIG1vdmVUaHVtYihob3Jpem9udGFsID8gcG9zLngoKSA6IHBvcy55KCkp
OwogICAgIH0gZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVG9wKQotICAgICAg
ICBzZXRWYWx1ZSgwKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDog
U2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVk
ID09IGFjdFNjcm9sbEJvdHRvbSkKLSAgICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKKyAgICAg
ICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VVcCkKLSAg
ICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQ
YWdlKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAs
IFNjcm9sbEJ5UGFnZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURv
d24pCiAgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3du
LCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9s
bFVwKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA2
NjEyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2NCw2ICs2NjQsMTcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0
IEludFJlY3QmCiAgICAgICAgIDo6UmVsZWFzZURDKG1fcG9wdXAsIGxvY2FsREMpOwogfQogCitp
bnQgUG9wdXBNZW51V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9s
bGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
aWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0Lnko
KSwgdHJ1ZSk7Cit9CisKIHZvaWQgUG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
KiBzY3JvbGxCYXIpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9z
Y3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KIAogICAgIC8vIFNjcm9sbEJhckNsaWVudAor
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9u
KGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxi
YXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJl
dmlzaW9uIDY2MTI2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDE3IEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBh
aW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucworaW50IFJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsbFNjcm9sbGJhcikgJiYgbV92QmFyKSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgpIC0gbV92QmFy
LT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9s
bE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAo
bV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQor
CiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdy
aWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCShy
ZXZpc2lvbiA2NjEyNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0ZToKICAgICBIVE1MRGF0YUdyaWRF
bGVtZW50KiBncmlkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRh
R3JpZEVsZW1lbnQqPihub2RlKCkpOyB9CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJm
YWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChT
Y3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNjYxMjYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NjMsOSArMTM2Myw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LAog
CiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAgICAgICAgaWYgKG1faEJhcikKLSAgICAg
ICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgICAgIG1f
aEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChtX3ZC
YXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSk7CisgICAgICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSwgZmFsc2UpOwogICAgIH0KIAogICAgIC8vIFNj
aGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgpAQCAtMTYxOCw2ICsxNjE4LDIwIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAgICAvLyBGSVhNRSAoUmFkYXIg
NDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nh
cnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCitpbnQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92QmFyKS5nZXQoKTsKKyAgICByZXR1cm4g
c2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX2hCYXIpCisgICAg
ICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdkJhcikK
KyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30KKwogdm9pZCBS
ZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNj
cm9sbCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0yMDY4LDcgKzIwODIsNyBAQCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIC8vIHNvIHRoaXMg
aXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nIChzZWUgaG93IHNjcm9sbFhPZmZz
ZXQoKQogICAgICAgICAvLyBkaWZmZXJzIGZyb20gc2Nyb2xsWU9mZnNldCgpIHRvIGdldCBhbiBp
ZGVhIG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBhbmQKICAgICAgICAgLy8gdmVydGljYWwgc2Nyb2xs
YmFycyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkpLgotICAgICAgICBtX2hCYXItPnNl
dFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xs
WE9mZnNldCgpLCBmYWxzZSk7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgJKHJldmlzaW9uIDY2MTI2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCiAgICAgLy8gU2Nyb2xsQmFyQ2xp
ZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlz
aW9uIDY2MTI2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRv
UmV2ZWFsRWxlbWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlmICht
X3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAgICAg
IG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC01MjMsNiArNTIzLDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFu
Z2VkKHVuc2lnbmUKICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
KTsKIH0KIAoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJh
ci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9s
bE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAo
bV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIHRydWUpOworfQor
CiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIGlu
dCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZhbHVlKCk7CkBAIC01NzgsNyArNTg5LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgICAgICByZXR1cm47CiAgICAg
bV9pbmRleE9mZnNldCA9IGluZGV4OwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+
c2V0VmFsdWUoaW5kZXgpOworICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4LCBmYWxzZSk7
CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDggQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4K
KyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xs
YmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjYxMjcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgtMjYgIFBldGVy
IEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywg
YW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFy
SW1wbC5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgQWxsb3cgd2hl
ZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFy
SW1wbDo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpz
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bik6CisgICAgICAgIChXZWJLaXQ6
OldlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAg
ICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmg6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLgorICAgICAgICAqIHNyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwOiBVcGRh
dGUgY29tbWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVlbEV2ZW50KToKKwogMjAxMC0w
OC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
Y3JvbGxiYXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuY3BwCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2Nyb2xsYmFySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgaW50
IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBs
OjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCiB7Ci0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBv
c2l0aW9uKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRpb24sIGZhbHNlKTsKIH0K
IAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUpCkBAIC0y
MTgsNyArMjE4LDcgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29ucwog
ICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGEg
Kj0gLTE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUo
bV9zY3JvbGxiYXItPnZhbHVlKCkgLSBkZWx0YSk7CisgICAgICAgICAgICBtX3Njcm9sbGJhci0+
c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Ny
b2xsQnlQaXhlbCwgZGVsdGEpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IApAQCAtMjYyLDYgKzI2MiwxNiBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihj
b25zdCBXCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Ny
b2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QK
K3sKKyAgICByZXR1cm4gKG9yaWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
KSA/IChtX3Njcm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUo
KSkgOiAwOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9s
bGJhci0+c2V0VmFsdWUoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFdl
YlNjcm9sbGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQogewogICAg
IG1fY2xpZW50LT52YWx1ZUNoYW5nZWQodGhpcyk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNjcm9sbGJhckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNjcm9sbGJhckltcGwuaAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNjcm9sbGJhckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVu
dCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDY2MTI2
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDkgQEAgV2ViTW91c2VXaGVlbEV2ZW50IFdlYklu
cHV0RXZlbnRGYWN0b3J5OgogICAgIC8vIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBk
b2Vzbid0LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aCBzb21ld2hhdAogICAgIC8vIGxhcmdlciBz
Y3JvbGwgdmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMCBw
eCBwZXIKICAgICAvLyB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0
aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGljaykuCisgICAgLy8gRXZlbiB0aG91Z2ggd2UgaGF2ZSBz
bW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UgYXMgSUUKKyAgICAv
LyBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhlciB0
aGFuIHlvdSB3YW50IHdoaWxlCisgICAgLy8gcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAgICAg
d2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdoZWVs
RGVsdGE7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MTI3KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI2ICBQZXRlciBLYXN0aW5nICA8
cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRv
d3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAg
IChRV2ViRnJhbWU6OnNldFNjcm9sbEJhclZhbHVlKToKKwogMjAxMC0wOC0yNiAgWXVyeSBTZW1p
a2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZXZl
cnQgcjY2MTAzIHNpbmNlIFF0IHRlc3RzIGFyZSBmYWlsaW5nLgpJbmRleDogV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAkocmV2aXNpb24gNjYxMjYpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyOSw3ICs5MjksNyBAQCB2b2lkIFFXZWJGcmFtZTo6c2V0U2Nyb2xsQmFy
VmFsdWUoUXQ6Ok9yCiAgICAgICAgICAgICB2YWx1ZSA9IDA7CiAgICAgICAgIGVsc2UgaWYgKHZh
bHVlID4gc2Nyb2xsQmFyTWF4aW11bShvcmllbnRhdGlvbikpCiAgICAgICAgICAgICB2YWx1ZSA9
IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24pOwotICAgICAgICBzYi0+c2V0VmFsdWUodmFs
dWUpOworICAgICAgICBzYi0+c2V0VmFsdWUodmFsdWUsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NjEyNikKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGlu
Z0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyMzU2CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogUGx1bWIgc2Nyb2xsIGNvbW1hbmQg
c291cmNlcy4KKyAgICAgICAgKFdlYlZpZXc6OmtleURvd24pOgorCiAyMDEwLTA4LTI2ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IFJldmVydCByNjYxMDMgc2luY2UgUXQgdGVzdHMgYXJlIGZhaWxpbmcuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65627</attachid>
            <date>2010-08-26 15:24:24 -0700</date>
            <delta_ts>2010-08-26 16:10:00 -0700</delta_ts>
            <desc>patch v5.2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>68838</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MTQx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNiAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjE0
MSkKKysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgaWYgYnVpbGRf
cG9ydCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAg
ICAgICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVO
b2RlQ2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAg
ICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAg
ICAgICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0
IGNyYXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNl
IHRoZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAg
ICAgICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTAp
LgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw3NyBAQAorMjAxMC0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEFkZCBXaW5kb3dzIFNjcm9sbEFuaW1h
dG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRv
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6U2Nyb2xsYmFyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcDoKKyAgICAgICAgKFNj
cm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJlbmNlIHRvIHNldFZhbHVlKCkuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRNZW51KToKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNjcm9sbFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0Qm94OjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Ny
b2xsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNj
cm9sbFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorCiAyMDEwLTA4LTI2ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUg
SHlhdHQuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTk0Nyw2ICsxOTQ3LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudVN0eWxlLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU1NMS2V5R2VuZXJh
dG9yLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlw
ZXMuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmggXApAQCAtMTk1NCw2ICsxOTU2LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhckNsaWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgg
XAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwIFwKQEAgLTI1
NjcsNiArMjU3MCw4IEBAIGVuZGlmCiAKIGlmIFRBUkdFVF9XSU4zMgogd2ViY29yZV9zb3VyY2Vz
ICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwKIAlXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdl
VGhyb3R0bGVyV2luLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luLmgKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMTExLDYgKzMxMTEsMTAgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QdXJnZWFi
bGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU1NMS2V5R2VuZXJhdG9yLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JXaW4uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldp
bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxUeXBlcy5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xs
Vmlldy5oJywKQEAgLTMxMTgsNiArMzEyMiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vU2No
ZW1lUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L1Njcm9sbGJhckNsaWVudC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAnLApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNiArMTIyMiw4IEBACiAgICAg
ICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3Bw
JCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBb
J2luY2x1ZGUnLCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICcvU2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
L1RyYW5zcGFyZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjQ5LDYgKzI0
MjQ5LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9y
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldp
bi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNDI1
Nyw2ICsyNDI3MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xs
YmFyQ2xpZW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MTMs
NyArNDgxMyw4IEBACiAJCUJDOTk4MTJFMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZp
ZXdGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM5OTgxMkQwREJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07
CiAJCUJDOUFERDIzMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIw
Q0M0MDMyNjAwMDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM5QUREODAwQ0M0MDkyMjAw
MDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDdGMENDNDA5MjIwMDA5OEM0QyAvKiBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07Ci0JCUJDOUJDNjRFMEU3QzQ4ODkwMDhC
OTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGll
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlC
QzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRCMEU3QzQ4ODkwMDhC
OTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuY3BwICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxi
YXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0
MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1
QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oICovOyB9OwogCQlCQ0EyQjA2MTEwNTA0NzYw
MDA0M0JEMUMgLyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNBMkIwNjAxMDUwNDc1RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEwOSw2
ICs1MTEwLDggQEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERp
c3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87
IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0
QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsK
IAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFF
MzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsK
KwkJQ0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1h
dG9yLmggKi87IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9s
bGVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIw
NzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2
RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIw
NzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1
IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDYxMSw3ICsxMDYxNCw4IEBACiAJCUJDOTk4MTJE
MERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01BYnN0cmFjdFZpZXdGcmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFERDdG
MENDNDA5MjIwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbGJhckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQzY0QjBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBK
U0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMkIw
NjAxMDUwNDc1RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVXNlclNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTA5MzYsNiArMTA5NDAsOCBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0
QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBN
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUz
IC8qIFNjcm9sbEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbEFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFF
ODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNF
MDU3RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY3NSw4ICsxNjY4MSwxMSBAQAogCQkJ
CTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29wVGltZXIuaCAqLywKIAkJCQk1MTYy
QzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICovLAogCQkJCTUxNjJD
N0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovLAorCQkJCUNBM0JGNjdC
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi8sCisJCQkJQ0EzQkY2N0Qx
MEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8sCiAJCQkJQkM3QjJBRjgwNDUw
ODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAotCQkJCUJDOUJDNjREMEU3QzQ4ODkwMDhC
OTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKKwkJCQlCQzlCQzY0QjBFN0M0ODg5MDA4Qjk4
NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKKwkJCQlCQzlCQzY0QzBFN0M0ODg5MDA4Qjk4
NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0
IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8q
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlCQzE0MDI4OTBFODM2ODA4MDAz
MTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywKQEAgLTE5Nzg5LDYgKzE5Nzk4
LDcgQEAKIAkJCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzRDQzBFMjBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRX
cmFwcGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QjgwODI0NUU1OTAw
MUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5QkM2NEUwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4Qjg1
NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggaW4gSGVhZGVycyAqLywKQEAg
LTIyMzIzLDcgKzIyMzMzLDkgQEAKIAkJCQk5RjcyMzA1MDExMTg0QjQxMDBBRDAxMjYgLyogU2Ny
aXB0UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEyN0Q1MzcwRjhBQUIxRDAwRTQy
NEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNENDMEUxMEVEMzlE
NkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDQTNCRjY3
QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDMTQwMjhBMEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJU
aGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VGODY5RjBFODQ0RTlEMDBB
ODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1RDkyNUI2
NzBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
IAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgor
CisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhT1MoV0lORE9XUykKK1Njcm9sbEFuaW1hdG9yKiBT
Y3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQoreworICAgIHJl
dHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50KTsKK30KKyNlbmRpZgorCitib29sIFNjcm9s
bEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIGZsb2F0
KiBjdXJyZW50UG9zID0gKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gJm1f
Y3VycmVudFBvc1ggOiAmbV9jdXJyZW50UG9zWTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1h
eChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0
PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CisgICAg
aWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpj
dXJyZW50UG9zID0gbmV3UG9zOworICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRT
dG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3Mp
Cit7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
IG1fY3VycmVudFBvc1ggPSBwb3M7CisgICAgZWxzZQorICAgICAgICBtX2N1cnJlbnRQb3NZID0g
cG9zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JfaAorI2RlZmluZSBT
Y3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudDsKKworY2xhc3MgU2Nyb2xsQW5pbWF0
b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3JvbGxBbmltYXRvciogY3JlYXRlKFNjcm9sbGJh
ckNsaWVudCopOworCisgICAgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQp
IDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcigpIHsg
fQorCisgICAgLy8gQ29tcHV0ZXMgYSBzY3JvbGwgZGVzdGluYXRpb24gZm9yIHRoZSBnaXZlbiBw
YXJhbWV0ZXJzLiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGFscmVhZHkgYXQgdGhlIGRlc3Rp
bmF0aW9uLiAgT3RoZXJ3aXNlLCBzdGFydHMgc2Nyb2xsaW5nIHRvd2FyZHMgdGhlCisgICAgLy8g
ZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4gIFNjcm9sbGluZyBtYXkgYmUgaW1tZWRpYXRl
IG9yIGFuaW1hdGVkLgorICAgIC8vIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5
cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBhbmltYXRlcy4KKyAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3Rl
cCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAvLyBTdG9wcyBhbnkgYW5pbWF0aW9uIGluIHRo
ZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHVwZGF0ZXMgdGhlIFNjcm9sbEFuaW1hdG9yCisgICAgLy8g
d2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICBUaGlzIGRvZXMgbm90IGNhdXNlIGEg
Y2FsbGJhY2sgdG8gdGhlCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50LgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24s
IGZsb2F0KTsKKworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7Cisg
ICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNpbmcgYSBGbG9hdFBvaW50IGlu
IG9yZGVyIHRvIHJlZHVjZQorICAgIGZsb2F0IG1fY3VycmVudFBvc1k7IC8vIHN1YmNsYXNzIGNv
ZGUgY29tcGxleGl0eS4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjk2IEBACisvKgor
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
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvcldpbi5oIgorCisjaW5j
bHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3JvbGxBbmltYXRvciogU2Nyb2xsQW5pbWF0
b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gbmV3IFNj
cm9sbEFuaW1hdG9yV2luKGNsaWVudCk7Cit9CisKK2NvbnN0IGRvdWJsZSBTY3JvbGxBbmltYXRv
cldpbjo6YW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDE7CisKK1Njcm9sbEFuaW1hdG9yV2luOjpQ
ZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JXaW4qIHBhcmVudCwgZmxvYXQq
IGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJlbnRQb3MoY3VycmVudFBvcykKKyAgICAsIG1fZGVz
aXJlZFBvcygwKQorICAgICwgbV9jdXJyZW50VmVsb2NpdHkoMCkKKyAgICAsIG1fZGVzaXJlZFZl
bG9jaXR5KDApCisgICAgLCBtX2xhc3RBbmltYXRpb25UaW1lKDApCisgICAgLCBtX2FuaW1hdGlv
blRpbWVyKHBhcmVudCwgJlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKQor
eworfQorCisKK1Njcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJD
bGllbnQqIGNsaWVudCkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKGNsaWVudCkKKyAgICAsIG1faG9y
aXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gpCisgICAgLCBtX3ZlcnRpY2FsRGF0YSh0
aGlzLCAmbV9jdXJyZW50UG9zWSkKK3sKK30KKworU2Nyb2xsQW5pbWF0b3JXaW46On5TY3JvbGxB
bmltYXRvcldpbigpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpv
bnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0
YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbChTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0
ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gRG9uJ3QgYW5pbWF0ZSBqdW1waW5nIHRv
IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoZ3JhbnVsYXJp
dHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpz
Y3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKworICAg
IC8vIFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuICBDYWxjdWxhdGUgdGhlIHNjcm9sbCBk
ZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNj
cm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9udGFsRGF0YTsKKyAgICBmbG9h
dCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rlc2lyZWRQb3MgKyAoc3RlcCAq
IG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNjcm9sbFNpemUob3Jp
ZW50YXRpb24pKSksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gbmV3UG9z
OworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVsb2NpdHkuCisgICAgaWYgKCpk
YXRhLT5tX2N1cnJlbnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0YS0+bV9hbmltYXRpb25UaW1l
ci5pc0FjdGl2ZSgpOworICAgIC8vIFRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgc291
cmNlcyBvZiBzY3JvbGwgcmVxdWVzdHMuICBXZSB3YW50IHRvCisgICAgLy8gbWFrZSBib3RoIGtl
eWJvYXJkIGFuZCB3aGVlbC1nZW5lcmF0ZWQgc2Nyb2xsIHJlcXVlc3RzICh3aGljaCBjYW4gY29t
ZSBhdAorICAgIC8vIHVucHJlZGljdGFibGUgcmF0ZXMpIGFuZCBhdXRvc2Nyb2xsaW5nIGZyb20g
aG9sZGluZyBkb3duIHRoZSBtb3VzZSBidXR0b24KKyAgICAvLyBvbiBhIHNjcm9sbGJhciBwYXJ0
ICh3aGVyZSB0aGUgcmVxdWVzdCByYXRlIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZQorICAgIC8v
IHNjcm9sbGJhciB0aGVtZSkgZmVlbCBzbW9vdGgsIHJlc3BvbnNpdmUsIGFuZCBzaW1pbGFyLgor
ICAgIC8vCisgICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB0aGUgc2Nyb2xsYmFyJ3MgYXV0b3Nj
cm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAgICAvLyBpbmNyZW1lbnQgdGhlIGRlc2lyZWQg
cG9zaXRpb24gYnkgfHN0ZXB8ICh3aXRoIHxtdWx0aXBsaWVyfCA9PSAxKSBldmVyeQorICAgIC8v
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIHNl
Y29uZHMuICBJZiB3ZSBzZXQKKyAgICAvLyB0aGUgZGVzaXJlZCB2ZWxvY2l0eSB0byBleGFjdGx5
IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsIG5laXRoZXIKKyAgICAvLyByYWNlIGFo
ZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGluY3JlYXNpbmdseSBsYWcgYmVo
aW5kLCBidXQKKyAgICAvLyB3aWxsIGJlIHNtb290aCBhbmQgc3luY2hyb25pemVkLgorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGFjY2VsZXJhdGlvbiBwZXJpb2QsIHRo
ZSBjdXJyZW50IHBvc2l0aW9uIGluCisgICAgLy8gdGhpcyBjYXNlIHdvdWxkIGxhZyB0aGUgZGVz
aXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IChzZWUKKyAgICAvLyBjb21tZW50
cyBvbiBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3QgYW1vdW50IGlzIGdpdmVuIGJ5CisgICAg
Ly8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQpCisgICAgLy8gV2hlcmUKKyAgICAvLyAg
IHYgPSBUaGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LAorICAgIC8vICAgICAgIHxzdGVwfCAvIFNj
cm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpCisgICAg
Ly8gICB0QSA9IGFjY2VsZXJhdGlvblRpbWUoKQorICAgIC8vICAgdEQgPSBUaGUgdGltZSB3ZSBw
cmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5nIHRvIHNjcm9sbCwKKyAgICAv
LyAgICAgICAgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8KKyAgICAvLyBUaGlzIGxhZyBw
cm92aWRlcyBzb21lIGJ1ZmZlciBhZ2FpbnN0IHRpbWVyIGppdHRlciBzbyB3ZSdyZSBsZXNzIGxp
a2VseQorICAgIC8vIHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhbmQgc3RvcCAoYW5kIHRo
dXMgaGF2ZSB0byByZS1hY2NlbGVyYXRlLAorICAgIC8vIGNhdXNpbmcgYSB2aXNpYmxlIGhpdGNo
KSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4dCBhdXRvc2Nyb2xsIGluY3JlbWVudC4KKyAgICAv
LworICAgIC8vIFRodXMsIGZvciBhdXRvc2Nyb2xsLXRpbWVyLXRyaWdnZXJlZCByZXF1ZXN0cywg
dGhlIGlkZWFsIHN0ZWFkeS1zdGF0ZQorICAgIC8vIGRpc3RhbmNlIHRvIHRyYXZlbCBpbiBlYWNo
IHRpbWUgaW50ZXJ2YWwgaXM6CisgICAgLy8gICBmbG9hdCBhbmltYXRpb25TdGVwID0gc3RlcDsK
KyAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSdyZSBub3QgYWxyZWFkeSBhbmltYXRpbmcsIHRoaXMg
aXMgZXhhY3RseSB0aGUgc2FtZSBhcworICAgIC8vIHRoZSBkaXN0YW5jZSB0byB0aGUgdGFyZ2V0
IHBvc2l0aW9uLiAgV2UnbGwgcmV0dXJuIHRvIHRoYXQgaW4gYSBtb21lbnQuCisgICAgLy8KKyAg
ICAvLyBGb3Iga2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdlIGRvbid0IGtub3cgd2hlbiB0
aGUgbmV4dCBpbmNyZW1lbnQKKyAgICAvLyB3aWxsIGJlIHJlcXVlc3RlZC4gIElmIHdlIHNldCB0
aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIgYXdheQorICAgIC8vIGZyb20gdGhl
IHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUsIHRoZW4gZm9yIGtleWJvYXJkL3doZWVsIGV2ZW50cyB0
aGF0IGNvbWUKKyAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Njcm9sbCBkZWxheSwgd2UnbGwg
YXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggdGhlCisgICAgLy8gdmVsb2NpdHkgbmVlZGVkIHRvIHN0
YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2VyJ3MgYWN0aW9uczsgZm9yCisgICAgLy8g
ZXZlbnRzIHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9sbCBvbmUgaW5jcmVtZW50IGFuZCB0
aGVuIHBhdXNlIHVudGlsCisgICAgLy8gdGhlIG5leHQgZXZlbnQgZmlyZXMuCisgICAgZmxvYXQg
YW5pbWF0aW9uU3RlcCA9IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9jdXJyZW50UG9zKTsKKyAgICAv
LyBJZiBhIGtleSBpcyBoZWxkIGRvd24gKG9yIHRoZSB3aGVlbCBjb250aW51YWxseSBzcHVuKSwg
dGhlbiBvbmNlIHdlIGhhdmUKKyAgICAvLyByZWFjaGVkIGEgdmVsb2NpdHkgY2xvc2UgdG8gdGhl
IHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUgbGlrZWx5IHRvCisgICAgLy8gaGl0IHRoZSBk
ZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1lIHdlJ2QgZXhwZWN0IHRoZSBu
ZXh0CisgICAgLy8gaW5jcmVtZW50IHRvIG9jY3VyIC0tIGJhZCBiZWNhdXNlIGl0IGxlYWRzIHRv
IGhpdGNoaW5nIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgIC8vIChpZiBhdXRvc2Nyb2xsLWJhc2Vk
IHJlcXVlc3RzIGRpZG4ndCByZXN1bHQgaW4gYSBzbWFsbCBhbW91bnQgb2YgY29uc3RhbnQKKyAg
ICAvLyBsYWcpLiAgU28gaWYgd2UncmUgY2FsbGVkIGFnYWluIHdoaWxlIGFscmVhZHkgYW5pbWF0
aW5nLCB3ZSB3YW50IHRvIHRyaW0KKyAgICAvLyB0aGUgYW5pbWF0aW9uU3RlcCBzbGlnaHRseSB0
byBtYWludGFpbiBsYWcgbGlrZSB3aGF0J3MgZGVzY3JpYmVkIGFib3ZlLgorICAgIC8vIChJIHNh
eSAibWFpbnRhaW4iIHNpbmNlIHdlJ2xsIGFscmVhZHkgYmUgbGFnZ2VkIGR1ZSB0byB0aGUgYWNj
ZWxlcmF0aW9uCisgICAgLy8gZHVyaW5nIHRoZSBmaXJzdCBzY3JvbGwgcGVyaW9kLikKKyAgICAv
LworICAgIC8vIFJlbWVtYmVyIHRoYXQgdHJpbW1pbmcgd29uJ3QgY2F1c2UgdXMgdG8gZmFsbCBz
dGVhZGlseSBmdXJ0aGVyIGJlaGluZAorICAgIC8vIGhlcmUsIGJlY2F1c2UgdGhlIGZ1cnRoZXIg
YmVoaW5kIHdlIGFyZSwgdGhlIGxhcmdlciB0aGUgYmFzZSBzdGVwIHZhbHVlCisgICAgLy8gYWJv
dmUuICBHaXZlbiB0aGUgc2Nyb2xsaW5nIGFsZ29yaXRobSBpbiBhbmltYXRlU2Nyb2xsKCksIHRo
ZSBwcmFjdGljYWwKKyAgICAvLyBlZmZlY3Qgd2lsbCBhY3R1YWxseSBiZSB0aGF0LCBhc3N1bWlu
ZyBhIGNvbnN0YW50IHRyaW0gZmFjdG9yLCB3ZSdsbCBsYWcKKyAgICAvLyBieSBhIGNvbnN0YW50
IGFtb3VudCBkZXBlbmRpbmcgb24gdGhlIHJhdGUgYXQgd2hpY2ggaW5jcmVtZW50cyBvY2N1cgor
ICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGRlbGF5LiAgVGhlIGV4YWN0
IGxhZyBpcyBnaXZlbiBieQorICAgIC8vICAgbGFnID0gfHN0ZXB8ICogKChyIC8gaykgLSAxKQor
ICAgIC8vIFdoZXJlCisgICAgLy8gICByID0gVGhlIHJhdGlvIG9mIHRoZSBhdXRvc2Nyb2xsIHJl
cGVhdCBkZWxheSwKKyAgICAvLyAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+
YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSwgdG8gdGhlCisgICAgLy8gICAgICAga2V5L3doZWVsIHJl
cGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBmYXN0ZXIpCisgICAgLy8gICBr
ID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVsb3cKKyAgICAvLworICAgIC8v
IFdlIHdhbnQgdG8gY2hvb3NlIHRoZSB0cmltIGZhY3RvciBzdWNoIHRoYXQgZm9yIGNhbGxzIHRo
YXQgY29tZSBhdCB0aGUKKyAgICAvLyBhdXRvc2Nyb2xsIHRpbWVyIHJhdGUsIHdlJ2xsIHdpbmQg
dXAgd2l0aCB0aGUgc2FtZSBsYWcgYXMgaW4gdGhlCisgICAgLy8gInBlcmZlY3QiIGNhc2UgZGVz
Y3JpYmVkIGFib3ZlIChvciwgdG8gcHV0IGl0IGFub3RoZXIgd2F5LCB3ZSdsbCBlbmQgdXAKKyAg
ICAvLyB3aXRoIHxhbmltYXRpb25TdGVwfCA9PSB8c3RlcHwgKiB8bXVsdGlwbGllcnwgZGVzcGl0
ZSB0aGUgYWN0dWFsIGRpc3RhbmNlCisgICAgLy8gY2FsY3VsYXRlZCBhYm92ZSBiZWluZyBsYXJn
ZXIgdGhhbiB0aGF0KS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gInBlcmZlY3QiCisgICAgLy8gYmVo
YXZpb3IgZm9yIGF1dG9zY3JvbGxpbmcgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lhbC1jYXNlIGl0
LgorICAgIGlmIChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRpb25TdGVwIC89ICgy
LjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkgKyBhbmltYXRpb25UaW1lckRl
bGF5KSkpOworICAgIC8vIFRoZSByZXN1bHQgb2YgYWxsIHRoaXMgaXMgdGhhdCBzaW5nbGUga2V5
cHJlc3NlcyBvciB3aGVlbCBmbGlja3Mgd2lsbAorICAgIC8vIHNjcm9sbCBpbiB0aGUgc2FtZSB0
aW1lIHBlcmlvZCBhcyBzaW5nbGUgcHJlc3NlcyBvZiBzY3JvbGxiYXIgZWxlbWVudHM7CisgICAg
Ly8gaG9sZGluZyB0aGUgbW91c2UgZG93biBvbiBhIHNjcm9sbGJhciBwYXJ0IHdpbGwgc2Nyb2xs
IGFzIGZhc3QgYXMKKyAgICAvLyBwb3NzaWJsZSB3aXRob3V0IGhpdGNoaW5nOyBhbmQgb3RoZXIg
cmVwZWF0ZWQgc2Nyb2xsIGV2ZW50cyB3aWxsIGFsc28KKyAgICAvLyBzY3JvbGwgd2l0aCB0aGUg
c2FtZSB0aW1lIGxhZyBhcyBob2xkaW5nIGRvd24gdGhlIG1vdXNlIG9uIGEgc2Nyb2xsYmFyCisg
ICAgLy8gcGFydC4KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IGFuaW1hdGlvblN0ZXAg
LyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsK
KworICAgIC8vIElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9sbGluZywgc3RhcnQuCisgICAgaWYg
KCFhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRlU2Nyb2xsKGRhdGEpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhOworICAg
IHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAgICpkYXRhLT5tX2N1cnJlbnRQ
b3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9zOworICAgIGRhdGEtPm1fY3Vy
cmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7Cit9CisK
Ky8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKCkK
K3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkt
PmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUgbGVuZ3RoIG9mIHRpbWUgd2Un
bGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFyZ2V0CisgICAgLy8gdmVsb2Np
dHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9kdWNlIGEgbW9yZSBwcm9ub3Vu
Y2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICByZXR1cm4gU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCk7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JX
aW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1lciA9PSAmbV9ob3Jpem9udGFs
RGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1fdmVydGljYWxE
YXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3RvcEFuaW1hdGlvblRpbWVySWZO
ZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRhdGEtPm1fYW5pbWF0aW9uVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqIGRh
dGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5nIHBlcmYgdmVyc3VzIG5vbi1z
bW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFsIHRpbWUgdG8gcGVyZm9ybSBh
IGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAgdCA9IHQwICsgMC41dEEgLSB0
RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhlIHRpbWUgdG8gcGVyZm9ybSB0
aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAgIC8vICAgdEEgPSBUaGUgYWNj
ZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cpCisgICAgLy8gICB0RCA9IHxh
bmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZhbHVlIGxlc3MgdGhhbiBvciBl
cXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEKKyAgICAvLyAgICAgICAgc2lu
Z2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9uZSBkdWUgdG8gY2FsbGluZwor
ICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkgKH4wIGZvciBzaW1wbGUgcGFn
ZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBwYWdlcykuCisgICAgLy8KKyAg
ICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxsLCB0aGUgdG90YWwgbGFnIChh
cyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdpYmxlIGZvciBzaW1wbGUgcGFn
ZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBXaXRob3V0CisgICAgLy8ga25v
d2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhhcmQgdG8gZG8gYmV0dGVyIHRo
YW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0byByZW1lbWJlciBwcmV2aW91
cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisgICAgLy8gV2Ugd2FudCB0byB1
cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdGltZSBpdCdzIGJlZW4gc2lu
Y2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBiZSBsb25nZXIgdGhhbiBvdXIg
aWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBwYWdlIGlzIGNvbXBsZXggb3Ig
dGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8gYXZvaWQgZmVlbGluZyBsYWdn
eSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxpbmcgd2UgcHJldGVuZAorICAg
IC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBpZGVhbCBpbnRlcnZhbCwgc28g
dGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21lIGRpc3RhbmNlIGltbWVkaWF0
ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lKSA6
IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBmYXIgd2UndmUg
YWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVudAorICAgIC8vIHZlbG9jaXR5
LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYgKGRhdGEtPm1fY3VycmVudFZl
bG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgLy8gV2UgYWNjZWxl
cmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2ggdGhlIGRlc2lyZWQgdmVsb2Np
dHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBkYXRhLT5tX2Rlc2lyZWRWZWxv
Y2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAvLyBGaWd1cmUgb3V0IHdoZXRo
ZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0byByZWFjaCBvdXIKKyAgICAg
ICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBwb3RlbnRpYWxWZWxvY2l0eUNo
YW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIGZs
b2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgKyBwb3Rl
bnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVudGlhbE5ld1ZlbG9jaXR5ID4g
ZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhl
IHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4gb3VyIGxhc3QKKyAgICAgICAg
ICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGNhbiBiZSBjYWxj
dWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0aGUgZGlzdGFuY2UgdHJhdmVs
ZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAgICAgICAvLyBkaXN0YW5jZSB0
cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICAgICAg
ZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAtIGRh
dGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uSW50
ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJhdGlvblJhdGU7CisgICAgICAg
ICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29uc3RhbnQgYWNjZWxlcmF0aW9u
IGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxpbmUgc2VnbWVudCB3aXRoIGEg
Y29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAgICAgICAgICAgLy8gaW50byBh
IHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIgcG9ydGlvbiBhbmQgc3VtLgor
ICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkg
KyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVyYXRpb25JbnRlcnZhbCk7Cisg
ICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQgdGhlIHRhcmdldCB2ZWxvY2l0
eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVsb2NpdHkpICogKHJlbWFpbmlu
ZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVk
ICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Nyb2xsSW50ZXJ2YWwgLSBhY2Nl
bGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkg
PSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBlbnRpcmUgdGltZSBpbnRlcnZh
bC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0YS0+bV9jdXJyZW50VmVsb2Np
dHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7
CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IHBvdGVudGlhbE5ld1ZlbG9j
aXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBy
ZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0YW5jZSB3ZSd2ZQorICAgICAg
ICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2NpdHkpICogKGVsYXBzZWQgdGlt
ZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSAq
IGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3VyIGRlc2lyZWQgdmVsb2NpdHkg
aGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0eSB0b28uCisgICAgICAgIGRh
dGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgfQor
CisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBkaXN0
YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxlZCA+PSBhYnMoZGF0YS0+bV9k
ZXNpcmVkUG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsKKyAgICAgICAgLy8gV2UndmUgdHJh
dmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4gIFN0b3Agc21v
b3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAgKmRhdGEtPm1fY3VycmVudFBvcyA9
IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAw
OworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgVHJhdmVsIHRvd2FyZHMg
aXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1cGRhdGUuCisgICAgICAgIGlmICgq
ZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICAgICAgZGlz
dGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAgICAgICAqZGF0YS0+bV9jdXJy
ZW50UG9zICs9IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkpOworICAgICAgICBkYXRhLT5tX2xh
c3RBbmltYXRpb25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOworICAgIH0KKyAgICBtX2NsaWVu
dC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludCgqbV9ob3Jpem9udGFsRGF0
YS5tX2N1cnJlbnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJlbnRQb3MpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvcldpbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQog
ICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yV2luX2gKKyNkZWZpbmUg
U2Nyb2xsQW5pbWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1h
dG9yV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxBbmlt
YXRvcldpbihTY3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcldp
bigpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50
YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAg
ICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFyZW50LCBmbG9hdCogY3VycmVu
dFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsKKyAgICAgICAgZmxvYXQgbV9k
ZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxvY2l0eTsKKyAgICAgICAgZmxv
YXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25UaW1l
OworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9hbmltYXRpb25UaW1lcjsKKyAg
ICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25UaW1lKCk7CisgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAgdm9pZCBhbmltYXRpb25U
aW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOworICAgIHZvaWQgc3RvcEFuaW1h
dGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2b2lkIGFuaW1hdGVTY3JvbGwo
UGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7CisgICAg
UGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9CisjZW5kaWYKClByb3BlcnR5IGNo
YW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5j
cHAJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3MywyMCBAQCBJbnRQb2ludCBTY3JvbGxWaWV3Ojpt
YXhpbXVtU2Nyb2xsUG9zaXRpCiAgICAgcmV0dXJuIEludFBvaW50KG1heGltdW1PZmZzZXQud2lk
dGgoKSwgbWF4aW11bU9mZnNldC5oZWlnaHQoKSk7CiB9CiAKK2ludCBTY3JvbGxWaWV3OjpzY3Jv
bGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFNj
cm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXIpLmdldCgpOwor
ICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJh
ci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9o
b3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZh
bHVlKG9mZnNldC54KCksIHRydWUpOworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsKK30K
Kwogdm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7
CiAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCkBAIC00NDEsNyArNDU1LDcg
QEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0gICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpLCBmYWxzZSk7CiAgICAg
ICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAogICAgIH0gCkBAIC00
NjMsNyArNDc3LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAg
ICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0
cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpLCBmYWxzZSk7
CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAg
LTY3Myw3ICs2ODcsMTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hl
ZQogICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgIGRlbHRhWSA9IC1k
ZWx0YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVs
dGFZKSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFjayBvbiBzY3JvbGxCeSgpIGlm
IHRoZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVybyBkZWx0YT8KKyAgICAgICAgaWYg
KGRlbHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBkZWx0YVkpOworICAgICAg
ICBpZiAoZGVsdGFZICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRh
WCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gNjYxNDEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsOSBAQCBjbGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCwgcHVibGljCiBwdWJs
aWM6CiAgICAgflNjcm9sbFZpZXcoKTsKIAotICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlv
bi4gRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIC8vIFNjcm9sbGJhckNsaWVu
dCBmdW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50
UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAg
IAogICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuIFRoZSBTY3Jv
bGxWaWV3IHdpbGwgY29tbXVuaWNhdGUgc2Nyb2xscyBhbmQgcmVwYWludHMgdG8gdGhlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDEyICsxMDEsMTIgQEAgU2Ny
b2xsYmFyOjp+U2Nyb2xsYmFyKCkKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHRo
aXMpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUoaW50IHYpCitib29sIFNjcm9sbGJh
cjo6c2V0VmFsdWUoaW50IHYsIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbikKIHsKICAgICB2ID0g
bWF4KG1pbih2LCBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKICAgICBpZiAodmFs
dWUoKSA9PSB2KQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQgdGhl
IHNhbWUuCi0gICAgc2V0Q3VycmVudFBvcyh2KTsKKyAgICBzZXRDdXJyZW50UG9zKHYsICFmcm9t
U2Nyb2xsQW5pbWF0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQyLDkgKzE0Miw2
IEBAIGJvb2wgU2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKICAgICB9CiAjZW5k
aWYKIAotICAgIC8vIElnbm9yZSBwZXJwZW5kaWN1bGFyIHNjcm9sbHMuCi0gICAgaWYgKChtX29y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gKGRpcmVjdGlvbiA9PSBTY3JvbGxV
cCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgOiAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQg
fHwgZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGZsb2F0IHN0ZXAgPSAwOwogICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKICAgICBjYXNlIFNj
cm9sbEJ5TGluZTogICAgIHN0ZXAgPSBtX2xpbmVTdGVwOyAgYnJlYWs7CkBAIC0xNTQsOCArMTUx
LDEwIEBAIGJvb2wgU2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKICAgICB9CiAg
ICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkK
ICAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOworICAgIGlmIChjbGllbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGNsaWVudCgpLT5zY3JvbGwobV9vcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHks
IHN0ZXAsIG11bHRpcGxpZXIpOwogCi0gICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1pbiht
X2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90
b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpKTsKKyAgICByZXR1cm4gc2V0Q3VycmVu
dFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19j
YXN0PGZsb2F0PihtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpKSwgMC4wZiksIGZhbHNlKTsK
IH0KIAogdm9pZCBTY3JvbGxiYXI6OnVwZGF0ZVRodW1iKCkKQEAgLTI4NywxMSArMjg2LDE0IEBA
IHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcykKICAgICBlbHNlIGlmIChkZWx0YSA8
IDApCiAgICAgICAgIGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVsdGEpOwogICAgIGlmIChkZWx0
YSkKLSAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBk
ZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbikpOworICAgICAgICBzZXRD
dXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0o
KSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpz
ZXRDdXJyZW50UG9zKGZsb2F0IHBvcykKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKGZs
b2F0IHBvcywgYm9vbCBub3RpZnlTY3JvbGxBbmltYXRvcikKIHsKKyAgICBpZiAobm90aWZ5U2Ny
b2xsQW5pbWF0b3IgJiYgY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5zZXRTY3JvbGxQb3Np
dGlvbkFuZFN0b3BBbmltYXRpb24obV9vcmllbnRhdGlvbiwgcG9zKTsKKwogICAgIGlmIChwb3Mg
PT0gbV9jdXJyZW50UG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMzNiw3ICszMzgs
NyBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiB7CiAgICAgaWYg
KG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7CiAgICAgICAgIGlmICh0aGVtZSgpLT5zaG91
bGRTbmFwQmFja1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVu
dFBvcyhtX2RyYWdPcmlnaW4pOworICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmln
aW4sIHRydWUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICAgICAgICAgICBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS54KCkgOgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5oCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0KTsKIAogICAgIHZvaWQgc2V0U3RlcHMo
aW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0ZXAsIGludCBwaXhlbHNQZXJTdGVwID0gMSk7Ci0gICAg
Ym9vbCBzZXRWYWx1ZShpbnQpOworICAgIGJvb2wgc2V0VmFsdWUoaW50LCBib29sIGZyb21TY3Jv
bGxBbmltYXRpb24pOwogICAgIHZvaWQgc2V0UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGlu
dCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0UHJlc3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQ
b3MgPSBwOyB9CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IGJvb2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpOworICAgIGJvb2wgc2V0Q3VycmVudFBvcyhm
bG9hdCBwb3MsIGJvb2wgbm90aWZ5U2Nyb2xsQW5pbWF0b3IpOwogfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisKKyNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9s
bGJhckNsaWVudDo6U2Nyb2xsYmFyQ2xpZW50KCkKKyAgICA6IG1fc2Nyb2xsQW5pbWF0b3IoU2Ny
b2xsQW5pbWF0b3I6OmNyZWF0ZSh0aGlzKSkKK3sKK30KKworU2Nyb2xsYmFyQ2xpZW50Ojp+U2Ny
b2xsYmFyQ2xpZW50KCkKK3sKK30KKworYm9vbCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIG1fc2Nyb2xs
QW5pbWF0b3ItPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxp
ZXIpOworfQorCit2b2lkIFNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9w
QW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpCit7
CisgICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9u
KG9yaWVudGF0aW9uLCBwb3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5oCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIxICsyNiwyOCBAQAogI2lmbmRlZiBT
Y3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAogCisjaW5jbHVkZSAi
SW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IFNjcm9sbEFuaW1hdG9yOworCiBjbGFzcyBTY3JvbGxiYXJDbGllbnQgewogcHVibGljOgotICAg
IHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNo
YW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIFNjcm9sbGJhckNsaWVudCgpOworICAgIHZpcnR1
YWwgflNjcm9sbGJhckNsaWVudCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgYm9vbCBzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAgICB2b2lkIHNldFNj
cm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgZmxvYXQgcG9zKTsKIAorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCA9IDA7Ci0gICAgCiAgICAgdmlydHVh
bCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0IHsgfQpAQCAtNTIsMjEg
KzU5LDIxIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsYmFyUmVjdCk7CiAgICAgfQotICAgIAog
ICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CiAgICAgfQotICAgIAogICAgIHZpcnR1YWwgSW50
UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdW
aWV3KHNjcm9sbGJhclBvaW50KTsKICAgICB9Ci0gICAgCiAgICAgdmlydHVhbCBJbnRQb2ludCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJl
bnRQb2ludCk7CiAgICAgfQorCitwcml2YXRlOgorICAgIE93blB0cjxTY3JvbGxBbmltYXRvcj4g
bV9zY3JvbGxBbmltYXRvcjsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbGJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyR3RrLmNwcAkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxiYXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBTY3Jv
bGxiYXJHdGs6OnNldEZyYW1lUmVjdChjb25zdCBJbgogCiB2b2lkIFNjcm9sbGJhckd0azo6Z3Rr
VmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBTY3JvbGxiYXJHdGsqIHRoYXQpCiB7Ci0gICAg
dGhhdC0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUo
dGhhdC0+bV9hZGp1c3RtZW50KSkpOworICAgIHRoYXQtPnNldFZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudCkpLCBmYWxzZSk7
CiB9CiAKIHZvaWQgU2Nyb2xsYmFyR3RrOjpzZXRFbmFibGVkKGJvb2wgc2hvdWxkRW5hYmxlKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHJldmlzaW9uIDY2MTQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDExICs3NiwxMSBAQCBib29sIFNjcm9sbGJhcjo6Y29udGV4dE1lbnUoY29uc3QgUGxhdGZvCiAg
ICAgICAgIGNvbnN0IFFQb2ludCBwb3MgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZl
bnQucG9zKCkpOwogICAgICAgICBtb3ZlVGh1bWIoaG9yaXpvbnRhbCA/IHBvcy54KCkgOiBwb3Mu
eSgpKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFRvcCkKLSAg
ICAgICAgc2V0VmFsdWUoMCk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVm
dCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxl
Y3RlZCA9PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAgIHNldFZhbHVlKG1heGltdW0oKSk7Cisg
ICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3Jv
bGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlVXAp
Ci0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9s
bEJ5UGFnZSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9s
bFVwLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBh
Z2VEb3duKQogICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xs
RG93biwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RT
Y3JvbGxVcCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNp
b24gNjYxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDE3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChj
b25zdCBJbnRSZWN0JgogICAgICAgICA6OlJlbGVhc2VEQyhtX3BvcHVwLCBsb2NhbERDKTsKIH0K
IAoraW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxT
Y3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Njcm9sbGJhci0+dG90YWxTaXplKCkgLSBt
X3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFBvcHVwTWVudVdpbjo6
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQorewor
ICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG9mZnNl
dC55KCksIHRydWUpOworfQorCiB2b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9s
bGJhciogc2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoYm9vbCBiKSB7
IG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UgPSBiOyB9CiAKICAgICAvLyBTY3JvbGxCYXJDbGll
bnQKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3Jp
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3Bw
CShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCwxNyBAQCB2b2lkIFJlbmRlckRhdGFHcmlk
OjpwYWludENvbHVtbkhlYWRlcihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1lbnRhdGlvbiBm
dW5jdGlvbnMKK2ludCBSZW5kZXJEYXRhR3JpZDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1f
dkJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckRhdGFHcmlkOjpzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
aWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsK
K30KKwogdm9pZCBSZW5kZXJEYXRhR3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRh
dGFHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQu
aAkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgSFRNTERhdGFH
cmlkRWxlbWVudCogZ3JpZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
RGF0YUdyaWRFbGVtZW50Kj4obm9kZSgpKTsgfQogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGlu
dGVyZmFjZS4KKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2MTQx
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzYzLDkgKzEzNjMsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQg
eCwKIAogICAgIGlmICh1cGRhdGVTY3JvbGxiYXJzKSB7CiAgICAgICAgIGlmIChtX2hCYXIpCi0g
ICAgICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgICAg
ICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgZmFsc2UpOwogICAgICAgICBpZiAo
bV92QmFyKQotICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFkpOworICAgICAg
ICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFksIGZhbHNlKTsKICAgICB9CiAKICAgICAv
LyBTY2hlZHVsZSB0aGUgc2Nyb2xsIERPTSBldmVudC4KQEAgLTE2MTgsNiArMTYxOCwyMCBAQCB2
b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJh
ZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVj
ZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAor
aW50IFJlbmRlckxheWVyOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faEJhciA6IG1fdkJhcikuZ2V0KCk7CisgICAgcmV0
dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9oQmFyKQor
ICAgICAgICBtX2hCYXItPnNldFZhbHVlKG9mZnNldC54KCksIHRydWUpOworICAgIGlmIChtX3ZC
YXIpCisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZv
aWQgUmVuZGVyTGF5ZXI6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIC8vIFVwZGF0
ZSBzY3JvbGwgcG9zaXRpb24gZnJvbSBzY3JvbGxiYXJzLgpAQCAtMjA2OCw3ICsyMDgyLDcgQEAg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICAvLyBzbyB0
aGlzIGlzIG5lZWRlZCB0byBrZWVwIGV2ZXJ5dGhpbmcgd29ya2luZyAoc2VlIGhvdyBzY3JvbGxY
T2Zmc2V0KCkKICAgICAgICAgLy8gZGlmZmVycyBmcm9tIHNjcm9sbFlPZmZzZXQoKSB0byBnZXQg
YW4gaWRlYSBvZiB3aHkgdGhlIGhvcml6b250YWwgYW5kCiAgICAgICAgIC8vIHZlcnRpY2FsIHNj
cm9sbGJhcnMgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5KS4KLSAgICAgICAgbV9oQmFy
LT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNj
cm9sbFhPZmZzZXQoKSwgZmFsc2UpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAg
IGludCBjbGllbnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAKIAogICAgIC8vIFNjcm9sbEJh
ckNsaWVudCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3Jv
bGxUb1JldmVhbEVsZW1lbgogCiAgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKICAgICBp
ZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQpOworICAg
ICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIGZhbHNlKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtNTIzLDYgKzUyMywxNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVl
Q2hhbmdlZCh1bnNpZ25lCiAgICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2
ZW50KCk7CiB9CiAKK2ludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09
IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBt
X3ZCYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
aWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCB0cnVlKTsK
K30KKwogdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAg
ICBpbnQgbmV3T2Zmc2V0ID0gbV92QmFyLT52YWx1ZSgpOwpAQCAtNTc4LDcgKzU4OSw3IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwog
ICAgIG1faW5kZXhPZmZzZXQgPSBpbmRleDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZC
YXItPnNldFZhbHVlKGluZGV4KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgZmFs
c2UpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw4IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZh
Y2UuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29u
c3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA4LTI2ICBQ
ZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdv
cmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogc3JjL1dlYlNjcm9s
bGJhckltcGwuY3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93
IHdoZWVsIHNjcm9sbHMgdG8gYmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9s
bGJhckltcGw6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAg
ICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBzcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcDog
VXBkYXRlIGNvbW1lbnRzIG5vdyB0aGF0IHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxFdmVudCk6CisKIDIw
MTAtMDgtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9s
bGJhckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xs
YmFySW1wbC5jcHAJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
Y3JvbGxiYXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBpbnQgV2Vi
U2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNl
dFZhbHVlKGludCBwb3NpdGlvbikKIHsKLSAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRp
b24pOworICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShwb3NpdGlvbiwgZmFsc2UpOwogfQogCiB2
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShpbnQgc2l6ZSkKQEAgLTIxOCw3
ICsyMTgsNyBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbChjb25zCiAgICAg
ICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgICAgICBkZWx0YSAqPSAt
MTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShtX3Nj
cm9sbGJhci0+dmFsdWUoKSAtIGRlbHRhKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zY3Jv
bGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
V2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwLCBXZWJDb3JlOjpTY3JvbGxC
eVBpeGVsLCBkZWx0YSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBA
IC0yNjIsNiArMjYyLDE2IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0
IFcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxT
aXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAorewor
ICAgIHJldHVybiAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8g
KG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6
IDA7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsYmFy
LT5zZXRWYWx1ZSgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgV2ViU2Ny
b2xsYmFySW1wbDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopCiB7CiAgICAgbV9j
bGllbnQtPnZhbHVlQ2hhbmdlZCh0aGlzKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5oCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7
CiAKICAgICAvLyBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgbWV0aG9kcworICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChX
ZWJDb3JlOjpTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAg
IHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gNjYxNDEpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwMyw2ICs0MDMsOSBAQCBXZWJNb3VzZVdoZWVsRXZlbnQgV2ViSW5wdXRF
dmVudEZhY3Rvcnk6CiAgICAgLy8gc21vb3RoIHNjcm9sbGluZyB3aGlsZSBGaXJlZm94IGRvZXNu
J3QsIHNvIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNvbWV3aGF0CiAgICAgLy8gbGFyZ2VyIHNjcm9s
bCB2YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGFzIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAwIHB4IHBl
cgogICAgIC8vIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdCBzY3JvbGwgYW1vdW50IGlzIHRocmVl
IGxpbmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBFdmVuIHRob3VnaCB3ZSBoYXZlIHNtb290
aCBzY3JvbGxpbmcsIHdlIGRvbid0IG1ha2UgdGhpcyBhcyBsYXJnZSBhcyBJRQorICAgIC8vIGJl
Y2F1c2Ugc3ViamVjdGl2ZWx5IElFIGZlZWxzIGxpa2UgaXQgc2Nyb2xscyBmYXJ0aGVyIHRoYW4g
eW91IHdhbnQgd2hpbGUKKyAgICAvLyByZWFkaW5nIGFydGljbGVzLgogICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBmIC8gMy4wZjsKICAgICB3aGVl
bERlbHRhIC89IFdIRUVMX0RFTFRBOwogICAgIGZsb2F0IHNjcm9sbERlbHRhID0gd2hlZWxEZWx0
YTsKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0No
YW5nZUxvZwkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjYgIFBldGVyIEthc3RpbmcgIDxwa2Fz
dGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFX
ZWJGcmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUpOgorCiAyMDEwLTA4LTI2ICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJldmVydCBy
NjYxMDMgc2luY2UgUXQgdGVzdHMgYXJlIGZhaWxpbmcuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShy
ZXZpc2lvbiA2NjE0MSkKKysrIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTI5LDcgKzkyOSw3IEBAIHZvaWQgUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1
ZShRdDo6T3IKICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICAgZWxzZSBpZiAodmFsdWUg
PiBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKSkKICAgICAgICAgICAgIHZhbHVlID0gc2Ny
b2xsQmFyTWF4aW11bShvcmllbnRhdGlvbik7Ci0gICAgICAgIHNiLT5zZXRWYWx1ZSh2YWx1ZSk7
CisgICAgICAgIHNiLT5zZXRWYWx1ZSh2YWx1ZSwgZmFsc2UpOwogICAgIH0KIH0KIApJbmRleDog
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2MTQxKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0yNSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIFdlYlZpZXcuY3BwOiBQbHVtYiBzY3JvbGwgY29tbWFuZCBzb3Vy
Y2VzLgorICAgICAgICAoV2ViVmlldzo6a2V5RG93bik6CisKIDIwMTAtMDgtMjYgIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmV2
ZXJ0IHI2NjEwMyBzaW5jZSBRdCB0ZXN0cyBhcmUgZmFpbGluZy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65640</attachid>
            <date>2010-08-26 16:10:00 -0700</date>
            <delta_ts>2010-08-31 16:55:32 -0700</delta_ts>
            <desc>patch v5.3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>71081</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2MTQ2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0yNiAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2NjE0
MSkKKysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgaWYgYnVpbGRf
cG9ydCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAg
ICAgICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVO
b2RlQ2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAg
ICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAg
ICAgICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0
IGNyYXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNl
IHRoZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAg
ICAgICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTAp
LgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY2MTQ2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw4MiBAQAorMjAxMC0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIzNTYKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkIFdpbmRvd3MgU2Nyb2xsQW5pbWF0b3IuCisgICAg
ICAgICogV2ViQ29yZS5neXBpOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogV2ViQ29y
ZS5wcm86IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmNwcDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRv
ZXMgbm8gYW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6IEFkZGVkIGJhc2UgaW1w
bGVtZW50YXRpb24gdGhhdCBkb2VzIG5vIGFuaW1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6flNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvcldpbi5jcHA6IEFkZGVkIFdpbmRvd3Mgc3ViY2xhc3MgdGhhdCBhbmltYXRlcyBzY3JvbGxz
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmltYXRvcldpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6flNjcm9sbEFuaW1hdG9yV2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YWNjZWxlcmF0aW9u
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c3RvcEFuaW1h
dGlvblRpbWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OmFuaW1hdGVTY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmg6
IEFkZGVkIFdpbmRvd3Mgc3ViY2xhc3MgdGhhdCBhbmltYXRlcyBzY3JvbGxzLgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuICBBbGxvdyB3aGVlbCBzY3JvbGxzIHRvIGJlIGFuaW1hdGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBJbXBs
ZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcDogQWxsb3cgU2Nyb2xsQW5pbWF0b3IgdG8gaGFuZGxlIHNjcm9sbHMgaWYg
cHJlc2VudC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjptb3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRDdXJyZW50
UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xp
ZW50LmNwcDogQWRkZWQgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgU2Nyb2xsQW5pbWF0b3IuaCBu
b24tcHJpdmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6U2Nyb2xsYmFy
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6flNjcm9sbGJhckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFu
aW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50Lmg6IEFkZCBob29r
cyBmb3IgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbGJhckd0ay5jcHA6CisgICAgICAgIChTY3Jv
bGxiYXJHdGs6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyUXQuY3BwOiBVc2Ugc2Nyb2xsKCkgaW4gcHJlZmVyZW5jZSB0byBzZXRWYWx1ZSgpLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250ZXh0TWVudSk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaDogSW1wbGVtZW50IG5l
dyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJE
YXRhR3JpZC5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Ny
b2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGlzdEJveDo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
aDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorCiAyMDEwLTA4LTI2
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIyNyw3ICsxMjI3LDkgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL0xpbmtIYXNoLmNwcAogICAgIHBsYXRmb3JtL0xv
Z2dpbmcuY3BwCiAgICAgcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKyAgICBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCisgICAgcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29t
cG9zaXRlLmNwcAogICAgIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCiAgICAgcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NDcsNiArMTk0Nyw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1NTTEtl
eUdlbmVyYXRvci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFR5cGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKQEAgLTE5NTQsNiArMTk1Niw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJU
aGVtZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBc
CkBAIC0yNTY3LDYgKzI1NzAsOCBAQCBlbmRpZgogCiBpZiBUQVJHRVRfV0lOMzIKIHdlYmNvcmVf
c291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCBcCiAJV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzExMSw2ICszMTExLDEwIEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
UHVyZ2VhYmxlQnVmZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1NTTEtleUdlbmVyYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaCcsCkBAIC0zMTE4LDYgKzMxMjIsNyBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL1NjaGVtZVJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhci5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxiYXJDbGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwJywKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBy
bwkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkp
CkBAIC05NTUsNyArOTU1LDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvUmVndWxhckV4cHJl
c3Npb24uY3BwIFwKICAgICBwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAgXAorICAgIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBcCisg
ICAgcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwIFwKQEAgLTE3NjYsNyArMTc2OCw5IEBA
IEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5o
IFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAogICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUXQuaCBcCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAgICAg
cGxhdGZvcm0vU2Nyb2xsYmFyLmggXAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oIFwK
ICAgICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIFwKICAgICBwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmggXAogICAgIHBsYXRmb3JtL1NlYXJjaFBvcHVwTWVudS5oIFwKQEAgLTIzMjMs
OCArMjMyNywxMiBAQCBtYWVtbzUgewogfQogCiAKLSAgICB3aW4zMi0qfHdpbmNlKjogU09VUkNF
UyArPSBwbGF0Zm9ybS93aW4vU3lzdGVtVGltZVdpbi5jcHAgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdp
bi5jcHAKKyAgICB3aW4zMi0qfHdpbmNlKiB7CisgICAgICAgIEhFQURFUlMgKz0gcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JXaW4uaAorICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yV2luLmNwcCBcCisgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vd2luL1N5c3RlbVRp
bWVXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCisgICAgfQogCiAgICAgbWFjIHsKICAgICAgICAgU09V
UkNFUyArPSBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDY2MTQxKQor
KysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIy
Miw2ICsxMjIyLDggQEAKICAgICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAnUG9zaXhcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL29wZW50
eXBlLyddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNw
cCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCdd
LAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9Ta2lhRm9udFdpblxcLmNwcCQnXSwKICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3BwJCddLAogICAgICAgICAg
IF0sCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY2
MTQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjQyNDksNiArMjQyNDksMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3IuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cU2Nyb2xsQW5pbWF0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yV2luLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXFNjcm9sbEFuaW1hdG9yV2luLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXIuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KQEAgLTI0MjU3LDYgKzI0MjczLDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbGJhckNsaWVu
dC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NjYxNDEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDgxMyw3ICs0ODEzLDggQEAKIAkJQkM5OTgxMkUwREJFODA3QTAwOENF
OUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk5ODEyRDBEQkU4MDdBMDA4Q0U5RUYgLyogRE9NQWJzdHJh
Y3RWaWV3RnJhbWUuaCAqLzsgfTsKIAkJQkM5QUREMjMwQ0M0MDMyNjAwMDk4QzRDIC8qIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzlBREQ4MDBDQzQwOTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREN0Yw
Q0M0MDkyMjAwMDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLzsgfTsKLQkJ
QkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QkM2NEQwRTdDNDg4OTAwOEI5
ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJD
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM5QkM2NEIwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5jcHAgKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkM5QkM2NEUwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QkM2NEMwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJh
ckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDQTE2OUEyMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2
OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCAqLzsg
fTsKIAkJQkNBMTY5QTMwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2
OUExMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi87IH07
CiAJCUJDQTJCMDYxMTA1MDQ3NjAwMDQzQkQxQyAvKiBVc2VyU2NyaXB0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EyQjA2MDEwNTA0NzVGMDA0M0JE
MUMgLyogVXNlclNjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01MTA5LDYgKzUxMTAsOCBAQAogCQlDNUVCREQ4NDEwNUVEREVDMDA1Njgx
NkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXIuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlv
bkxpc3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwICovOyB9OworCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xs
QW5pbWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLzsgfTsK
KwkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNCRjY3RDEwRDk5QkFFMDBF
NkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLzsgfTsKIAkJQ0UwMkYwQzQxMUU4M0FERDAwQzY2
ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEgLyogU2NyaXB0Q29u
dHJvbGxlckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENF
MDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwICov
OyB9OwogCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1
N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNjExLDcgKzEw
NjE0LDggQEAKIAkJQkM5OTgxMkQwREJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0Zy
YW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUFic3RyYWN0Vmlld0Zy
YW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFERDIyMENDNDAzMjYwMDA5
OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM5QUREN0YwQ0M0MDkyMjAwMDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDOUJD
NjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5QkM2NEMwRTdDNDg4OTAwOEI5ODQ5
IC8qIFNjcm9sbGJhckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxiYXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMTY5QTAw
QkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNB
NzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0EyQjA2MDEwNTA0NzVGMDA0M0JEMUMgLyogVXNlclNjcmlwdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyU2NyaXB0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDkzNiw2ICsxMDk0MCw4IEBACiAJCUM1RUJERDgxMTA1RURE
RUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlv
bkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMw
OUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMg
LyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNC
RjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3RkEzMTIyMDczMTEwMEE0NzZE
NSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njc1
LDggKzE2NjgxLDExIEBACiAJCQkJMUM2M0EyNDYwRjcxNjQ2NjAwQzA5RDVBIC8qIFJ1bkxvb3BU
aW1lci5oICovLAogCQkJCTUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3Ry
eS5jcHAgKi8sCiAJCQkJNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5
LmggKi8sCisJCQkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNw
cCAqLywKKwkJCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAq
LywKIAkJCQlCQzdCMkFGODA0NTA4MjQxMDBBODAwMEYgLyogU2Nyb2xsYmFyLmggKi8sCi0JCQkJ
QkM5QkM2NEQwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovLAorCQkJCUJD
OUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuY3BwICovLAorCQkJCUJD
OUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKIAkJCQlCQzhC
ODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAqLywKIAkJCQlCQzE0MDI4
ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICovLAogCQkJ
CUJDMTQwMjg5MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICov
LApAQCAtMTk3ODksNiArMTk3OTgsNyBAQAogCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAv
KiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMEUyMEVEMzlENkYwMEE2
NThGMiAvKiBTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjI4QzI4NDUxMEQ4MjUw
MDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0EzQkY2
N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzhCODU0QjBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUu
aCBpbiBIZWFkZXJzICovLApAQCAtMjIzMjMsNyArMjIzMzMsOSBAQAogCQkJCTlGNzIzMDUwMTEx
ODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTM0Q0MwRTEwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUNBM0JGNjdDMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xs
YmFyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgzNjgwODAw
MzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRUY4NjlGMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVEOTI1QjY3MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxCZWhhdmlvci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFPUyhXSU5ET1dT
KQorU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBTY3JvbGxBbmltYXRvcihjbGllbnQpOworfQor
I2VuZGlmCisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpCit7CisgICAgZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikgPyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOworICAgIGZs
b2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0
aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0
aW9uKSkpLCAwLjBmKTsKKyAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgKmN1cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgbV9jbGllbnQtPnNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJy
ZW50UG9zWSkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikKKyAgICAgICAgbV9jdXJyZW50UG9zWCA9IHBvczsKKyAgICBlbHNlCisgICAg
ICAgIG1fY3VycmVudFBvc1kgPSBwb3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxB
bmltYXRvcl9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyQ2xpZW50Owor
CitjbGFzcyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1h
dG9yKiBjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50Kik7CisKKyAgICBTY3JvbGxBbmltYXRvcihTY3Jv
bGxiYXJDbGllbnQqIGNsaWVudCkgOiBtX2NsaWVudChjbGllbnQpIHsgfQorICAgIHZpcnR1YWwg
flNjcm9sbEFuaW1hdG9yKCkgeyB9CisKKyAgICAvLyBDb21wdXRlcyBhIHNjcm9sbCBkZXN0aW5h
dGlvbiBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8g
YWxyZWFkeSBhdCB0aGUgZGVzdGluYXRpb24uICBPdGhlcndpc2UsIHN0YXJ0cyBzY3JvbGxpbmcg
dG93YXJkcyB0aGUKKyAgICAvLyBkZXN0aW5hdGlvbiBhbmQgcmV0dXJucyB0cnVlLiAgU2Nyb2xs
aW5nIG1heSBiZSBpbW1lZGlhdGUgb3IgYW5pbWF0ZWQuCisgICAgLy8gVGhlIGJhc2UgY2xhc3Mg
aW1wbGVtZW50YXRpb24gYWx3YXlzIHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVz
LgorICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKworICAgIC8vIFN0b3Bz
IGFueSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiBhbmQgdXBkYXRlcyB0aGUgU2Ny
b2xsQW5pbWF0b3IKKyAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRo
aXMgZG9lcyBub3QgY2F1c2UgYSBjYWxsYmFjayB0byB0aGUKKyAgICAvLyBTY3JvbGxiYXJDbGll
bnQuCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworCitwcm90ZWN0ZWQ6CisgICAgU2Nyb2xsYmFy
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1
c2luZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCisgICAgZmxvYXQgbV9jdXJyZW50
UG9zWTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yV2luLmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK1Njcm9sbEFu
aW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQor
eworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3JXaW4oY2xpZW50KTsKK30KKworY29uc3Qg
ZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKKwor
U2Nyb2xsQW5pbWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRv
cldpbiogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcykKKyAgICA6IG1fY3VycmVudFBvcyhjdXJy
ZW50UG9zKQorICAgICwgbV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJlbnRWZWxvY2l0eSgw
KQorICAgICwgbV9kZXNpcmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFuaW1hdGlvblRpbWUo
MCkKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JXaW46OmFu
aW1hdGlvblRpbWVyRmlyZWQpCit7Cit9CisKKworU2Nyb2xsQW5pbWF0b3JXaW46OlNjcm9sbEFu
aW1hdG9yV2luKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQorICAgIDogU2Nyb2xsQW5pbWF0b3Io
Y2xpZW50KQorICAgICwgbV9ob3Jpem9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAg
ICAsIG1fdmVydGljYWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxB
bmltYXRvcldpbjo6flNjcm9sbEFuaW1hdG9yV2luKCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGlt
ZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZO
ZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBEb24n
dCBhbmltYXRlIGp1bXBpbmcgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGRvY3VtZW50
LgorICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQorICAgICAgICByZXR1
cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAs
IG11bHRpcGxpZXIpOworCisgICAgLy8gVGhpcyBpcyBhbiBhbmltYXRhYmxlIHNjcm9sbC4gIENh
bGN1bGF0ZSB0aGUgc2Nyb2xsIGRlbHRhLgorICAgIFBlckF4aXNEYXRhKiBkYXRhID0gKG9yaWVu
dGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/ICZtX3ZlcnRpY2FsRGF0YSA6ICZtX2hvcml6
b250YWxEYXRhOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKGRhdGEtPm1f
ZGVzaXJlZFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2Ns
aWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CisgICAgaWYgKG5ld1BvcyA9
PSBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLT5t
X2Rlc2lyZWRQb3MgPSBuZXdQb3M7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFuaW1hdGlvbiB2
ZWxvY2l0eS4KKyAgICBpZiAoKmRhdGEtPm1fY3VycmVudFBvcyA9PSBkYXRhLT5tX2Rlc2lyZWRQ
b3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGFscmVhZHlBbmltYXRpbmcgPSBk
YXRhLT5tX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCk7CisgICAgLy8gVGhlcmUgYXJlIGEgbnVt
YmVyIG9mIGRpZmZlcmVudCBzb3VyY2VzIG9mIHNjcm9sbCByZXF1ZXN0cy4gIFdlIHdhbnQgdG8K
KyAgICAvLyBtYWtlIGJvdGgga2V5Ym9hcmQgYW5kIHdoZWVsLWdlbmVyYXRlZCBzY3JvbGwgcmVx
dWVzdHMgKHdoaWNoIGNhbiBjb21lIGF0CisgICAgLy8gdW5wcmVkaWN0YWJsZSByYXRlcykgYW5k
IGF1dG9zY3JvbGxpbmcgZnJvbSBob2xkaW5nIGRvd24gdGhlIG1vdXNlIGJ1dHRvbgorICAgIC8v
IG9uIGEgc2Nyb2xsYmFyIHBhcnQgKHdoZXJlIHRoZSByZXF1ZXN0IHJhdGUgY2FuIGJlIG9idGFp
bmVkIGZyb20gdGhlCisgICAgLy8gc2Nyb2xsYmFyIHRoZW1lKSBmZWVsIHNtb290aCwgcmVzcG9u
c2l2ZSwgYW5kIHNpbWlsYXIuCisgICAgLy8KKyAgICAvLyBXaGVuIGF1dG9zY3JvbGxpbmcsIHRo
ZSBzY3JvbGxiYXIncyBhdXRvc2Nyb2xsIHRpbWVyIHdpbGwgY2FsbCB1cyB0bworICAgIC8vIGlu
Y3JlbWVudCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBieSB8c3RlcHwgKHdpdGggfG11bHRpcGxpZXJ8
ID09IDEpIGV2ZXJ5CisgICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9z
Y3JvbGxUaW1lckRlbGF5KCkgc2Vjb25kcy4gIElmIHdlIHNldAorICAgIC8vIHRoZSBkZXNpcmVk
IHZlbG9jaXR5IHRvIGV4YWN0bHkgdGhpcyByYXRlLCBzbW9vdGggc2Nyb2xsaW5nIHdpbGwgbmVp
dGhlcgorICAgIC8vIHJhY2UgYWhlYWQgKGFuZCB0aGVuIGhhdmUgdG8gc2xvdyBkb3duKSBub3Ig
aW5jcmVhc2luZ2x5IGxhZyBiZWhpbmQsIGJ1dAorICAgIC8vIHdpbGwgYmUgc21vb3RoIGFuZCBz
eW5jaHJvbml6ZWQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0aGUgYWNj
ZWxlcmF0aW9uIHBlcmlvZCwgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4KKyAgICAvLyB0aGlzIGNh
c2Ugd291bGQgbGFnIHRoZSBkZXNpcmVkIG9uZSBieSBhIHNtYWxsLCBjb25zdGFudCBhbW91bnQg
KHNlZQorICAgIC8vIGNvbW1lbnRzIG9uIGFuaW1hdGVTY3JvbGwoKSk7IHRoZSBleGFjdCBhbW91
bnQgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIGxhZyA9IHxzdGVwfCAtIHYoMC41dEEgKyB0RCkKKyAg
ICAvLyBXaGVyZQorICAgIC8vICAgdiA9IFRoZSBzdGVhZHktc3RhdGUgdmVsb2NpdHksCisgICAg
Ly8gICAgICAgfHN0ZXB8IC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3Jv
bGxUaW1lckRlbGF5KCkKKyAgICAvLyAgIHRBID0gYWNjZWxlcmF0aW9uVGltZSgpCisgICAgLy8g
ICB0RCA9IFRoZSB0aW1lIHdlIHByZXRlbmQgaGFzIGFscmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRp
bmcgdG8gc2Nyb2xsLAorICAgIC8vICAgICAgICB8YW5pbWF0aW9uVGltZXJEZWxheXwKKyAgICAv
LworICAgIC8vIFRoaXMgbGFnIHByb3ZpZGVzIHNvbWUgYnVmZmVyIGFnYWluc3QgdGltZXIgaml0
dGVyIHNvIHdlJ3JlIGxlc3MgbGlrZWx5CisgICAgLy8gdG8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0
aW9uIGFuZCBzdG9wIChhbmQgdGh1cyBoYXZlIHRvIHJlLWFjY2VsZXJhdGUsCisgICAgLy8gY2F1
c2luZyBhIHZpc2libGUgaGl0Y2gpIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGF1dG9zY3Jv
bGwgaW5jcmVtZW50LgorICAgIC8vCisgICAgLy8gVGh1cywgZm9yIGF1dG9zY3JvbGwtdGltZXIt
dHJpZ2dlcmVkIHJlcXVlc3RzLCB0aGUgaWRlYWwgc3RlYWR5LXN0YXRlCisgICAgLy8gZGlzdGFu
Y2UgdG8gdHJhdmVsIGluIGVhY2ggdGltZSBpbnRlcnZhbCBpczoKKyAgICAvLyAgIGZsb2F0IGFu
aW1hdGlvblN0ZXAgPSBzdGVwOworICAgIC8vIE5vdGUgdGhhdCB3aGVuIHdlJ3JlIG5vdCBhbHJl
YWR5IGFuaW1hdGluZywgdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzCisgICAgLy8gdGhlIGRp
c3RhbmNlIHRvIHRoZSB0YXJnZXQgcG9zaXRpb24uICBXZSdsbCByZXR1cm4gdG8gdGhhdCBpbiBh
IG1vbWVudC4KKyAgICAvLworICAgIC8vIEZvciBrZXlib2FyZCBhbmQgd2hlZWwgc2Nyb2xscywg
d2UgZG9uJ3Qga25vdyB3aGVuIHRoZSBuZXh0IGluY3JlbWVudAorICAgIC8vIHdpbGwgYmUgcmVx
dWVzdGVkLiAgSWYgd2Ugc2V0IHRoZSB0YXJnZXQgdmVsb2NpdHkgYmFzZWQgb24gaG93IGZhciBh
d2F5CisgICAgLy8gZnJvbSB0aGUgdGFyZ2V0IHBvc2l0aW9uIHdlIGFyZSwgdGhlbiBmb3Iga2V5
Ym9hcmQvd2hlZWwgZXZlbnRzIHRoYXQgY29tZQorICAgIC8vIGZhc3RlciB0aGFuIHRoZSBhdXRv
c2Nyb2xsIGRlbGF5LCB3ZSdsbCBhc3ltcHRvdGljYWxseSBhcHByb2FjaCB0aGUKKyAgICAvLyB2
ZWxvY2l0eSBuZWVkZWQgdG8gc3RheSBzbW9vdGhseSBpbiBzeW5jIHdpdGggdGhlIHVzZXIncyBh
Y3Rpb25zOyBmb3IKKyAgICAvLyBldmVudHMgdGhhdCBjb21lIHNsb3dlciwgd2UnbGwgc2Nyb2xs
IG9uZSBpbmNyZW1lbnQgYW5kIHRoZW4gcGF1c2UgdW50aWwKKyAgICAvLyB0aGUgbmV4dCBldmVu
dCBmaXJlcy4KKyAgICBmbG9hdCBhbmltYXRpb25TdGVwID0gYWJzKG5ld1BvcyAtICpkYXRhLT5t
X2N1cnJlbnRQb3MpOworICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdoZWVs
IGNvbnRpbnVhbGx5IHNwdW4pLCB0aGVuIG9uY2Ugd2UgaGF2ZQorICAgIC8vIHJlYWNoZWQgYSB2
ZWxvY2l0eSBjbG9zZSB0byB0aGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LCB3ZSdyZSBsaWtlbHkg
dG8KKyAgICAvLyBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYXQgYXJvdW5kIHRoZSBzYW1lIHRp
bWUgd2UnZCBleHBlY3QgdGhlIG5leHQKKyAgICAvLyBpbmNyZW1lbnQgdG8gb2NjdXIgLS0gYmFk
IGJlY2F1c2UgaXQgbGVhZHMgdG8gaGl0Y2hpbmcgYXMgZGVzY3JpYmVkIGFib3ZlCisgICAgLy8g
KGlmIGF1dG9zY3JvbGwtYmFzZWQgcmVxdWVzdHMgZGlkbid0IHJlc3VsdCBpbiBhIHNtYWxsIGFt
b3VudCBvZiBjb25zdGFudAorICAgIC8vIGxhZykuICBTbyBpZiB3ZSdyZSBjYWxsZWQgYWdhaW4g
d2hpbGUgYWxyZWFkeSBhbmltYXRpbmcsIHdlIHdhbnQgdG8gdHJpbQorICAgIC8vIHRoZSBhbmlt
YXRpb25TdGVwIHNsaWdodGx5IHRvIG1haW50YWluIGxhZyBsaWtlIHdoYXQncyBkZXNjcmliZWQg
YWJvdmUuCisgICAgLy8gKEkgc2F5ICJtYWludGFpbiIgc2luY2Ugd2UnbGwgYWxyZWFkeSBiZSBs
YWdnZWQgZHVlIHRvIHRoZSBhY2NlbGVyYXRpb24KKyAgICAvLyBkdXJpbmcgdGhlIGZpcnN0IHNj
cm9sbCBwZXJpb2QuKQorICAgIC8vCisgICAgLy8gUmVtZW1iZXIgdGhhdCB0cmltbWluZyB3b24n
dCBjYXVzZSB1cyB0byBmYWxsIHN0ZWFkaWx5IGZ1cnRoZXIgYmVoaW5kCisgICAgLy8gaGVyZSwg
YmVjYXVzZSB0aGUgZnVydGhlciBiZWhpbmQgd2UgYXJlLCB0aGUgbGFyZ2VyIHRoZSBiYXNlIHN0
ZXAgdmFsdWUKKyAgICAvLyBhYm92ZS4gIEdpdmVuIHRoZSBzY3JvbGxpbmcgYWxnb3JpdGhtIGlu
IGFuaW1hdGVTY3JvbGwoKSwgdGhlIHByYWN0aWNhbAorICAgIC8vIGVmZmVjdCB3aWxsIGFjdHVh
bGx5IGJlIHRoYXQsIGFzc3VtaW5nIGEgY29uc3RhbnQgdHJpbSBmYWN0b3IsIHdlJ2xsIGxhZwor
ICAgIC8vIGJ5IGEgY29uc3RhbnQgYW1vdW50IGRlcGVuZGluZyBvbiB0aGUgcmF0ZSBhdCB3aGlj
aCBpbmNyZW1lbnRzIG9jY3VyCisgICAgLy8gY29tcGFyZWQgdG8gdGhlIGF1dG9zY3JvbGwgdGlt
ZXIgZGVsYXkuICBUaGUgZXhhY3QgbGFnIGlzIGdpdmVuIGJ5CisgICAgLy8gICBsYWcgPSB8c3Rl
cHwgKiAoKHIgLyBrKSAtIDEpCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHIgPSBUaGUgcmF0aW8g
b2YgdGhlIGF1dG9zY3JvbGwgcmVwZWF0IGRlbGF5LAorICAgIC8vICAgICAgIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpLCB0byB0aGUKKyAgICAv
LyAgICAgICBrZXkvd2hlZWwgcmVwZWF0IGRlbGF5IChpLmUuID4gMSB3aGVuIGtleXMgcmVwZWF0
IGZhc3RlcikKKyAgICAvLyAgIGsgPSBUaGUgdmVsb2NpdHkgdHJpbSBjb25zdGFudCBnaXZlbiBi
ZWxvdworICAgIC8vCisgICAgLy8gV2Ugd2FudCB0byBjaG9vc2UgdGhlIHRyaW0gZmFjdG9yIHN1
Y2ggdGhhdCBmb3IgY2FsbHMgdGhhdCBjb21lIGF0IHRoZQorICAgIC8vIGF1dG9zY3JvbGwgdGlt
ZXIgcmF0ZSwgd2UnbGwgd2luZCB1cCB3aXRoIHRoZSBzYW1lIGxhZyBhcyBpbiB0aGUKKyAgICAv
LyAicGVyZmVjdCIgY2FzZSBkZXNjcmliZWQgYWJvdmUgKG9yLCB0byBwdXQgaXQgYW5vdGhlciB3
YXksIHdlJ2xsIGVuZCB1cAorICAgIC8vIHdpdGggfGFuaW1hdGlvblN0ZXB8ID09IHxzdGVwfCAq
IHxtdWx0aXBsaWVyfCBkZXNwaXRlIHRoZSBhY3R1YWwgZGlzdGFuY2UKKyAgICAvLyBjYWxjdWxh
dGVkIGFib3ZlIGJlaW5nIGxhcmdlciB0aGFuIHRoYXQpLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiAi
cGVyZmVjdCIKKyAgICAvLyBiZWhhdmlvciBmb3IgYXV0b3Njcm9sbGluZyB3aXRob3V0IGhhdmlu
ZyB0byBzcGVjaWFsLWNhc2UgaXQuCisgICAgaWYgKGFscmVhZHlBbmltYXRpbmcpCisgICAgICAg
IGFuaW1hdGlvblN0ZXAgLz0gKDIuMCAtICgoMS4wIC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkpICogKDAuNSAqIGFjY2VsZXJhdGlvblRpbWUo
KSArIGFuaW1hdGlvblRpbWVyRGVsYXkpKSk7CisgICAgLy8gVGhlIHJlc3VsdCBvZiBhbGwgdGhp
cyBpcyB0aGF0IHNpbmdsZSBrZXlwcmVzc2VzIG9yIHdoZWVsIGZsaWNrcyB3aWxsCisgICAgLy8g
c2Nyb2xsIGluIHRoZSBzYW1lIHRpbWUgcGVyaW9kIGFzIHNpbmdsZSBwcmVzc2VzIG9mIHNjcm9s
bGJhciBlbGVtZW50czsKKyAgICAvLyBob2xkaW5nIHRoZSBtb3VzZSBkb3duIG9uIGEgc2Nyb2xs
YmFyIHBhcnQgd2lsbCBzY3JvbGwgYXMgZmFzdCBhcworICAgIC8vIHBvc3NpYmxlIHdpdGhvdXQg
aGl0Y2hpbmc7IGFuZCBvdGhlciByZXBlYXRlZCBzY3JvbGwgZXZlbnRzIHdpbGwgYWxzbworICAg
IC8vIHNjcm9sbCB3aXRoIHRoZSBzYW1lIHRpbWUgbGFnIGFzIGhvbGRpbmcgZG93biB0aGUgbW91
c2Ugb24gYSBzY3JvbGxiYXIKKyAgICAvLyBwYXJ0LgorICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9j
aXR5ID0gYW5pbWF0aW9uU3RlcCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRv
c2Nyb2xsVGltZXJEZWxheSgpOworCisgICAgLy8gSWYgd2UncmUgbm90IGFscmVhZHkgc2Nyb2xs
aW5nLCBzdGFydC4KKyAgICBpZiAoIWFscmVhZHlBbmltYXRpbmcpCisgICAgICAgIGFuaW1hdGVT
Y3JvbGwoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JX
aW46OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQoreworICAgIFBlckF4aXNEYXRhKiBkYXRhID0gKG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gJm1faG9yaXpvbnRhbERhdGEgOiAm
bV92ZXJ0aWNhbERhdGE7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoZGF0YSk7Cisg
ICAgKmRhdGEtPm1fY3VycmVudFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2Rlc2lyZWRQb3MgPSBw
b3M7CisgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgIGRhdGEtPm1fZGVzaXJl
ZFZlbG9jaXR5ID0gMDsKK30KKworLy8gc3RhdGljCitkb3VibGUgU2Nyb2xsQW5pbWF0b3JXaW46
OmFjY2VsZXJhdGlvblRpbWUoKQoreworICAgIC8vIFdlIGVsZWN0IHRvIHVzZSBTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBhcworICAgIC8vIHRo
ZSBsZW5ndGggb2YgdGltZSB3ZSdsbCB0YWtlIHRvIGFjY2VsZXJhdGUgZnJvbSAwIHRvIG91ciB0
YXJnZXQKKyAgICAvLyB2ZWxvY2l0eS4gIENob29zaW5nIGEgbGFyZ2VyIHZhbHVlIHdvdWxkIHBy
b2R1Y2UgYSBtb3JlIHByb25vdW5jZWQKKyAgICAvLyBhY2NlbGVyYXRpb24gZWZmZWN0LgorICAg
IHJldHVybiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZChU
aW1lcjxTY3JvbGxBbmltYXRvcldpbj4qIHRpbWVyKQoreworICAgIGFuaW1hdGVTY3JvbGwoKHRp
bWVyID09ICZtX2hvcml6b250YWxEYXRhLm1fYW5pbWF0aW9uVGltZXIpID8gJm1faG9yaXpvbnRh
bERhdGEgOiAmbV92ZXJ0aWNhbERhdGEpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpz
dG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSogZGF0YSkKK3sKKyAgICBpZiAo
ZGF0YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBkYXRhLT5tX2FuaW1h
dGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNj
cm9sbChQZXJBeGlzRGF0YSogZGF0YSkKK3sKKyAgICAvLyBOb3RlIG9uIHNtb290aCBzY3JvbGxp
bmcgcGVyZiB2ZXJzdXMgbm9uLXNtb290aCBzY3JvbGxpbmcgcGVyZjoKKyAgICAvLyBUaGUgdG90
YWwgdGltZSB0byBwZXJmb3JtIGEgY29tcGxldGUgc2Nyb2xsIGlzIGdpdmVuIGJ5CisgICAgLy8g
ICB0ID0gdDAgKyAwLjV0QSAtIHREICsgdFMKKyAgICAvLyBXaGVyZQorICAgIC8vICAgdDAgPSBU
aGUgdGltZSB0byBwZXJmb3JtIHRoZSBzY3JvbGwgd2l0aG91dCBzbW9vdGggc2Nyb2xsaW5nCisg
ICAgLy8gICB0QSA9IFRoZSBhY2NlbGVyYXRpb24gdGltZSwKKyAgICAvLyAgICAgICAgU2Nyb2xs
YmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgKHNlZSBiZWxv
dykKKyAgICAvLyAgIHREID0gfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8gICB0UyA9IEEg
dmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aW1lIHJlcXVpcmVkIHRvIHBlcmZvcm0g
YQorICAgIC8vICAgICAgICBzaW5nbGUgc2Nyb2xsIGluY3JlbWVudCwgaS5lLiB0aGUgd29yayBk
b25lIGR1ZSB0byBjYWxsaW5nCisgICAgLy8gICAgICAgIGNsaWVudCgpLT52YWx1ZUNoYW5nZWQo
KSAofjAgZm9yIHNpbXBsZSBwYWdlcywgbGFyZ2VyIGZvciBjb21wbGV4CisgICAgLy8gICAgICAg
IHBhZ2VzKS4KKyAgICAvLworICAgIC8vIEJlY2F1c2UgdEEgYW5kIHREIGFyZSBmYWlybHkgc21h
bGwsIHRoZSB0b3RhbCBsYWcgKGFzIHVzZXJzIHBlcmNlaXZlIGl0KQorICAgIC8vIGlzIG5lZ2xp
Z2libGUgZm9yIHNpbXBsZSBwYWdlcyBhbmQgcm91Z2hseSB0UyBmb3IgY29tcGxleCBwYWdlcy4g
IFdpdGhvdXQKKyAgICAvLyBrbm93aW5nIGluIGFkdmFuY2UgaG93IGxhcmdlIHRTIGlzIGl0J3Mg
aGFyZCB0byBkbyBiZXR0ZXIgdGhhbiB0aGlzLgorICAgIC8vIFBlcmhhcHMgd2UgY291bGQgdHJ5
IHRvIHJlbWVtYmVyIHByZXZpb3VzIHZhbHVlcyBhbmQgZm9yd2FyZC1jb21wZW5zYXRlLgorCisK
KyAgICAvLyBXZSB3YW50IHRvIHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIHRo
ZSB0aW1lIGl0J3MgYmVlbiBzaW5jZQorICAgIC8vIG91ciBsYXN0IHVwZGF0ZS4gIFRoaXMgbWF5
IGJlIGxvbmdlciB0aGFuIG91ciBpZGVhbCB0aW1lLCBlc3BlY2lhbGx5IGlmCisgICAgLy8gdGhl
IHBhZ2UgaXMgY29tcGxleCBvciB0aGUgc3lzdGVtIGlzIHNsb3cuCisgICAgLy8KKyAgICAvLyBU
byBhdm9pZCBmZWVsaW5nIGxhZ2d5LCBpZiB3ZSd2ZSBqdXN0IHN0YXJ0ZWQgc21vb3RoIHNjcm9s
bGluZyB3ZSBwcmV0ZW5kCisgICAgLy8gd2UndmUgYWxyZWFkeSBhY2NlbGVyYXRlZCBmb3Igb25l
IGlkZWFsIGludGVydmFsLCBzbyB0aGF0IHdlJ2xsIHNjcm9sbCBhdAorICAgIC8vIGxlYXN0IHNv
bWUgZGlzdGFuY2UgaW1tZWRpYXRlbHkuCisgICAgZG91YmxlIGxhc3RTY3JvbGxJbnRlcnZhbCA9
IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID8gKFdURjo6Y3VycmVudFRpbWUoKSAtIGRhdGEtPm1f
bGFzdEFuaW1hdGlvblRpbWUpIDogYW5pbWF0aW9uVGltZXJEZWxheTsKKworICAgIC8vIEZpZ3Vy
ZSBvdXQgaG93IGZhciB3ZSd2ZSBhY3R1YWxseSB0cmF2ZWxlZCBhbmQgdXBkYXRlIG91ciBjdXJy
ZW50CisgICAgLy8gdmVsb2NpdHkuCisgICAgZmxvYXQgZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICBp
ZiAoZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPCBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSkgewor
ICAgICAgICAvLyBXZSBhY2NlbGVyYXRlIGF0IGEgY29uc3RhbnQgcmF0ZSB1bnRpbCB3ZSByZWFj
aCB0aGUgZGVzaXJlZCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uUmF0ZSA9
IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5IC8gYWNjZWxlcmF0aW9uVGltZSgpOworCisgICAgICAg
IC8vIEZpZ3VyZSBvdXQgd2hldGhlciBjb250YW50IGFjY2VsZXJhdGlvbiBoYXMgY2F1c2VkIHVz
IHRvIHJlYWNoIG91cgorICAgICAgICAvLyB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0
IHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlID0gYWNjZWxlcmF0aW9uUmF0ZSAqIGxhc3RTY3JvbGxJ
bnRlcnZhbDsKKyAgICAgICAgZmxvYXQgcG90ZW50aWFsTmV3VmVsb2NpdHkgPSBkYXRhLT5tX2N1
cnJlbnRWZWxvY2l0eSArIHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlOworICAgICAgICBpZiAocG90
ZW50aWFsTmV3VmVsb2NpdHkgPiBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSkgeworICAgICAgICAg
ICAgLy8gV2UgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGF0IHNvbWUgcG9pbnQgYmV0d2Vl
biBvdXIgbGFzdAorICAgICAgICAgICAgLy8gdXBkYXRlIGFuZCBub3cuICBUaGUgZGlzdGFuY2Ug
dHJhdmVsZWQgY2FuIGJlIGNhbGN1bGF0ZWQgaW4gdHdvCisgICAgICAgICAgICAvLyBwaWVjZXM6
IHRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB3aGlsZSBhY2NlbGVyYXRpbmcsIGFuZCB0aGUKKyAgICAg
ICAgICAgIC8vIGRpc3RhbmNlIHRyYXZlbGVkIGFmdGVyIHJlYWNoaW5nIHRoZSB0YXJnZXQgdmVs
b2NpdHkuCisgICAgICAgICAgICBmbG9hdCBhY3R1YWxWZWxvY2l0eUNoYW5nZSA9IGRhdGEtPm1f
ZGVzaXJlZFZlbG9jaXR5IC0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHk7CisgICAgICAgICAgICBm
bG9hdCBhY2NlbGVyYXRpb25JbnRlcnZhbCA9IGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gYWNjZWxl
cmF0aW9uUmF0ZTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB1bmRlciBj
b25zdGFudCBhY2NlbGVyYXRpb24gaXMgdGhlIGFyZWEKKyAgICAgICAgICAgIC8vIHVuZGVyIGEg
bGluZSBzZWdtZW50IHdpdGggYSBjb25zdGFudCByaXNpbmcgc2xvcGUuICBCcmVhayB0aGlzCisg
ICAgICAgICAgICAvLyBpbnRvIGEgdHJpYW5ndWxhciBwb3J0aW9uIGF0b3AgYSByZWN0YW5ndWxh
ciBwb3J0aW9uIGFuZCBzdW0uCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKChkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSArIChhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIDIpKSAqIGFjY2Vs
ZXJhdGlvbkludGVydmFsKTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBh
dCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGlzIHNpbXBseQorICAgICAgICAgICAgLy8gKHRhcmdldCB2
ZWxvY2l0eSkgKiAocmVtYWluaW5nIHRpbWUgYWZ0ZXIgYWNjZWxlcmF0aW5nKS4KKyAgICAgICAg
ICAgIGRpc3RhbmNlVHJhdmVsZWQgKz0gKGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ICogKGxhc3RT
Y3JvbGxJbnRlcnZhbCAtIGFjY2VsZXJhdGlvbkludGVydmFsKSk7CisgICAgICAgICAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gQ29uc3RhbnQgYWNjZWxlcmF0aW9uIHRocm91Z2ggdGhl
IGVudGlyZSB0aW1lIGludGVydmFsLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IChk
YXRhLT5tX2N1cnJlbnRWZWxvY2l0eSArIChwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSAvIDIpKSAq
IGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5
ID0gcG90ZW50aWFsTmV3VmVsb2NpdHk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSwgc28gdGhlIGRp
c3RhbmNlIHdlJ3ZlCisgICAgICAgIC8vIHRyYXZlbGVkIGlzIHNpbXBseSAoY3VycmVudCB2ZWxv
Y2l0eSkgKiAoZWxhcHNlZCB0aW1lKS4KKyAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IGRhdGEt
Pm1fY3VycmVudFZlbG9jaXR5ICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICAvLyBJZiBv
dXIgZGVzaXJlZCB2ZWxvY2l0eSBoYXMgZGVjcmVhc2VkLCBkcm9wIHRoZSBjdXJyZW50IHZlbG9j
aXR5IHRvby4KKyAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2ly
ZWRWZWxvY2l0eTsKKyAgICB9CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRp
b24gYmFzZWQgb24gdGhlIGRpc3RhbmNlIHRyYXZlbGVkLgorICAgIGlmIChkaXN0YW5jZVRyYXZl
bGVkID49IGFicyhkYXRhLT5tX2Rlc2lyZWRQb3MgLSAqZGF0YS0+bV9jdXJyZW50UG9zKSkgewor
ICAgICAgICAvLyBXZSd2ZSB0cmF2ZWxlZCBmYXIgZW5vdWdoIHRvIHJlYWNoIHRoZSBkZXNpcmVk
IHBvc2l0aW9uLiAgU3RvcCBzbW9vdGgKKyAgICAgICAgLy8gc2Nyb2xsaW5nLgorICAgICAgICAq
ZGF0YS0+bV9jdXJyZW50UG9zID0gZGF0YS0+bV9kZXNpcmVkUG9zOworICAgICAgICBkYXRhLT5t
X2N1cnJlbnRWZWxvY2l0eSA9IDA7CisgICAgICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBOb3QgeWV0IGF0IHRoZSB0YXJnZXQgcG9zaXRp
b24uICBUcmF2ZWwgdG93YXJkcyBpdCBhbmQgc2V0IHVwIHRoZQorICAgICAgICAvLyBuZXh0IHVw
ZGF0ZS4KKyAgICAgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPiBkYXRhLT5tX2Rlc2lyZWRQ
b3MpCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gLWRpc3RhbmNlVHJhdmVsZWQ7Cisg
ICAgICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgKz0gZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAg
ZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSk7
CisgICAgICAgIGRhdGEtPm1fbGFzdEFuaW1hdGlvblRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCk7
CisgICAgfQorICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBv
aW50KCptX2hvcml6b250YWxEYXRhLm1fY3VycmVudFBvcywgKm1fdmVydGljYWxEYXRhLm1fY3Vy
cmVudFBvcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvcldpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
cldpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5p
bWF0b3JXaW5faAorI2RlZmluZSBTY3JvbGxBbmltYXRvcldpbl9oCisKKyNpbmNsdWRlICJTY3Jv
bGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2Nyb2xsQW5pbWF0b3JXaW4gOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVi
bGljOgorICAgIFNjcm9sbEFuaW1hdG9yV2luKFNjcm9sbGJhckNsaWVudCopOworICAgIHZpcnR1
YWwgflNjcm9sbEFuaW1hdG9yV2luKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllcik7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2YXRlOgorICAgIHN0cnVj
dCBQZXJBeGlzRGF0YSB7CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBw
YXJlbnQsIGZsb2F0KiBjdXJyZW50UG9zKTsKKworICAgICAgICBmbG9hdCogbV9jdXJyZW50UG9z
OworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRQb3M7CisgICAgICAgIGZsb2F0IG1fY3VycmVudFZl
bG9jaXR5OworICAgICAgICBmbG9hdCBtX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91Ymxl
IG1fbGFzdEFuaW1hdGlvblRpbWU7CisgICAgICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiBt
X2FuaW1hdGlvblRpbWVyOworICAgIH07CisKKyAgICBzdGF0aWMgZG91YmxlIGFjY2VsZXJhdGlv
blRpbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGFuaW1hdGlvblRpbWVyRGVsYXk7CisK
KyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+Kik7
CisgICAgdm9pZCBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSopOworICAg
IHZvaWQgYW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0YSopOworCisgICAgUGVyQXhpc0RhdGEgbV9o
b3Jpem9udGFsRGF0YTsKKyAgICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2FsRGF0YTsKK307CisKK30K
KyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvcldpbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDIwIEBAIElu
dFBvaW50IFNjcm9sbFZpZXc6Om1heGltdW1TY3JvbGxQb3NpdGkKICAgICByZXR1cm4gSW50UG9p
bnQobWF4aW11bU9mZnNldC53aWR0aCgpLCBtYXhpbXVtT2Zmc2V0LmhlaWdodCgpKTsKIH0KIAor
aW50IFNjcm9sbFZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNh
bFNjcm9sbGJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRv
dGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgdHJ1ZSk7CisgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKG9m
ZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3Zl
ZC4KQEAgLTQ0MSw3ICs0NTUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMo
Y29uc3QKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMo
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0
aCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lk
dGgoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndp
ZHRoKCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAg
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZh
bHNlKTsgCiAgICAgfSAKQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoY29uc3QKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1
cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRl
bnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3Jv
bGwuaGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3Jv
bGwuaGVpZ2h0KCksIGZhbHNlKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQp
CiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlv
bihmYWxzZSk7CiAgICAgfQpAQCAtNjczLDcgKzY4NywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6Ondo
ZWVsRXZlbnQoUGxhdGZvcm1XaGVlCiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAg
ICAgICAgICAgZGVsdGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJ
bnRTaXplKC1kZWx0YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBi
YWNrIG9uIHNjcm9sbEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJv
IGRlbHRhPworICAgICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAg
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4
ZWwsIGRlbHRhWSk7CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwg
U2Nyb2xsQnlQaXhlbCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw5IEBAIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMg
V2lkZ2V0LCBwdWJsaWMKIHB1YmxpYzoKICAgICB+U2Nyb2xsVmlldygpOwogCi0gICAgLy8gU2Ny
b2xsYmFyQ2xpZW50IGZ1bmN0aW9uLiBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCisg
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhl
IG90aGVycy4KKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKik7CiAgICAgCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUg
U2Nyb2xsVmlldy4gVGhlIFNjcm9sbFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCBy
ZXBhaW50cyB0byB0aGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDY2MTQx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsMTIgKzEwMSwxMiBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAgIG1fdGhlbWUtPnVu
cmVnaXN0ZXJTY3JvbGxiYXIodGhpcyk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShp
bnQgdikKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdiwgYm9vbCBmcm9tU2Nyb2xsQW5p
bWF0aW9uKQogewogICAgIHYgPSBtYXgobWluKHYsIG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6
ZSksIDApOwogICAgIGlmICh2YWx1ZSgpID09IHYpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
T3VyIHZhbHVlIHN0YXllZCB0aGUgc2FtZS4KLSAgICBzZXRDdXJyZW50UG9zKHYpOworICAgIHNl
dEN1cnJlbnRQb3ModiwgIWZyb21TY3JvbGxBbmltYXRpb24pOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xNDIsOSArMTQyLDYgQEAgYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZAogICAgIH0KICNlbmRpZgogCi0gICAgLy8gSWdub3JlIHBlcnBlbmRpY3VsYXIgc2Ny
b2xscy4KLSAgICBpZiAoKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAo
ZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSA6IChkaXJl
Y3Rpb24gPT0gU2Nyb2xsTGVmdCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgZmxvYXQgc3RlcCA9IDA7CiAgICAgc3dpdGNoIChncmFudWxh
cml0eSkgewogICAgIGNhc2UgU2Nyb2xsQnlMaW5lOiAgICAgc3RlcCA9IG1fbGluZVN0ZXA7ICBi
cmVhazsKQEAgLTE1NCw4ICsxNTEsMTAgQEAgYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZAogICAgIH0KICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVj
dGlvbiA9PSBTY3JvbGxMZWZ0KQogICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xpZW50KCktPnNjcm9sbChtX29yaWVu
dGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKLSAgICByZXR1cm4gc2V0
Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0
YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpKSwgMC4wZikpOwor
ICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBt
dWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6
ZSkpLCAwLjBmKSwgZmFsc2UpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpA
QCAtMjg3LDExICsyODYsMTQgQEAgdm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQog
ICAgIGVsc2UgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgZGVsdGEgPSBtYXgoLXRodW1iUG9zLCBk
ZWx0YSk7CiAgICAgaWYgKGRlbHRhKQotICAgICAgICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0
PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1i
TGVuKSk7CisgICAgICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9z
ICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pLCB0cnVlKTsKIH0K
IAotYm9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKQorYm9vbCBTY3JvbGxi
YXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBib29sIG5vdGlmeVNjcm9sbEFuaW1hdG9yKQog
eworICAgIGlmIChub3RpZnlTY3JvbGxBbmltYXRvciAmJiBjbGllbnQoKSkKKyAgICAgICAgY2xp
ZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBw
b3MpOworCiAgICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMzM2LDcgKzMzOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0
IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKICAgICAg
ICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2dCkpCi0g
ICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAgICBzZXRD
dXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgdHJ1ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgbW92ZVRodW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkp
LngoKSA6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwog
CiAgICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVs
c1BlclN0ZXAgPSAxKTsKLSAgICBib29sIHNldFZhbHVlKGludCk7CisgICAgYm9vbCBzZXRWYWx1
ZShpbnQsIGJvb2wgZnJvbVNjcm9sbEFuaW1hdGlvbik7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9u
KGludCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9z
KGludCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIApAQCAtMTY3LDcgKzE2Nyw3IEBAIHByb3Rl
Y3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CisgICAg
Ym9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgYm9vbCBub3RpZnlTY3JvbGxBbmltYXRvcik7
CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJDbGllbnQuaCIKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQoKQorICAgIDog
bV9zY3JvbGxBbmltYXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKQoreworfQorCitT
Y3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJDbGllbnQoKQoreworfQorCitib29sIFNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sK
KyAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRT
Y3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBtX3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3Np
dGlvbkFuZFN0b3BBbmltYXRpb24ob3JpZW50YXRpb24sIHBvcyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyQ2xpZW50LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDY2MTQxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjEg
KzI2LDI4IEBACiAjaWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNs
aWVudF9oCiAKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CisKIGNsYXNzIFNjcm9sbGJhckNs
aWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CisgICAgU2Nyb2xsYmFy
Q2xpZW50KCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
ID0gMDsKKyAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxp
ZXIpOworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpOwogCisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBv
aW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0g
MDsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0
ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+Jikg
Y29uc3QgeyB9CkBAIC01MiwyMSArNTksMjEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxiYXJS
ZWN0KTsKICAgICB9Ci0gICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXIt
PldpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKICAgICB9Ci0g
ICAgCiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxi
YXJQb2ludCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsYmFyUG9pbnQpOwogICAgIH0KLSAgICAKICAg
ICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3du
UHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJHdGsuY3BwCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3
ICsxODksNyBAQCB2b2lkIFNjcm9sbGJhckd0azo6c2V0RnJhbWVSZWN0KGNvbnN0IEluCiAKIHZv
aWQgU2Nyb2xsYmFyR3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFNjcm9sbGJh
ckd0ayogdGhhdCkKIHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19h
ZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKSk7CisgICAgdGhhdC0+c2V0
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9h
ZGp1c3RtZW50KSksIGZhbHNlKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJHdGs6OnNldEVuYWJsZWQo
Ym9vbCBzaG91bGRFbmFibGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAko
cmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsMTEgKzc2LDExIEBAIGJvb2wgU2Nyb2xsYmFyOjpjb250ZXh0
TWVudShjb25zdCBQbGF0Zm8KICAgICAgICAgY29uc3QgUVBvaW50IHBvcyA9IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvdyhldmVudC5wb3MoKSk7CiAgICAgICAgIG1vdmVUaHVtYihob3Jpem9u
dGFsID8gcG9zLngoKSA6IHBvcy55KCkpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQg
PT0gYWN0U2Nyb2xsVG9wKQotICAgICAgICBzZXRWYWx1ZSgwKTsKKyAgICAgICAgc2Nyb2xsKGhv
cml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOwogICAg
IGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEJvdHRvbSkKLSAgICAgICAgc2V0
VmFsdWUobWF4aW11bSgpKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdo
dCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNl
bGVjdGVkID09IGFjdFBhZ2VVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxM
ZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlKTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwg
PyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CiAgICAgZWxzZSBpZiAoYWN0
aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURvd24pCiAgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKGFj
dGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVwKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2NCw2ICs2NjQsMTcgQEAgdm9pZCBQ
b3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmCiAgICAgICAgIDo6UmVsZWFzZURDKG1f
cG9wdXAsIGxvY2FsREMpOwogfQogCitpbnQgUG9wdXBNZW51V2luOjpzY3JvbGxTaXplKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVu
dGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xs
YmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisK
K3ZvaWQgUG9wdXBNZW51V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9s
bGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgdHJ1ZSk7Cit9CisKIHZvaWQgUG9wdXBNZW51V2lu
Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCiB7CiAgICAgQVNTRVJUKG1fc2Ny
b2xsYmFyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA2
NjE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MSw2ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0
dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KIAog
ICAgIC8vIFNjcm9sbEJhckNsaWVudAorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDE3IEBA
IHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBhaW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xs
aW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworaW50IFJlbmRlckRhdGFHcmlkOjpzY3JvbGxT
aXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVy
biAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikgJiYgbV92QmFyKSA/IChtX3ZC
YXItPnRvdGFsU2l6ZSgpIC0gbV92QmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQg
UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVl
KG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHJp
dmF0ZToKICAgICBIVE1MRGF0YUdyaWRFbGVtZW50KiBncmlkRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxEYXRhR3JpZEVsZW1lbnQqPihub2RlKCkpOyB9CiAKICAgICAv
LyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmly
dHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOSArMTM2Myw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbFRvT2Zmc2V0KGludCB4LAogCiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAg
ICAgICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9m
ZnNldCgpKTsKKyAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBm
YWxzZSk7CiAgICAgICAgIGlmIChtX3ZCYXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVl
KG1fc2Nyb2xsWSk7CisgICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSwgZmFs
c2UpOwogICAgIH0KIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgpAQCAt
MTYxOCw2ICsxNjE4LDIwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9y
bU0KICAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3Jv
bGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1
cnNvciBpbiB2aWV3LgogfQogCitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92
QmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXpl
KCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQor
eworICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwg
dHJ1ZSk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQu
eSgpLCB0cnVlKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBA
IC0yMDY4LDcgKzIwODIsNyBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0CiAgICAgICAgIC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3Jr
aW5nIChzZWUgaG93IHNjcm9sbFhPZmZzZXQoKQogICAgICAgICAvLyBkaWZmZXJzIGZyb20gc2Ny
b2xsWU9mZnNldCgpIHRvIGdldCBhbiBpZGVhIG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBhbmQKICAg
ICAgICAgLy8gdmVydGljYWwgc2Nyb2xsYmFycyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50
bHkpLgotICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAg
IG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBmYWxzZSk7CiAgICAgfQogICAgIGlm
IChtX3ZCYXIpIHsKICAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0
KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDY2MTQxKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUx
OCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7
IAogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgaW50IHNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7
CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29s
IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVuCiAKICAgICBtX2luZGV4T2Zmc2V0
ID0gbmV3T2Zmc2V0OwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUo
bV9pbmRleE9mZnNldCk7CisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwg
ZmFsc2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MjMsNiArNTIzLDE3IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmUKICAgICBlbGVtZW50LT5kaXNwYXRj
aEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIAoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9s
bFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92
QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lk
IFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVl
KG9mZnNldC55KCksIHRydWUpOworfQorCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdl
ZChTY3JvbGxiYXIqKQogewogICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZhbHVlKCk7CkBA
IC01NzgsNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
dwogICAgICAgICByZXR1cm47CiAgICAgbV9pbmRleE9mZnNldCA9IGluZGV4OwogICAgIGlmICht
X3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgpOworICAgICAgICBtX3ZCYXIt
PnNldFZhbHVlKGluZGV4LCBmYWxzZSk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNjYxNDEpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDYgKzk2LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgLy8gU2Ny
b2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwg
dm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjYxNDcp
CisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTAtMDgtMjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9v
dGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAg
ICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGll
bnQgZnVuY3Rpb25zLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNj
cm9sbGJhckltcGw6OnNjcm9sbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
Om9uTW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5
RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmg6IFBsdW1i
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHNyYy93aW4vV2ViSW5w
dXRFdmVudEZhY3RvcnkuY3BwOiBVcGRhdGUgY29tbWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9v
dGggc2Nyb2xsaW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91
c2VXaGVlbEV2ZW50KToKKwogMjAxMC0wOC0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw3ICs5NCw3IEBAIGludCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0CiAKIHZvaWQg
V2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUoaW50IHBvc2l0aW9uKQogewotICAgIG1fc2Nyb2xs
YmFyLT5zZXRWYWx1ZShwb3NpdGlvbik7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0
aW9uLCBmYWxzZSk7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0RG9jdW1lbnRTaXpl
KGludCBzaXplKQpAQCAtMjE4LDcgKzIxOCw3IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25N
b3VzZVdoZWVsKGNvbnMKICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAg
ICAgICAgICAgIGRlbHRhICo9IC0xOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zY3Jv
bGxiYXItPnNldFZhbHVlKG1fc2Nyb2xsYmFyLT52YWx1ZSgpIC0gZGVsdGEpOworICAgICAgICAg
ICAgbV9zY3JvbGxiYXItPnNjcm9sbCgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcikgPyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29yZTo6U2Nyb2xs
VXAsIFdlYkNvcmU6OlNjcm9sbEJ5UGl4ZWwsIGRlbHRhKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKQEAgLTI2Miw2ICsyNjIsMTYgQEAgYm9vbCBXZWJTY3JvbGxiYXJJ
bXBsOjpvbktleURvd24oY29uc3QgVwogICAgIHJldHVybiBmYWxzZTsKIH0KIAoraW50IFdlYlNj
cm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIChvcmllbnRhdGlvbiA9PSBtX3Njcm9sbGJh
ci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxi
YXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQp
Cit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpLCB0cnVl
KTsKK30KKwogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Ny
b2xsYmFyKikKIHsKICAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkKHRoaXMpOwpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHJldmlzaW9uIDY2MTQxKQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCBt
ZXRob2RzCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3Bw
CShyZXZpc2lvbiA2NjE0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZl
bnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMyw5IEBAIFdlYk1vdXNl
V2hlZWxFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeToKICAgICAvLyBzbW9vdGggc2Nyb2xsaW5n
IHdoaWxlIEZpcmVmb3ggZG9lc24ndCwgc28gaXQgY2FuIGdldCBhd2F5IHdpdGggc29tZXdoYXQK
ICAgICAvLyBsYXJnZXIgc2Nyb2xsIHZhbHVlcyB3aXRob3V0IGZlZWxpbmcgYXMgamVya3kuICBI
ZXJlIHdlIHVzZSAxMDAgcHggcGVyCiAgICAgLy8gdGhyZWUgbGluZXMgKHRoZSBkZWZhdWx0IHNj
cm9sbCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgorICAgIC8vIEV2ZW4g
dGhvdWdoIHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZywgd2UgZG9uJ3QgbWFrZSB0aGlzIGFzIGxh
cmdlIGFzIElFCisgICAgLy8gYmVjYXVzZSBzdWJqZWN0aXZlbHkgSUUgZmVlbHMgbGlrZSBpdCBz
Y3JvbGxzIGZhcnRoZXIgdGhhbiB5b3Ugd2FudCB3aGlsZQorICAgIC8vIHJlYWRpbmcgYXJ0aWNs
ZXMuCiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUgPSAxMDAu
MGYgLyAzLjBmOwogICAgIHdoZWVsRGVsdGEgLz0gV0hFRUxfREVMVEE7CiAgICAgZmxvYXQgc2Ny
b2xsRGVsdGEgPSB3aGVlbERlbHRhOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjE0NykKKysrIFdlYktpdC9x
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0yNiAg
UGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3
b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIEFwaS9xd2ViZnJh
bWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1ZSk6CisKIDIwMTAt
MDgtMjYgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZC4gUmV2ZXJ0IHI2NjEwMyBzaW5jZSBRdCB0ZXN0cyBhcmUgZmFpbGluZy4KSW5k
ZXg6IFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDY2MTQxKQorKysgV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjksNyArOTI5LDcgQEAgdm9pZCBRV2ViRnJh
bWU6OnNldFNjcm9sbEJhclZhbHVlKFF0OjpPcgogICAgICAgICAgICAgdmFsdWUgPSAwOwogICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA+IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24pKQogICAg
ICAgICAgICAgdmFsdWUgPSBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKTsKLSAgICAgICAg
c2ItPnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgc2ItPnNldFZhbHVlKHZhbHVlLCBmYWxzZSk7
CiAgICAgfQogfQogCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNjYxNDEpCisrKyBXZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI1ICBQZXRlciBL
YXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFu
ZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogV2ViVmlldy5jcHA6IFBsdW1i
IHNjcm9sbCBjb21tYW5kIHNvdXJjZXMuCisgICAgICAgIChXZWJWaWV3OjprZXlEb3duKToKKwog
MjAxMC0wOC0yNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLiBSZXZlcnQgcjY2MTAzIHNpbmNlIFF0IHRlc3RzIGFyZSBmYWlsaW5n
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66142</attachid>
            <date>2010-08-31 16:55:32 -0700</date>
            <delta_ts>2010-09-07 03:20:55 -0700</delta_ts>
            <desc>patch v5.4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>71131</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2NTU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MzEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0zMSAgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiB3c2NyaXB0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdzY3JpcHQJKHJldmlzaW9uIDY2NTUzKQorKysgd3NjcmlwdAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNiArNjgsOCBAQCBpZiBidWlsZF9wb3J0ID09ICJ3eCI6CiAgICAgICAgIHdlYmNvcmVfc291
cmNlc1snd3gtd2luJ10gPSBbCiAgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAnLAogICAgICAgICAgICAgICAg
J1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNw
cCcsCisgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwJywKKyAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxBbmlt
YXRvcldpbi5oJywKICAgICAgICAgICAgICAgICMgd3hUaW1lciBvbiBXaW5kb3dzIGhhcyBhIGJ1
ZyB0aGF0IGNhdXNlcyBpdCB0byBlYXQgY3Jhc2hlcyBpbiBjYWxsYmFja3MKICAgICAgICAgICAg
ICAgICMgc28gd2UgbmVlZCB0byB1c2UgdGhlIFdpbiBwb3J0J3MgaW1wbGVtZW50YXRpb24gdW50
aWwgdGhlIHd4IGJ1ZyBmaXggaXMKICAgICAgICAgICAgICAgICMgd2lkZWx5IGF2YWlsYWJsZSAo
aXQgd2FzIGZpeGVkIGluIDIuOC4xMCkuCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEwLTA4LTMxICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9s
bEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93
cyBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmlt
YXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwOiBBZGRlZCB0byBhdm9pZCBoYXZpbmcgdG8g
bWFrZSBTY3JvbGxBbmltYXRvci5oIG5vbi1wcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
R3RrLmNwcDoKKyAgICAgICAgKFNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJl
bmNlIHRvIHNldFZhbHVlKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRN
ZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBN
ZW51V2luOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5o
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJh
ckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuCisKIDIwMTAtMDgtMzEgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uLgpJbmRleDogV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiA2NjU1MykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMTksNyArMTIxOSw5IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKICAgICBwbGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIHBsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCiAgICAgcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKICAg
ICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKICAgICBwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAogICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNjY1NTMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTQ3LDYgKzE5NDcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBA
IC0xOTU0LDYgKzE5NTYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgXApAQCAtMjU2Niw2ICsyNTY5LDggQEAgZW5kaWYK
IAogaWYgVEFSR0VUX1dJTjMyCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yV2luLmggXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDY2NTUzKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTMxMjcsNiArMzEyNywxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmgnLApAQCAtMzEzNCw2ICsz
MTM4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxiYXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY2NTUzKQorKysgV2ViQ29y
ZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTU4LDcgKzk1OCw5IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vU2No
ZW1lUmVnaXN0cnkuY3BwIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAogICAg
IHBsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5j
cHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBcCiAgICAgcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5n
LmNwcCBcCkBAIC0xNzkwLDcgKzE3OTIsOSBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9x
dC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmggXAorICAgIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhci5oIFwKKyAgICBw
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKICAgICBwbGF0Zm9ybS9T
ZWFyY2hQb3B1cE1lbnUuaCBcCkBAIC0yMzQ4LDggKzIzNTIsMTIgQEAgbWFlbW81IHsKIH0KIAog
Ci0gICAgd2luMzItKnx3aW5jZSo6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVX
aW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCisgICAgd2luMzItKnx3aW5jZSogewor
ICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAgXAorICAgICAgICAgICAg
ICAgICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1UaW1lV2luLmNwcCBcCisgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAorICAg
IH0KIAogICAgIG1hYyB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA2NjU1MykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNiArMTI3OSw4IEBACiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAogICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcv
U2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1RyYW5zcGFy
ZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjU1MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjY5LDYgKzI0MjY5LDIyIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNDI3Nyw2ICsyNDI5
MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyQ2xpZW50
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2NTUzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MzYsNyArNDgzNiw4
IEBACiAJCUJDOTk4MTJFMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OTgxMkQw
REJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07CiAJCUJDOUFE
RDIzMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIwQ0M0MDMyNjAw
MDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8q
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDdGMENDNDA5MjIwMDA5OEM0QyAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07Ci0JCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzlCQzY0RDBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuY3BwICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRD
MEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1QjQwMDE5Q0E3
NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5oICovOyB9OwogCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMg
LyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBMkIwNjAxMDUwNDc1RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEyNiw2ICs1MTI3LDgg
QEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgx
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2
RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRB
RTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBB
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2
N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87
IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMx
MUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMDY0NCw3ICsxMDY0Nyw4IEBACiAJCUJDOTk4MTJEMERCRTgwN0Ew
MDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01BYnN0cmFjdFZpZXdGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFERDdGMENDNDA5MjIw
MDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xs
YmFyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhckNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQzY0QjBFN0M0ODg5MDA4
Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMkIwNjAxMDUwNDc1
RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVXNlclNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5NjMsNiAr
MTA5NjcsOCBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1h
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENEUwQUZBMTFGN0JDMjcwMDlE
MzgxMSAvKiBmdWxsc2NyZWVuLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gZnVsbHNj
cmVlbi5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjczNSw4
ICsxNjc0MSwxMSBAQAogCQkJCTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29wVGlt
ZXIuaCAqLywKIAkJCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
Y3BwICovLAogCQkJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
ICovLAorCQkJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
Ki8sCisJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8s
CiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAotCQkJCUJD
OUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKKwkJCQlCQzlC
QzY0QjBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKKwkJCQlCQzlC
QzY0QzBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1
NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgw
RTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlC
QzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywK
QEAgLTE5ODI3LDYgKzE5ODM2LDcgQEAKIAkJCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyog
U2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzBFMjBFRDM5RDZGMDBBNjU4
RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyOEMyODQ1MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNBM0JGNjdF
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyMzc1LDcgKzIyMzg1LDkgQEAKIAkJCQk5RjcyMzA1MDExMTg0
QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEy
N0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Ny
b2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTQwMjhBMEU4MzY4MDgwMDMx
OTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1RDkyNUI2NzBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhT1MoV0lORE9XUykK
K1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50KTsKK30KKyNl
bmRpZgorCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKQoreworICAgIGZsb2F0KiBjdXJyZW50UG9zID0gKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpID8gJm1fY3VycmVudFBvc1ggOiAmbV9jdXJyZW50UG9zWTsKKyAgICBmbG9h
dCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlw
bGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlv
bikpKSwgMC4wZik7CisgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpjdXJyZW50UG9zID0gbmV3UG9zOworICAgIG1fY2xpZW50LT5zZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVu
dFBvc1kpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7CisgICAgZWxzZQorICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5p
bWF0b3JfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudDsKKwor
Y2xhc3MgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3JvbGxBbmltYXRv
ciogY3JlYXRlKFNjcm9sbGJhckNsaWVudCopOworCisgICAgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2aXJ0dWFsIH5T
Y3JvbGxBbmltYXRvcigpIHsgfQorCisgICAgLy8gQ29tcHV0ZXMgYSBzY3JvbGwgZGVzdGluYXRp
b24gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGFs
cmVhZHkgYXQgdGhlIGRlc3RpbmF0aW9uLiAgT3RoZXJ3aXNlLCBzdGFydHMgc2Nyb2xsaW5nIHRv
d2FyZHMgdGhlCisgICAgLy8gZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4gIFNjcm9sbGlu
ZyBtYXkgYmUgaW1tZWRpYXRlIG9yIGFuaW1hdGVkLgorICAgIC8vIFRoZSBiYXNlIGNsYXNzIGlt
cGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBhbmltYXRlcy4K
KyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAvLyBTdG9wcyBh
bnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHVwZGF0ZXMgdGhlIFNjcm9s
bEFuaW1hdG9yCisgICAgLy8gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICBUaGlz
IGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJhckNs
aWVudCogbV9jbGllbnQ7CisgICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNp
bmcgYSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQorICAgIGZsb2F0IG1fY3VycmVudFBv
c1k7IC8vIHN1YmNsYXNzIGNvZGUgY29tcGxleGl0eS4KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
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
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvcldpbi5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3JvbGxBbmlt
YXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yV2luKGNsaWVudCk7Cit9CisKK2NvbnN0IGRv
dWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDE7CisKK1Nj
cm9sbEFuaW1hdG9yV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JX
aW4qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJlbnRQb3MoY3VycmVu
dFBvcykKKyAgICAsIG1fZGVzaXJlZFBvcygwKQorICAgICwgbV9jdXJyZW50VmVsb2NpdHkoMCkK
KyAgICAsIG1fZGVzaXJlZFZlbG9jaXR5KDApCisgICAgLCBtX2xhc3RBbmltYXRpb25UaW1lKDAp
CisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHBhcmVudCwgJlNjcm9sbEFuaW1hdG9yV2luOjphbmlt
YXRpb25UaW1lckZpcmVkKQoreworfQorCisKK1Njcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmlt
YXRvcldpbihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKGNs
aWVudCkKKyAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSkKK3sKK30KKworU2Nyb2xsQW5p
bWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbigpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVy
SWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9s
bChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gRG9uJ3Qg
YW5pbWF0ZSBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBkb2N1bWVudC4K
KyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBt
dWx0aXBsaWVyKTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuICBDYWxj
dWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9u
dGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rl
c2lyZWRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGll
bnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS0+bV9k
ZXNpcmVkUG9zID0gbmV3UG9zOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVs
b2NpdHkuCisgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0
YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIC8vIFRoZXJlIGFyZSBhIG51bWJl
ciBvZiBkaWZmZXJlbnQgc291cmNlcyBvZiBzY3JvbGwgcmVxdWVzdHMuICBXZSB3YW50IHRvCisg
ICAgLy8gbWFrZSBib3RoIGtleWJvYXJkIGFuZCB3aGVlbC1nZW5lcmF0ZWQgc2Nyb2xsIHJlcXVl
c3RzICh3aGljaCBjYW4gY29tZSBhdAorICAgIC8vIHVucHJlZGljdGFibGUgcmF0ZXMpIGFuZCBh
dXRvc2Nyb2xsaW5nIGZyb20gaG9sZGluZyBkb3duIHRoZSBtb3VzZSBidXR0b24KKyAgICAvLyBv
biBhIHNjcm9sbGJhciBwYXJ0ICh3aGVyZSB0aGUgcmVxdWVzdCByYXRlIGNhbiBiZSBvYnRhaW5l
ZCBmcm9tIHRoZQorICAgIC8vIHNjcm9sbGJhciB0aGVtZSkgZmVlbCBzbW9vdGgsIHJlc3BvbnNp
dmUsIGFuZCBzaW1pbGFyLgorICAgIC8vCisgICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB0aGUg
c2Nyb2xsYmFyJ3MgYXV0b3Njcm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAgICAvLyBpbmNy
ZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8ICh3aXRoIHxtdWx0aXBsaWVyfCA9
PSAxKSBldmVyeQorICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Ny
b2xsVGltZXJEZWxheSgpIHNlY29uZHMuICBJZiB3ZSBzZXQKKyAgICAvLyB0aGUgZGVzaXJlZCB2
ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsIG5laXRo
ZXIKKyAgICAvLyByYWNlIGFoZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGlu
Y3JlYXNpbmdseSBsYWcgYmVoaW5kLCBidXQKKyAgICAvLyB3aWxsIGJlIHNtb290aCBhbmQgc3lu
Y2hyb25pemVkLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGFjY2Vs
ZXJhdGlvbiBwZXJpb2QsIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluCisgICAgLy8gdGhpcyBjYXNl
IHdvdWxkIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IChz
ZWUKKyAgICAvLyBjb21tZW50cyBvbiBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3QgYW1vdW50
IGlzIGdpdmVuIGJ5CisgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQpCisgICAg
Ly8gV2hlcmUKKyAgICAvLyAgIHYgPSBUaGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LAorICAgIC8v
ICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpCisgICAgLy8gICB0QSA9IGFjY2VsZXJhdGlvblRpbWUoKQorICAgIC8vICAg
dEQgPSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5n
IHRvIHNjcm9sbCwKKyAgICAvLyAgICAgICAgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8K
KyAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21lIGJ1ZmZlciBhZ2FpbnN0IHRpbWVyIGppdHRl
ciBzbyB3ZSdyZSBsZXNzIGxpa2VseQorICAgIC8vIHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlv
biBhbmQgc3RvcCAoYW5kIHRodXMgaGF2ZSB0byByZS1hY2NlbGVyYXRlLAorICAgIC8vIGNhdXNp
bmcgYSB2aXNpYmxlIGhpdGNoKSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4dCBhdXRvc2Nyb2xs
IGluY3JlbWVudC4KKyAgICAvLworICAgIC8vIFRodXMsIGZvciBhdXRvc2Nyb2xsLXRpbWVyLXRy
aWdnZXJlZCByZXF1ZXN0cywgdGhlIGlkZWFsIHN0ZWFkeS1zdGF0ZQorICAgIC8vIGRpc3RhbmNl
IHRvIHRyYXZlbCBpbiBlYWNoIHRpbWUgaW50ZXJ2YWwgaXM6CisgICAgLy8gICBmbG9hdCBhbmlt
YXRpb25TdGVwID0gc3RlcDsKKyAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSdyZSBub3QgYWxyZWFk
eSBhbmltYXRpbmcsIHRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcworICAgIC8vIHRoZSBkaXN0
YW5jZSB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgV2UnbGwgcmV0dXJuIHRvIHRoYXQgaW4gYSBt
b21lbnQuCisgICAgLy8KKyAgICAvLyBGb3Iga2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdl
IGRvbid0IGtub3cgd2hlbiB0aGUgbmV4dCBpbmNyZW1lbnQKKyAgICAvLyB3aWxsIGJlIHJlcXVl
c3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIgYXdh
eQorICAgIC8vIGZyb20gdGhlIHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUsIHRoZW4gZm9yIGtleWJv
YXJkL3doZWVsIGV2ZW50cyB0aGF0IGNvbWUKKyAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Nj
cm9sbCBkZWxheSwgd2UnbGwgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggdGhlCisgICAgLy8gdmVs
b2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2VyJ3MgYWN0
aW9uczsgZm9yCisgICAgLy8gZXZlbnRzIHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9sbCBv
bmUgaW5jcmVtZW50IGFuZCB0aGVuIHBhdXNlIHVudGlsCisgICAgLy8gdGhlIG5leHQgZXZlbnQg
ZmlyZXMuCisgICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9j
dXJyZW50UG9zKTsKKyAgICAvLyBJZiBhIGtleSBpcyBoZWxkIGRvd24gKG9yIHRoZSB3aGVlbCBj
b250aW51YWxseSBzcHVuKSwgdGhlbiBvbmNlIHdlIGhhdmUKKyAgICAvLyByZWFjaGVkIGEgdmVs
b2NpdHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUgbGlrZWx5IHRv
CisgICAgLy8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1l
IHdlJ2QgZXhwZWN0IHRoZSBuZXh0CisgICAgLy8gaW5jcmVtZW50IHRvIG9jY3VyIC0tIGJhZCBi
ZWNhdXNlIGl0IGxlYWRzIHRvIGhpdGNoaW5nIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgIC8vIChp
ZiBhdXRvc2Nyb2xsLWJhc2VkIHJlcXVlc3RzIGRpZG4ndCByZXN1bHQgaW4gYSBzbWFsbCBhbW91
bnQgb2YgY29uc3RhbnQKKyAgICAvLyBsYWcpLiAgU28gaWYgd2UncmUgY2FsbGVkIGFnYWluIHdo
aWxlIGFscmVhZHkgYW5pbWF0aW5nLCB3ZSB3YW50IHRvIHRyaW0KKyAgICAvLyB0aGUgYW5pbWF0
aW9uU3RlcCBzbGlnaHRseSB0byBtYWludGFpbiBsYWcgbGlrZSB3aGF0J3MgZGVzY3JpYmVkIGFi
b3ZlLgorICAgIC8vIChJIHNheSAibWFpbnRhaW4iIHNpbmNlIHdlJ2xsIGFscmVhZHkgYmUgbGFn
Z2VkIGR1ZSB0byB0aGUgYWNjZWxlcmF0aW9uCisgICAgLy8gZHVyaW5nIHRoZSBmaXJzdCBzY3Jv
bGwgcGVyaW9kLikKKyAgICAvLworICAgIC8vIFJlbWVtYmVyIHRoYXQgdHJpbW1pbmcgd29uJ3Qg
Y2F1c2UgdXMgdG8gZmFsbCBzdGVhZGlseSBmdXJ0aGVyIGJlaGluZAorICAgIC8vIGhlcmUsIGJl
Y2F1c2UgdGhlIGZ1cnRoZXIgYmVoaW5kIHdlIGFyZSwgdGhlIGxhcmdlciB0aGUgYmFzZSBzdGVw
IHZhbHVlCisgICAgLy8gYWJvdmUuICBHaXZlbiB0aGUgc2Nyb2xsaW5nIGFsZ29yaXRobSBpbiBh
bmltYXRlU2Nyb2xsKCksIHRoZSBwcmFjdGljYWwKKyAgICAvLyBlZmZlY3Qgd2lsbCBhY3R1YWxs
eSBiZSB0aGF0LCBhc3N1bWluZyBhIGNvbnN0YW50IHRyaW0gZmFjdG9yLCB3ZSdsbCBsYWcKKyAg
ICAvLyBieSBhIGNvbnN0YW50IGFtb3VudCBkZXBlbmRpbmcgb24gdGhlIHJhdGUgYXQgd2hpY2gg
aW5jcmVtZW50cyBvY2N1cgorICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVy
IGRlbGF5LiAgVGhlIGV4YWN0IGxhZyBpcyBnaXZlbiBieQorICAgIC8vICAgbGFnID0gfHN0ZXB8
ICogKChyIC8gaykgLSAxKQorICAgIC8vIFdoZXJlCisgICAgLy8gICByID0gVGhlIHJhdGlvIG9m
IHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAvLyAgICAgICBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSwgdG8gdGhlCisgICAgLy8g
ICAgICAga2V5L3doZWVsIHJlcGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBm
YXN0ZXIpCisgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVs
b3cKKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8gY2hvb3NlIHRoZSB0cmltIGZhY3RvciBzdWNo
IHRoYXQgZm9yIGNhbGxzIHRoYXQgY29tZSBhdCB0aGUKKyAgICAvLyBhdXRvc2Nyb2xsIHRpbWVy
IHJhdGUsIHdlJ2xsIHdpbmQgdXAgd2l0aCB0aGUgc2FtZSBsYWcgYXMgaW4gdGhlCisgICAgLy8g
InBlcmZlY3QiIGNhc2UgZGVzY3JpYmVkIGFib3ZlIChvciwgdG8gcHV0IGl0IGFub3RoZXIgd2F5
LCB3ZSdsbCBlbmQgdXAKKyAgICAvLyB3aXRoIHxhbmltYXRpb25TdGVwfCA9PSB8c3RlcHwgKiB8
bXVsdGlwbGllcnwgZGVzcGl0ZSB0aGUgYWN0dWFsIGRpc3RhbmNlCisgICAgLy8gY2FsY3VsYXRl
ZCBhYm92ZSBiZWluZyBsYXJnZXIgdGhhbiB0aGF0KS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gInBl
cmZlY3QiCisgICAgLy8gYmVoYXZpb3IgZm9yIGF1dG9zY3JvbGxpbmcgd2l0aG91dCBoYXZpbmcg
dG8gc3BlY2lhbC1jYXNlIGl0LgorICAgIGlmIChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBh
bmltYXRpb25TdGVwIC89ICgyLjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkg
KyBhbmltYXRpb25UaW1lckRlbGF5KSkpOworICAgIC8vIFRoZSByZXN1bHQgb2YgYWxsIHRoaXMg
aXMgdGhhdCBzaW5nbGUga2V5cHJlc3NlcyBvciB3aGVlbCBmbGlja3Mgd2lsbAorICAgIC8vIHNj
cm9sbCBpbiB0aGUgc2FtZSB0aW1lIHBlcmlvZCBhcyBzaW5nbGUgcHJlc3NlcyBvZiBzY3JvbGxi
YXIgZWxlbWVudHM7CisgICAgLy8gaG9sZGluZyB0aGUgbW91c2UgZG93biBvbiBhIHNjcm9sbGJh
ciBwYXJ0IHdpbGwgc2Nyb2xsIGFzIGZhc3QgYXMKKyAgICAvLyBwb3NzaWJsZSB3aXRob3V0IGhp
dGNoaW5nOyBhbmQgb3RoZXIgcmVwZWF0ZWQgc2Nyb2xsIGV2ZW50cyB3aWxsIGFsc28KKyAgICAv
LyBzY3JvbGwgd2l0aCB0aGUgc2FtZSB0aW1lIGxhZyBhcyBob2xkaW5nIGRvd24gdGhlIG1vdXNl
IG9uIGEgc2Nyb2xsYmFyCisgICAgLy8gcGFydC4KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0
eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Nj
cm9sbFRpbWVyRGVsYXkoKTsKKworICAgIC8vIElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9sbGlu
Zywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRlU2Ny
b2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2lu
OjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1f
dmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAg
ICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9z
OworICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7Cit9CisKKy8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjph
Y2NlbGVyYXRpb25UaW1lKCkKK3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUg
bGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFy
Z2V0CisgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9k
dWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1l
ciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxE
YXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRp
b25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3Jv
bGwoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5n
IHBlcmYgdmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFs
IHRpbWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAg
dCA9IHQwICsgMC41dEEgLSB0RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhl
IHRpbWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAg
IC8vICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cp
CisgICAgLy8gICB0RCA9IHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZh
bHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEK
KyAgICAvLyAgICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9u
ZSBkdWUgdG8gY2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkg
KH4wIGZvciBzaW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBw
YWdlcykuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxs
LCB0aGUgdG90YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdp
YmxlIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBX
aXRob3V0CisgICAgLy8ga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhh
cmQgdG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0
byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisg
ICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUg
dGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBi
ZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBw
YWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8g
YXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxp
bmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBp
ZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21l
IGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBk
YXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xh
c3RBbmltYXRpb25UaW1lKSA6IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUg
b3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVu
dAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYg
KGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAg
ICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2gg
dGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBk
YXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0
byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBw
b3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50
ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJy
ZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVu
dGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAg
IC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4g
b3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRy
YXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0
aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAg
ICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9j
aXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxv
YXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJh
dGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29u
c3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxp
bmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAg
ICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIg
cG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVy
YXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQg
dGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVs
b2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAg
ICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Ny
b2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBl
bnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0
YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9
IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0
YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2Np
dHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5t
X2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3Vy
IGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0
eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVk
VmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxl
ZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsKKyAg
ICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJlZCBw
b3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAgKmRh
dGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0aW9u
LiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1cGRh
dGUuCisgICAgICAgIGlmICgqZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAg
ICAgICAqZGF0YS0+bV9jdXJyZW50UG9zICs9IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgIGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkpOwor
ICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwor
ICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2lu
dCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJl
bnRQb3MpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1h
dG9yV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbEFuaW1hdG9yV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1Ymxp
YzoKKyAgICBTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvcldpbigpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
UGVyQXhpc0RhdGEgeworICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFy
ZW50LCBmbG9hdCogY3VycmVudFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxv
Y2l0eTsKKyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBt
X2xhc3RBbmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9h
bmltYXRpb25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25U
aW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisg
ICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOwor
ICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2
b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9y
aXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9Cisj
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDY2NTUzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3MywyMCBAQCBJbnRQ
b2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpCiAgICAgcmV0dXJuIEludFBvaW50
KG1heGltdW1PZmZzZXQud2lkdGgoKSwgbWF4aW11bU9mZnNldC5oZWlnaHQoKSk7CiB9CiAKK2lu
dCBTY3JvbGxWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxT
Y3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFNjcm9s
bFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNl
dCkKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIEZyb21TY3JvbGxBbmltYXRvcik7Cisg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFZhbHVlKG9mZnNldC55KCksIEZyb21TY3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQgU2Ny
b2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIC8vIEZp
Z3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgpAQCAtNDQxLDcgKzQ1NSw3IEBAIHZvaWQgU2Ny
b2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsK
ICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAK
QEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0
aW9uKHRydWUpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwot
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwor
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCksIE5v
dEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2Vk
KQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRp
b24oZmFsc2UpOwogICAgIH0KQEAgLTY3Myw3ICs2ODcsMTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3
aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAg
ICAgICAgICAgIGRlbHRhWSA9IC1kZWx0YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnko
SW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZKSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwg
YmFjayBvbiBzY3JvbGxCeSgpIGlmIHRoZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVy
byBkZWx0YT8KKyAgICAgICAgaWYgKGRlbHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAg
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBp
eGVsLCBkZWx0YVkpOworICAgICAgICBpZiAoZGVsdGFZICYmIG1faG9yaXpvbnRhbFNjcm9sbGJh
cikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbExlZnQs
IFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZp
ZXcuaAkocmV2aXNpb24gNjY1NTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsOSBAQCBjbGFzcyBTY3JvbGxWaWV3IDogcHVibGlj
IFdpZGdldCwgcHVibGljCiBwdWJsaWM6CiAgICAgflNjcm9sbFZpZXcoKTsKIAotICAgIC8vIFNj
cm9sbGJhckNsaWVudCBmdW5jdGlvbi4gRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgor
ICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRo
ZSBvdGhlcnMuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopOwogICAgIAogICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhl
IFNjcm9sbFZpZXcuIFRoZSBTY3JvbGxWaWV3IHdpbGwgY29tbXVuaWNhdGUgc2Nyb2xscyBhbmQg
cmVwYWludHMgdG8gdGhlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA2NjU1
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDEyICsxMDEsMTIgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKICAgICBtX3RoZW1lLT51
bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUo
aW50IHYpCitib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUoaW50IHYsIFNjcm9sbFNvdXJjZSBzb3Vy
Y2UpCiB7CiAgICAgdiA9IG1heChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwg
MCk7CiAgICAgaWYgKHZhbHVlKCkgPT0gdikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIg
dmFsdWUgc3RheWVkIHRoZSBzYW1lLgotICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3Vy
cmVudFBvcyh2LCBzb3VyY2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDIsOSArMTQy
LDYgQEAgYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZAogICAgIH0KICNl
bmRpZgogCi0gICAgLy8gSWdub3JlIHBlcnBlbmRpY3VsYXIgc2Nyb2xscy4KLSAgICBpZiAoKG1f
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9s
bFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVm
dCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgZmxvYXQgc3RlcCA9IDA7CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewogICAgIGNhc2Ug
U2Nyb2xsQnlMaW5lOiAgICAgc3RlcCA9IG1fbGluZVN0ZXA7ICBicmVhazsKQEAgLTE1NCw4ICsx
NTEsMTAgQEAgYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZAogICAgIH0K
ICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0
KQogICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7CisgICAgaWYgKGNsaWVudCgpKQor
ICAgICAgICByZXR1cm4gY2xpZW50KCktPnNjcm9sbChtX29yaWVudGF0aW9uLCBncmFudWxhcml0
eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKLSAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWlu
KG1fY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0Piht
X3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpKSwgMC4wZikpOworICAgIHJldHVybiBzZXRDdXJy
ZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkpLCAwLjBmKSwgTm90RnJv
bVNjcm9sbEFuaW1hdG9yKTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6OnVwZGF0ZVRodW1iKCkKQEAg
LTI4NywxMSArMjg2LDE0IEBAIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcykKICAg
ICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAgICAgIGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVs
dGEpOwogICAgIGlmIChkZWx0YSkKLSAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxm
bG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxl
bikpOworICAgICAgICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyAr
IGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSwgTm90RnJvbVNjcm9s
bEFuaW1hdG9yKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9z
KQorYm9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBTY3JvbGxTb3VyY2Ug
c291cmNlKQogeworICAgIGlmICgoc291cmNlICE9IEZyb21TY3JvbGxBbmltYXRvcikgJiYgY2xp
ZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24obV9vcmllbnRhdGlvbiwgcG9zKTsKKwogICAgIGlmIChwb3MgPT0gbV9jdXJyZW50UG9zKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMzNiw3ICszMzgsNyBAQCBib29sIFNjcm9sbGJh
cjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9yCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0g
VGh1bWJQYXJ0KSB7CiAgICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFja1RvRHJhZ09y
aWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmlnaW4p
OworICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmlnaW4sIE5vdEZyb21TY3JvbGxB
bmltYXRvcik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZVRodW1iKG1fb3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkpLngoKSA6CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgJKHJldmlzaW9uIDY2NTUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgY2xhc3MgUGxhdGZvcm1Nb3VzZUV2
ZW50OwogCiBjbGFzcyBTY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0IHsKIHB1YmxpYzoKKyAgICBl
bnVtIFNjcm9sbFNvdXJjZSB7CisgICAgICAgIEZyb21TY3JvbGxBbmltYXRvciwKKyAgICAgICAg
Tm90RnJvbVNjcm9sbEFuaW1hdG9yLAorICAgIH07CisKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXIo
KTsKIAogICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qg
c2ltcGx5IHVzZSB0aGUgU2Nyb2xsYmFyIGJhc2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkg
cGxhdGZvcm0gdGhhdCBpcyBub3QgdXNpbmcgdGhlIGJhc2UgY2xhc3MgaXMgR1RLLgpAQCAtNzUs
NyArODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9s
bGJhclBhcnQpOwogCiAgICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3Rl
cCwgaW50IHBpeGVsc1BlclN0ZXAgPSAxKTsKLSAgICBib29sIHNldFZhbHVlKGludCk7CisgICAg
Ym9vbCBzZXRWYWx1ZShpbnQsIFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogICAgIHZvaWQgc2V0UHJv
cG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0UHJl
c3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKQEAgLTE2Nyw3ICsxNzIsNyBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGJhcigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGJvb2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3Mp
OworICAgIGJvb2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2Up
OwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyQ2xpZW50LmgiCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhckNsaWVudDo6U2Nyb2xsYmFyQ2xpZW50KCkKKyAgICA6
IG1fc2Nyb2xsQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSh0aGlzKSkKK3sKK30KKwor
U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KCkKK3sKK30KKworYm9vbCBTY3JvbGxi
YXJDbGllbnQ6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7
CisgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3ItPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVs
YXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworfQorCit2b2lkIFNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9z
aXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA2NjU1MykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIx
ICsyNiwyOCBAQAogI2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJD
bGllbnRfaAogCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNjcm9sbEFuaW1hdG9yOworCiBjbGFzcyBTY3JvbGxiYXJD
bGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIFNjcm9sbGJh
ckNsaWVudCgpOworICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpOwogCi0gICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KSA9IDA7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKTsKIAorICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCA9
IDA7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25z
dCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYp
IGNvbnN0IHsgfQpAQCAtNTIsMjEgKzU5LDIxIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsYmFy
UmVjdCk7CiAgICAgfQotICAgIAogICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc2Nyb2xsYmFy
LT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CiAgICAgfQot
ICAgIAogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xs
YmFyUG9pbnQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6
OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGJhclBvaW50KTsKICAgICB9Ci0gICAgCiAg
ICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydEZy
b21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAgICAgfQorCitwcml2YXRlOgorICAgIE93
blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIH07CiAKIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAkocmV2aXNpb24gNjY1NTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
NyArMTg5LDcgQEAgdm9pZCBTY3JvbGxiYXJHdGs6OnNldEZyYW1lUmVjdChjb25zdCBJbgogCiB2
b2lkIFNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBTY3JvbGxi
YXJHdGsqIHRoYXQpCiB7Ci0gICAgdGhhdC0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihndGtf
YWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSkpOworICAgIHRoYXQtPnNl
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1f
YWRqdXN0bWVudCkpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogfQogCiB2b2lkIFNjcm9sbGJh
ckd0azo6c2V0RW5hYmxlZChib29sIHNob3VsZEVuYWJsZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA2NjU1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMSArNzYsMTEgQEAgYm9vbCBT
Y3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBsYXRmbwogICAgICAgICBjb25zdCBRUG9pbnQg
cG9zID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2ZW50LnBvcygpKTsKICAgICAgICAg
bW92ZVRodW1iKGhvcml6b250YWwgPyBwb3MueCgpIDogcG9zLnkoKSk7CiAgICAgfSBlbHNlIGlm
IChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxUb3ApCi0gICAgICAgIHNldFZhbHVlKDApOwor
ICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xs
QnlEb2N1bWVudCk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsQm90
dG9tKQotICAgICAgICBzZXRWYWx1ZShtYXhpbXVtKCkpOworICAgICAgICBzY3JvbGwoaG9yaXpv
bnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CiAgICAg
ZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZVVwKQotICAgICAgICBzY3JvbGwoaG9y
aXpvbnRhbCA/IFNjcm9sbExlZnQ6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBz
Y3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlKTsK
ICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlRG93bikKICAgICAgICAgc2Ny
b2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7
CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVXApCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDY2NTUzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY0LDYg
KzY2NCwxNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYKICAgICAg
ICAgOjpSZWxlYXNlREMobV9wb3B1cCwgbG9jYWxEQyk7CiB9CiAKK2ludCBQb3B1cE1lbnVXaW46
OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxsU2Nyb2xsYmFyKSAmJiBtX3Njcm9s
bGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKK30KKwordm9pZCBQb3B1cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9zY3JvbGxiYXIp
CisgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCBGcm9tU2Nyb2xsQW5p
bWF0b3IpOworfQorCiB2b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciog
c2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uaAkocmV2aXNpb24gNjY1NTMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0U2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoYm9vbCBiKSB7IG1fc2Ny
b2xsYmFyQ2FwdHVyaW5nTW91c2UgPSBiOyB9CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCShyZXZp
c2lvbiA2NjU1MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCwxNyBAQCB2b2lkIFJlbmRlckRhdGFHcmlkOjpwYWlu
dENvbHVtbkhlYWRlcihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlv
bnMKK2ludCBSZW5kZXJEYXRhR3JpZDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bGxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+
dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckRhdGFHcmlkOjpzZXRTY3JvbGxP
ZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1f
dkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCBGcm9tU2Nyb2xsQW5p
bWF0b3IpOworfQorCiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
KikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGF0YUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
YXRhR3JpZC5oCShyZXZpc2lvbiA2NjU1MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRh
dGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0ZToKICAgICBI
VE1MRGF0YUdyaWRFbGVtZW50KiBncmlkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxEYXRhR3JpZEVsZW1lbnQqPihub2RlKCkpOyB9CiAKICAgICAvLyBTY3JvbGxiYXJD
bGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gNjY1NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNjMsOSArMTM2Myw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zm
c2V0KGludCB4LAogCiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAgICAgICAgaWYgKG1f
aEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAg
ICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IpOwogICAgICAgICBpZiAobV92QmFyKQotICAgICAgICAgICAgbV92QmFyLT5zZXRW
YWx1ZShtX3Njcm9sbFkpOworICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFks
IE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgfQogCiAgICAgLy8gU2NoZWR1bGUgdGhlIHNj
cm9sbCBET00gZXZlbnQuCkBAIC0xNjE4LDYgKzE2MTgsMjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ug
c2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRo
ZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKK2ludCBSZW5kZXJMYXllcjo6
c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAg
ICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikgPyBtX2hCYXIgOiBtX3ZCYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAo
c2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwor
fQorCit2b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5z
ZXRWYWx1ZShvZmZzZXQueCgpLCBGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIGlmIChtX3ZCYXIp
CisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgRnJvbVNjcm9sbEFuaW1hdG9y
KTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAg
ICAgLy8gVXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJhcnMuCkBAIC0yMDY4LDcg
KzIwODIsNyBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAg
ICAgIC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nIChzZWUg
aG93IHNjcm9sbFhPZmZzZXQoKQogICAgICAgICAvLyBkaWZmZXJzIGZyb20gc2Nyb2xsWU9mZnNl
dCgpIHRvIGdldCBhbiBpZGVhIG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBhbmQKICAgICAgICAgLy8g
dmVydGljYWwgc2Nyb2xsYmFycyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkpLgotICAg
ICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgIG1faEJhci0+
c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgIH0K
ICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBib3gtPmNsaWVu
dEhlaWdodCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA2NjU1MykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
OCw2ICs1MTgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgp
IGNvbnN0OyAKIAogICAgIC8vIFNjcm9sbEJhckNsaWVudCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA2NjU1MykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcg
QEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbgogCiAgICAgbV9pbmRl
eE9mZnNldCA9IG5ld09mZnNldDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNl
dFZhbHVlKG1faW5kZXhPZmZzZXQpOworICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhP
ZmZzZXQsIE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTUyMyw2ICs1MjMsMTcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWdu
ZQogICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCitp
bnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9s
bGJhcikgJiYgbV92QmFyKSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgpIC0gbV92QmFyLT52aXNpYmxl
U2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3ZCYXIpCisg
ICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgRnJvbVNjcm9sbEFuaW1hdG9yKTsK
K30KKwogdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAg
ICBpbnQgbmV3T2Zmc2V0ID0gbV92QmFyLT52YWx1ZSgpOwpAQCAtNTc4LDcgKzU4OSw3IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwog
ICAgIG1faW5kZXhPZmZzZXQgPSBpbmRleDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZC
YXItPnNldFZhbHVlKGluZGV4KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgTm90
RnJvbVNjcm9sbEFuaW1hdG9yKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA2NjU1MykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiAr
OTYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICAvLyBTY3JvbGxi
YXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU1NSkKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBA
QAorMjAxMC0wOC0zMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBz
Y3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAg
ICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuICBBbGxvdyB3aGVlbCBzY3JvbGxzIHRvIGJlIGFuaW1hdGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xs
YmFySW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25N
b3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3du
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbik6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDogUGx1bWIgbmV3
IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogc3JjL3dpbi9XZWJJbnB1dEV2
ZW50RmFjdG9yeS5jcHA6IFVwZGF0ZSBjb21tZW50cyBub3cgdGhhdCB3ZSBoYXZlIHNtb290aCBz
Y3JvbGxpbmcuCisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZlbnRGYWN0b3J5Ojptb3VzZVdo
ZWVsRXZlbnQpOgorCiAyMDEwLTA4LTI0ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCShyZXZpc2lvbiA2NjU1MykKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0
LDcgKzk0LDcgQEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKIAogdm9pZCBX
ZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCiB7Ci0gICAgbV9zY3JvbGxi
YXItPnNldFZhbHVlKHBvc2l0aW9uKTsKKyAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRp
b24sIE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6
c2V0RG9jdW1lbnRTaXplKGludCBzaXplKQpAQCAtMjE4LDcgKzIxOCw3IEBAIGJvb2wgV2ViU2Ny
b2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnMKICAgICAgICAgICAgICAgICBpZiAobmVnYXRp
dmUpCiAgICAgICAgICAgICAgICAgICAgIGRlbHRhICo9IC0xOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG1fc2Nyb2xsYmFyLT52YWx1ZSgpIC0gZGVs
dGEpOworICAgICAgICAgICAgbV9zY3JvbGxiYXItPnNjcm9sbCgobV9zY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDog
V2ViQ29yZTo6U2Nyb2xsVXAsIFdlYkNvcmU6OlNjcm9sbEJ5UGl4ZWwsIGRlbHRhKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTI2Miw2ICsyNjIsMTYgQEAgYm9v
bCBXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24oY29uc3QgVwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAoraW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIChvcmllbnRhdGlv
biA9PSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6
ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBXZWJTY3Jv
bGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKChtX3Njcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG9mZnNldC54KCkgOiBv
ZmZzZXQueSgpLCBGcm9tU2Nyb2xsQW5pbWF0b3IpOworfQorCiB2b2lkIFdlYlNjcm9sbGJhcklt
cGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQogewogICAgIG1fY2xpZW50LT52
YWx1ZUNoYW5nZWQodGhpcyk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJh
ckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhcklt
cGwuaAkocmV2aXNpb24gNjY1NTMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJh
ckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAg
Ly8gV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIGludCBzY3Jv
bGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6
U2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdl
YkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dl
YklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDY2NTUzKQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDMsNiArNDAzLDkgQEAgV2ViTW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0
b3J5OgogICAgIC8vIHNtb290aCBzY3JvbGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0LCBzbyBp
dCBjYW4gZ2V0IGF3YXkgd2l0aCBzb21ld2hhdAogICAgIC8vIGxhcmdlciBzY3JvbGwgdmFsdWVz
IHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4gIEhlcmUgd2UgdXNlIDEwMCBweCBwZXIKICAgICAv
LyB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5lcyBw
ZXIgd2hlZWwgdGljaykuCisgICAgLy8gRXZlbiB0aG91Z2ggd2UgaGF2ZSBzbW9vdGggc2Nyb2xs
aW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMgbGFyZ2UgYXMgSUUKKyAgICAvLyBiZWNhdXNlIHN1
YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0IHNjcm9sbHMgZmFydGhlciB0aGFuIHlvdSB3YW50
IHdoaWxlCisgICAgLy8gcmVhZGluZyBhcnRpY2xlcy4KICAgICBzdGF0aWMgY29uc3QgZmxvYXQg
c2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEwMC4wZiAvIDMuMGY7CiAgICAgd2hlZWxEZWx0YSAv
PSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBzY3JvbGxEZWx0YSA9IHdoZWVsRGVsdGE7CkluZGV4
OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2NTU1KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTMxICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MjM1NgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6
OnNldFNjcm9sbEJhclZhbHVlKToKKwogMjAxMC0wOC0zMSAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNpb24gNjY1NTMp
CisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyOSw3
ICs5MjksNyBAQCB2b2lkIFFXZWJGcmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUoUXQ6Ok9yCiAgICAg
ICAgICAgICB2YWx1ZSA9IDA7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc2Nyb2xsQmFyTWF4
aW11bShvcmllbnRhdGlvbikpCiAgICAgICAgICAgICB2YWx1ZSA9IHNjcm9sbEJhck1heGltdW0o
b3JpZW50YXRpb24pOwotICAgICAgICBzYi0+c2V0VmFsdWUodmFsdWUpOworICAgICAgICBzYi0+
c2V0VmFsdWUodmFsdWUsIE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66148</attachid>
            <date>2010-08-31 17:34:17 -0700</date>
            <delta_ts>2010-08-31 17:47:47 -0700</delta_ts>
            <desc>patch v5.5</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>71285</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2NTU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MzEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0zMSAgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiB3c2NyaXB0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdzY3JpcHQJKHJldmlzaW9uIDY2NTU1KQorKysgd3NjcmlwdAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNiArNjgsOCBAQCBpZiBidWlsZF9wb3J0ID09ICJ3eCI6CiAgICAgICAgIHdlYmNvcmVfc291
cmNlc1snd3gtd2luJ10gPSBbCiAgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAnLAogICAgICAgICAgICAgICAg
J1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNw
cCcsCisgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwJywKKyAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxBbmlt
YXRvcldpbi5oJywKICAgICAgICAgICAgICAgICMgd3hUaW1lciBvbiBXaW5kb3dzIGhhcyBhIGJ1
ZyB0aGF0IGNhdXNlcyBpdCB0byBlYXQgY3Jhc2hlcyBpbiBjYWxsYmFja3MKICAgICAgICAgICAg
ICAgICMgc28gd2UgbmVlZCB0byB1c2UgdGhlIFdpbiBwb3J0J3MgaW1wbGVtZW50YXRpb24gdW50
aWwgdGhlIHd4IGJ1ZyBmaXggaXMKICAgICAgICAgICAgICAgICMgd2lkZWx5IGF2YWlsYWJsZSAo
aXQgd2FzIGZpeGVkIGluIDIuOC4xMCkuCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEwLTA4LTMxICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9s
bEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93
cyBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmlt
YXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwOiBBZGRlZCB0byBhdm9pZCBoYXZpbmcgdG8g
bWFrZSBTY3JvbGxBbmltYXRvci5oIG5vbi1wcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
R3RrLmNwcDoKKyAgICAgICAgKFNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJl
bmNlIHRvIHNldFZhbHVlKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRN
ZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBN
ZW51V2luOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5o
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJh
ckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuCisKIDIwMTAtMDgtMzEgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uLgpJbmRleDogV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMTksNyArMTIxOSw5IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKICAgICBwbGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIHBsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCiAgICAgcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKICAg
ICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKICAgICBwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAogICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTQ3LDYgKzE5NDcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBA
IC0xOTU0LDYgKzE5NTYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgXApAQCAtMjU2Niw2ICsyNTY5LDggQEAgZW5kaWYK
IAogaWYgVEFSR0VUX1dJTjMyCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yV2luLmggXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTMxMjcsNiArMzEyNywxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmgnLApAQCAtMzEzNCw2ICsz
MTM4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxiYXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTU4LDcgKzk1OCw5IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vU2No
ZW1lUmVnaXN0cnkuY3BwIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAogICAg
IHBsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5j
cHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBcCiAgICAgcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5n
LmNwcCBcCkBAIC0xNzkwLDcgKzE3OTIsOSBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9x
dC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmggXAorICAgIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhci5oIFwKKyAgICBw
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKICAgICBwbGF0Zm9ybS9T
ZWFyY2hQb3B1cE1lbnUuaCBcCkBAIC0yMzQ4LDggKzIzNTIsMTIgQEAgbWFlbW81IHsKIH0KIAog
Ci0gICAgd2luMzItKnx3aW5jZSo6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVX
aW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCisgICAgd2luMzItKnx3aW5jZSogewor
ICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAgXAorICAgICAgICAgICAg
ICAgICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1UaW1lV2luLmNwcCBcCisgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAorICAg
IH0KIAogICAgIG1hYyB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNiArMTI3OSw4IEBACiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAogICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcv
U2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1RyYW5zcGFy
ZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjY5LDYgKzI0MjY5LDIyIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNDI3Nyw2ICsyNDI5
MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyQ2xpZW50
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MzYsNyArNDgzNiw4
IEBACiAJCUJDOTk4MTJFMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OTgxMkQw
REJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07CiAJCUJDOUFE
RDIzMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIwQ0M0MDMyNjAw
MDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8q
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDdGMENDNDA5MjIwMDA5OEM0QyAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07Ci0JCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzlCQzY0RDBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuY3BwICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRD
MEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1QjQwMDE5Q0E3
NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5oICovOyB9OwogCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMg
LyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBMkIwNjAxMDUwNDc1RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEyNiw2ICs1MTI3LDgg
QEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgx
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2
RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRB
RTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBB
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2
N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87
IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMx
MUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMDY0NCw3ICsxMDY0Nyw4IEBACiAJCUJDOTk4MTJEMERCRTgwN0Ew
MDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01BYnN0cmFjdFZpZXdGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFERDdGMENDNDA5MjIw
MDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xs
YmFyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhckNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQzY0QjBFN0M0ODg5MDA4
Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMkIwNjAxMDUwNDc1
RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVXNlclNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5NjMsNiAr
MTA5NjcsOCBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1h
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENEUwQUZBMTFGN0JDMjcwMDlE
MzgxMSAvKiBmdWxsc2NyZWVuLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gZnVsbHNj
cmVlbi5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjczNSw4
ICsxNjc0MSwxMSBAQAogCQkJCTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29wVGlt
ZXIuaCAqLywKIAkJCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
Y3BwICovLAogCQkJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
ICovLAorCQkJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
Ki8sCisJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8s
CiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAotCQkJCUJD
OUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKKwkJCQlCQzlC
QzY0QjBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKKwkJCQlCQzlC
QzY0QzBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1
NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgw
RTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlC
QzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywK
QEAgLTE5ODI3LDYgKzE5ODM2LDcgQEAKIAkJCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyog
U2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzBFMjBFRDM5RDZGMDBBNjU4
RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyOEMyODQ1MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNBM0JGNjdF
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyMzc1LDcgKzIyMzg1LDkgQEAKIAkJCQk5RjcyMzA1MDExMTg0
QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEy
N0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Ny
b2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTQwMjhBMEU4MzY4MDgwMDMx
OTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1RDkyNUI2NzBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhT1MoV0lORE9XUykK
K1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50KTsKK30KKyNl
bmRpZgorCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKQoreworICAgIGZsb2F0KiBjdXJyZW50UG9zID0gKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpID8gJm1fY3VycmVudFBvc1ggOiAmbV9jdXJyZW50UG9zWTsKKyAgICBmbG9h
dCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlw
bGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlv
bikpKSwgMC4wZik7CisgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpjdXJyZW50UG9zID0gbmV3UG9zOworICAgIG1fY2xpZW50LT5zZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVu
dFBvc1kpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7CisgICAgZWxzZQorICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5p
bWF0b3JfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudDsKKwor
Y2xhc3MgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3JvbGxBbmltYXRv
ciogY3JlYXRlKFNjcm9sbGJhckNsaWVudCopOworCisgICAgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2aXJ0dWFsIH5T
Y3JvbGxBbmltYXRvcigpIHsgfQorCisgICAgLy8gQ29tcHV0ZXMgYSBzY3JvbGwgZGVzdGluYXRp
b24gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGFs
cmVhZHkgYXQgdGhlIGRlc3RpbmF0aW9uLiAgT3RoZXJ3aXNlLCBzdGFydHMgc2Nyb2xsaW5nIHRv
d2FyZHMgdGhlCisgICAgLy8gZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4gIFNjcm9sbGlu
ZyBtYXkgYmUgaW1tZWRpYXRlIG9yIGFuaW1hdGVkLgorICAgIC8vIFRoZSBiYXNlIGNsYXNzIGlt
cGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBhbmltYXRlcy4K
KyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAvLyBTdG9wcyBh
bnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHVwZGF0ZXMgdGhlIFNjcm9s
bEFuaW1hdG9yCisgICAgLy8gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICBUaGlz
IGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJhckNs
aWVudCogbV9jbGllbnQ7CisgICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNp
bmcgYSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQorICAgIGZsb2F0IG1fY3VycmVudFBv
c1k7IC8vIHN1YmNsYXNzIGNvZGUgY29tcGxleGl0eS4KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
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
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvcldpbi5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3JvbGxBbmlt
YXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yV2luKGNsaWVudCk7Cit9CisKK2NvbnN0IGRv
dWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDE7CisKK1Nj
cm9sbEFuaW1hdG9yV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JX
aW4qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJlbnRQb3MoY3VycmVu
dFBvcykKKyAgICAsIG1fZGVzaXJlZFBvcygwKQorICAgICwgbV9jdXJyZW50VmVsb2NpdHkoMCkK
KyAgICAsIG1fZGVzaXJlZFZlbG9jaXR5KDApCisgICAgLCBtX2xhc3RBbmltYXRpb25UaW1lKDAp
CisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHBhcmVudCwgJlNjcm9sbEFuaW1hdG9yV2luOjphbmlt
YXRpb25UaW1lckZpcmVkKQoreworfQorCisKK1Njcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmlt
YXRvcldpbihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKGNs
aWVudCkKKyAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSkKK3sKK30KKworU2Nyb2xsQW5p
bWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbigpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVy
SWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9s
bChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gRG9uJ3Qg
YW5pbWF0ZSBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBkb2N1bWVudC4K
KyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBt
dWx0aXBsaWVyKTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuICBDYWxj
dWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9u
dGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rl
c2lyZWRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGll
bnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS0+bV9k
ZXNpcmVkUG9zID0gbmV3UG9zOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVs
b2NpdHkuCisgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0
YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIC8vIFRoZXJlIGFyZSBhIG51bWJl
ciBvZiBkaWZmZXJlbnQgc291cmNlcyBvZiBzY3JvbGwgcmVxdWVzdHMuICBXZSB3YW50IHRvCisg
ICAgLy8gbWFrZSBib3RoIGtleWJvYXJkIGFuZCB3aGVlbC1nZW5lcmF0ZWQgc2Nyb2xsIHJlcXVl
c3RzICh3aGljaCBjYW4gY29tZSBhdAorICAgIC8vIHVucHJlZGljdGFibGUgcmF0ZXMpIGFuZCBh
dXRvc2Nyb2xsaW5nIGZyb20gaG9sZGluZyBkb3duIHRoZSBtb3VzZSBidXR0b24KKyAgICAvLyBv
biBhIHNjcm9sbGJhciBwYXJ0ICh3aGVyZSB0aGUgcmVxdWVzdCByYXRlIGNhbiBiZSBvYnRhaW5l
ZCBmcm9tIHRoZQorICAgIC8vIHNjcm9sbGJhciB0aGVtZSkgZmVlbCBzbW9vdGgsIHJlc3BvbnNp
dmUsIGFuZCBzaW1pbGFyLgorICAgIC8vCisgICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB0aGUg
c2Nyb2xsYmFyJ3MgYXV0b3Njcm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAgICAvLyBpbmNy
ZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8ICh3aXRoIHxtdWx0aXBsaWVyfCA9
PSAxKSBldmVyeQorICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Ny
b2xsVGltZXJEZWxheSgpIHNlY29uZHMuICBJZiB3ZSBzZXQKKyAgICAvLyB0aGUgZGVzaXJlZCB2
ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsIG5laXRo
ZXIKKyAgICAvLyByYWNlIGFoZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGlu
Y3JlYXNpbmdseSBsYWcgYmVoaW5kLCBidXQKKyAgICAvLyB3aWxsIGJlIHNtb290aCBhbmQgc3lu
Y2hyb25pemVkLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGFjY2Vs
ZXJhdGlvbiBwZXJpb2QsIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluCisgICAgLy8gdGhpcyBjYXNl
IHdvdWxkIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IChz
ZWUKKyAgICAvLyBjb21tZW50cyBvbiBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3QgYW1vdW50
IGlzIGdpdmVuIGJ5CisgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQpCisgICAg
Ly8gV2hlcmUKKyAgICAvLyAgIHYgPSBUaGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LAorICAgIC8v
ICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpCisgICAgLy8gICB0QSA9IGFjY2VsZXJhdGlvblRpbWUoKQorICAgIC8vICAg
dEQgPSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5n
IHRvIHNjcm9sbCwKKyAgICAvLyAgICAgICAgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8K
KyAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21lIGJ1ZmZlciBhZ2FpbnN0IHRpbWVyIGppdHRl
ciBzbyB3ZSdyZSBsZXNzIGxpa2VseQorICAgIC8vIHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlv
biBhbmQgc3RvcCAoYW5kIHRodXMgaGF2ZSB0byByZS1hY2NlbGVyYXRlLAorICAgIC8vIGNhdXNp
bmcgYSB2aXNpYmxlIGhpdGNoKSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4dCBhdXRvc2Nyb2xs
IGluY3JlbWVudC4KKyAgICAvLworICAgIC8vIFRodXMsIGZvciBhdXRvc2Nyb2xsLXRpbWVyLXRy
aWdnZXJlZCByZXF1ZXN0cywgdGhlIGlkZWFsIHN0ZWFkeS1zdGF0ZQorICAgIC8vIGRpc3RhbmNl
IHRvIHRyYXZlbCBpbiBlYWNoIHRpbWUgaW50ZXJ2YWwgaXM6CisgICAgLy8gICBmbG9hdCBhbmlt
YXRpb25TdGVwID0gc3RlcDsKKyAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSdyZSBub3QgYWxyZWFk
eSBhbmltYXRpbmcsIHRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcworICAgIC8vIHRoZSBkaXN0
YW5jZSB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgV2UnbGwgcmV0dXJuIHRvIHRoYXQgaW4gYSBt
b21lbnQuCisgICAgLy8KKyAgICAvLyBGb3Iga2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdl
IGRvbid0IGtub3cgd2hlbiB0aGUgbmV4dCBpbmNyZW1lbnQKKyAgICAvLyB3aWxsIGJlIHJlcXVl
c3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIgYXdh
eQorICAgIC8vIGZyb20gdGhlIHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUsIHRoZW4gZm9yIGtleWJv
YXJkL3doZWVsIGV2ZW50cyB0aGF0IGNvbWUKKyAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Nj
cm9sbCBkZWxheSwgd2UnbGwgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggdGhlCisgICAgLy8gdmVs
b2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2VyJ3MgYWN0
aW9uczsgZm9yCisgICAgLy8gZXZlbnRzIHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9sbCBv
bmUgaW5jcmVtZW50IGFuZCB0aGVuIHBhdXNlIHVudGlsCisgICAgLy8gdGhlIG5leHQgZXZlbnQg
ZmlyZXMuCisgICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9j
dXJyZW50UG9zKTsKKyAgICAvLyBJZiBhIGtleSBpcyBoZWxkIGRvd24gKG9yIHRoZSB3aGVlbCBj
b250aW51YWxseSBzcHVuKSwgdGhlbiBvbmNlIHdlIGhhdmUKKyAgICAvLyByZWFjaGVkIGEgdmVs
b2NpdHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUgbGlrZWx5IHRv
CisgICAgLy8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1l
IHdlJ2QgZXhwZWN0IHRoZSBuZXh0CisgICAgLy8gaW5jcmVtZW50IHRvIG9jY3VyIC0tIGJhZCBi
ZWNhdXNlIGl0IGxlYWRzIHRvIGhpdGNoaW5nIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgIC8vIChp
ZiBhdXRvc2Nyb2xsLWJhc2VkIHJlcXVlc3RzIGRpZG4ndCByZXN1bHQgaW4gYSBzbWFsbCBhbW91
bnQgb2YgY29uc3RhbnQKKyAgICAvLyBsYWcpLiAgU28gaWYgd2UncmUgY2FsbGVkIGFnYWluIHdo
aWxlIGFscmVhZHkgYW5pbWF0aW5nLCB3ZSB3YW50IHRvIHRyaW0KKyAgICAvLyB0aGUgYW5pbWF0
aW9uU3RlcCBzbGlnaHRseSB0byBtYWludGFpbiBsYWcgbGlrZSB3aGF0J3MgZGVzY3JpYmVkIGFi
b3ZlLgorICAgIC8vIChJIHNheSAibWFpbnRhaW4iIHNpbmNlIHdlJ2xsIGFscmVhZHkgYmUgbGFn
Z2VkIGR1ZSB0byB0aGUgYWNjZWxlcmF0aW9uCisgICAgLy8gZHVyaW5nIHRoZSBmaXJzdCBzY3Jv
bGwgcGVyaW9kLikKKyAgICAvLworICAgIC8vIFJlbWVtYmVyIHRoYXQgdHJpbW1pbmcgd29uJ3Qg
Y2F1c2UgdXMgdG8gZmFsbCBzdGVhZGlseSBmdXJ0aGVyIGJlaGluZAorICAgIC8vIGhlcmUsIGJl
Y2F1c2UgdGhlIGZ1cnRoZXIgYmVoaW5kIHdlIGFyZSwgdGhlIGxhcmdlciB0aGUgYmFzZSBzdGVw
IHZhbHVlCisgICAgLy8gYWJvdmUuICBHaXZlbiB0aGUgc2Nyb2xsaW5nIGFsZ29yaXRobSBpbiBh
bmltYXRlU2Nyb2xsKCksIHRoZSBwcmFjdGljYWwKKyAgICAvLyBlZmZlY3Qgd2lsbCBhY3R1YWxs
eSBiZSB0aGF0LCBhc3N1bWluZyBhIGNvbnN0YW50IHRyaW0gZmFjdG9yLCB3ZSdsbCBsYWcKKyAg
ICAvLyBieSBhIGNvbnN0YW50IGFtb3VudCBkZXBlbmRpbmcgb24gdGhlIHJhdGUgYXQgd2hpY2gg
aW5jcmVtZW50cyBvY2N1cgorICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVy
IGRlbGF5LiAgVGhlIGV4YWN0IGxhZyBpcyBnaXZlbiBieQorICAgIC8vICAgbGFnID0gfHN0ZXB8
ICogKChyIC8gaykgLSAxKQorICAgIC8vIFdoZXJlCisgICAgLy8gICByID0gVGhlIHJhdGlvIG9m
IHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAvLyAgICAgICBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSwgdG8gdGhlCisgICAgLy8g
ICAgICAga2V5L3doZWVsIHJlcGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBm
YXN0ZXIpCisgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVs
b3cKKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8gY2hvb3NlIHRoZSB0cmltIGZhY3RvciBzdWNo
IHRoYXQgZm9yIGNhbGxzIHRoYXQgY29tZSBhdCB0aGUKKyAgICAvLyBhdXRvc2Nyb2xsIHRpbWVy
IHJhdGUsIHdlJ2xsIHdpbmQgdXAgd2l0aCB0aGUgc2FtZSBsYWcgYXMgaW4gdGhlCisgICAgLy8g
InBlcmZlY3QiIGNhc2UgZGVzY3JpYmVkIGFib3ZlIChvciwgdG8gcHV0IGl0IGFub3RoZXIgd2F5
LCB3ZSdsbCBlbmQgdXAKKyAgICAvLyB3aXRoIHxhbmltYXRpb25TdGVwfCA9PSB8c3RlcHwgKiB8
bXVsdGlwbGllcnwgZGVzcGl0ZSB0aGUgYWN0dWFsIGRpc3RhbmNlCisgICAgLy8gY2FsY3VsYXRl
ZCBhYm92ZSBiZWluZyBsYXJnZXIgdGhhbiB0aGF0KS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gInBl
cmZlY3QiCisgICAgLy8gYmVoYXZpb3IgZm9yIGF1dG9zY3JvbGxpbmcgd2l0aG91dCBoYXZpbmcg
dG8gc3BlY2lhbC1jYXNlIGl0LgorICAgIGlmIChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBh
bmltYXRpb25TdGVwIC89ICgyLjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkg
KyBhbmltYXRpb25UaW1lckRlbGF5KSkpOworICAgIC8vIFRoZSByZXN1bHQgb2YgYWxsIHRoaXMg
aXMgdGhhdCBzaW5nbGUga2V5cHJlc3NlcyBvciB3aGVlbCBmbGlja3Mgd2lsbAorICAgIC8vIHNj
cm9sbCBpbiB0aGUgc2FtZSB0aW1lIHBlcmlvZCBhcyBzaW5nbGUgcHJlc3NlcyBvZiBzY3JvbGxi
YXIgZWxlbWVudHM7CisgICAgLy8gaG9sZGluZyB0aGUgbW91c2UgZG93biBvbiBhIHNjcm9sbGJh
ciBwYXJ0IHdpbGwgc2Nyb2xsIGFzIGZhc3QgYXMKKyAgICAvLyBwb3NzaWJsZSB3aXRob3V0IGhp
dGNoaW5nOyBhbmQgb3RoZXIgcmVwZWF0ZWQgc2Nyb2xsIGV2ZW50cyB3aWxsIGFsc28KKyAgICAv
LyBzY3JvbGwgd2l0aCB0aGUgc2FtZSB0aW1lIGxhZyBhcyBob2xkaW5nIGRvd24gdGhlIG1vdXNl
IG9uIGEgc2Nyb2xsYmFyCisgICAgLy8gcGFydC4KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0
eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Nj
cm9sbFRpbWVyRGVsYXkoKTsKKworICAgIC8vIElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9sbGlu
Zywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRlU2Ny
b2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2lu
OjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1f
dmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAg
ICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9z
OworICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7Cit9CisKKy8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjph
Y2NlbGVyYXRpb25UaW1lKCkKK3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUg
bGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFy
Z2V0CisgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9k
dWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1l
ciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxE
YXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRp
b25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3Jv
bGwoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5n
IHBlcmYgdmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFs
IHRpbWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAg
dCA9IHQwICsgMC41dEEgLSB0RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhl
IHRpbWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAg
IC8vICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cp
CisgICAgLy8gICB0RCA9IHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZh
bHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEK
KyAgICAvLyAgICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9u
ZSBkdWUgdG8gY2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkg
KH4wIGZvciBzaW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBw
YWdlcykuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxs
LCB0aGUgdG90YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdp
YmxlIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBX
aXRob3V0CisgICAgLy8ga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhh
cmQgdG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0
byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisg
ICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUg
dGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBi
ZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBw
YWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8g
YXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxp
bmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBp
ZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21l
IGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBk
YXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xh
c3RBbmltYXRpb25UaW1lKSA6IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUg
b3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVu
dAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYg
KGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAg
ICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2gg
dGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBk
YXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0
byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBw
b3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50
ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJy
ZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVu
dGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAg
IC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4g
b3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRy
YXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0
aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAg
ICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9j
aXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxv
YXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJh
dGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29u
c3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxp
bmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAg
ICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIg
cG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVy
YXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQg
dGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVs
b2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAg
ICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Ny
b2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBl
bnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0
YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9
IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0
YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2Np
dHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5t
X2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3Vy
IGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0
eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVk
VmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxl
ZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsKKyAg
ICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJlZCBw
b3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAgKmRh
dGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0aW9u
LiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1cGRh
dGUuCisgICAgICAgIGlmICgqZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAg
ICAgICAqZGF0YS0+bV9jdXJyZW50UG9zICs9IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgIGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkpOwor
ICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwor
ICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2lu
dCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJl
bnRQb3MpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1h
dG9yV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbEFuaW1hdG9yV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1Ymxp
YzoKKyAgICBTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvcldpbigpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
UGVyQXhpc0RhdGEgeworICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFy
ZW50LCBmbG9hdCogY3VycmVudFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxv
Y2l0eTsKKyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBt
X2xhc3RBbmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9h
bmltYXRpb25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25U
aW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisg
ICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOwor
ICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2
b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9y
aXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9Cisj
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3MywyMCBAQCBJbnRQ
b2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpCiAgICAgcmV0dXJuIEludFBvaW50
KG1heGltdW1PZmZzZXQud2lkdGgoKSwgbWF4aW11bU9mZnNldC5oZWlnaHQoKSk7CiB9CiAKK2lu
dCBTY3JvbGxWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxT
Y3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFNjcm9s
bFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNl
dCkKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5p
bWF0b3IpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTQ0
MSw3ICs0NTUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
dHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCksIFNj
cm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFy
c1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CiAg
ICAgfQpAQCAtNjczLDcgKzY4NywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlCiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgZGVs
dGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0
YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIHNjcm9s
bEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRlbHRhPworICAg
ICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7
CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhl
bCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lv
biA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw5IEBAIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJs
aWMKIHB1YmxpYzoKICAgICB+U2Nyb2xsVmlldygpOwogCi0gICAgLy8gU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9uLiBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCisgICAgLy8gU2Nyb2xs
YmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4g
VGhlIFNjcm9sbFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0
aGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTIgKzEwMSwx
MiBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3Jv
bGxiYXIodGhpcyk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdikKK2Jvb2wg
U2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdiwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKICAgICB2
ID0gbWF4KG1pbih2LCBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKICAgICBpZiAo
dmFsdWUoKSA9PSB2KQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQg
dGhlIHNhbWUuCi0gICAgc2V0Q3VycmVudFBvcyh2KTsKKyAgICBzZXRDdXJyZW50UG9zKHYsIHNv
dXJjZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Miw5ICsxNDIsNiBAQCBib29sIFNj
cm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogI2VuZGlmCiAKLSAgICAv
LyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgotICAgIGlmICgobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0
aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8IGRpcmVjdGlv
biA9PSBTY3JvbGxSaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmbG9hdCBzdGVw
ID0gMDsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBTY3JvbGxCeUxpbmU6
ICAgICBzdGVwID0gbV9saW5lU3RlcDsgIGJyZWFrOwpAQCAtMTU0LDggKzE1MSwxMCBAQCBib29s
IFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogICAgIGlmIChkaXJl
Y3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCiAgICAgICAgIG11
bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIHJldHVy
biBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0
aXBsaWVyKTsKIAotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9z
ICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0g
bV92aXNpYmxlU2l6ZSkpLCAwLjBmKSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1p
bihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0
b3IpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpAQCAtMjg3LDExICsyODYs
MTQgQEAgdm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQogICAgIGVsc2UgaWYgKGRl
bHRhIDwgMCkKICAgICAgICAgZGVsdGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7CiAgICAgaWYg
KGRlbHRhKQotICAgICAgICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBv
cyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7CisgICAgICAg
IHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4
aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwog
fQogCi1ib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9s
bGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7Cisg
ICAgaWYgKChzb3VyY2UgIT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0
aW9uLCBwb3MpOworCiAgICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzM2LDcgKzMzOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVk
KGNvbnN0IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
ICAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpCi0gICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAg
ICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250
YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2
aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0MiwxMSBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiAKIGNsYXNz
IFNjcm9sbGJhciA6IHB1YmxpYyBXaWRnZXQgewogcHVibGljOgorICAgIGVudW0gU2Nyb2xsU291
cmNlIHsKKyAgICAgICAgRnJvbVNjcm9sbEFuaW1hdG9yLAorICAgICAgICBOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IsCisgICAgfTsKKwogICAgIHZpcnR1YWwgflNjcm9sbGJhcigpOwogCiAgICAgLy8g
TXVzdCBiZSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNlIHRo
ZSBTY3JvbGxiYXIgYmFzZSBjbGFzcy4gIFJpZ2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0aGF0
IGlzIG5vdCB1c2luZyB0aGUgYmFzZSBjbGFzcyBpcyBHVEsuCkBAIC03NSw3ICs4MCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAK
ICAgICB2b2lkIHNldFN0ZXBzKGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxz
UGVyU3RlcCA9IDEpOwotICAgIGJvb2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVl
KGludCwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2
aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBw
KSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIApAQCAtMTY3LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CisgICAgYm9vbCBz
ZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQoKQorICAgIDogbV9zY3JvbGxBbmlt
YXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKQoreworfQorCitTY3JvbGxiYXJDbGll
bnQ6On5TY3JvbGxiYXJDbGllbnQoKQoreworfQorCitib29sIFNjcm9sbGJhckNsaWVudDo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3sKKyAgICBtX3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BB
bmltYXRpb24ob3JpZW50YXRpb24sIHBvcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjEgKzI2LDI4IEBACiAj
aWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CisKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CisgICAgU2Nyb2xsYmFyQ2xpZW50KCk7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpOwogCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKLSAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CkBA
IC01MiwyMSArNTksMjEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxiYXJSZWN0KTsKICAgICB9
Ci0gICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50
UmVjdCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29u
dmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKICAgICB9Ci0gICAgCiAgICAgdmly
dHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoc2Nyb2xsYmFyUG9pbnQpOwogICAgIH0KLSAgICAKICAgICB2aXJ0dWFsIElu
dFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJHdGsuY3BwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCB2
b2lkIFNjcm9sbGJhckd0azo6c2V0RnJhbWVSZWN0KGNvbnN0IEluCiAKIHZvaWQgU2Nyb2xsYmFy
R3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFNjcm9sbGJhckd0ayogdGhhdCkK
IHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKSk7CisgICAgdGhhdC0+c2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSks
IE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyR3RrOjpzZXRFbmFi
bGVkKGJvb2wgc2hvdWxkRW5hYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxi
YXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5j
cHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3NiwxMSBAQCBib29sIFNjcm9sbGJhcjo6Y29u
dGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgICAgIGNvbnN0IFFQb2ludCBwb3MgPSBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZlbnQucG9zKCkpOwogICAgICAgICBtb3ZlVGh1bWIoaG9y
aXpvbnRhbCA/IHBvcy54KCkgOiBwb3MueSgpKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvblNlbGVj
dGVkID09IGFjdFNjcm9sbFRvcCkKLSAgICAgICAgc2V0VmFsdWUoMCk7CisgICAgICAgIHNjcm9s
bChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsK
ICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAg
IHNldFZhbHVlKG1heGltdW0oKSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xs
UmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rp
b25TZWxlY3RlZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIHNjcm9sbChob3Jpem9u
dGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYg
KGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQogICAgICAgICBzY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlm
IChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxVcCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDE3IEBAIHZv
aWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JgogICAgICAgICA6OlJlbGVhc2VE
QyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAoraW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChv
cmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Nj
cm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwor
fQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9z
Y3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIEZyb21TY3JvbGxBbmltYXRvcik7Cit9CisK
IHZvaWQgUG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCiB7
CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5oCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJp
bmdNb3VzZSA9IGI7IH0KIAogICAgIC8vIFNjcm9sbEJhckNsaWVudAorICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVj
dCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJldmlzaW9uIDY2NTU1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzAsNiArMTcwLDE3IEBAIHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnBhaW50Q29sdW1uSGVhZGVy
KEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworaW50IFJlbmRl
ckRhdGFHcmlkOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBj
b25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikg
JiYgbV92QmFyKSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgpIC0gbV92QmFyLT52aXNpYmxlU2l6ZSgp
KSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIEZyb21TY3JvbGxBbmltYXRvcik7Cit9CisK
IHZvaWQgUmVuZGVyRGF0YUdyaWQ6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3Jp
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHJl
dmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwcml2YXRlOgogICAgIEhUTUxEYXRhR3JpZEVs
ZW1lbnQqIGdyaWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFH
cmlkRWxlbWVudCo+KG5vZGUoKSk7IH0KIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZh
Y2UuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA2NjU1NSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
Myw5ICsxMzYzLDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50IHgsCiAK
ICAgICBpZiAodXBkYXRlU2Nyb2xsYmFycykgewogICAgICAgICBpZiAobV9oQmFyKQotICAgICAg
ICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAgICAgICAgbV9o
QmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKICAgICAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFs
dWUobV9zY3JvbGxZKTsKKyAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBT
Y3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgfQogCiAgICAgLy8gU2NoZWR1
bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCkBAIC0xNjE4LDYgKzE2MTgsMjAgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRhciA0MTE4
NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0
byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKK2ludCBSZW5k
ZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3QKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikgPyBtX2hCYXIgOiBtX3ZCYXIpLmdldCgpOworICAgIHJldHVybiBzY3Jv
bGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUo
KSkgOiAwOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAg
bV9oQmFyLT5zZXRWYWx1ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRv
cik7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgp
LCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6
OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIC8vIFVwZGF0ZSBzY3JvbGwgcG9zaXRp
b24gZnJvbSBzY3JvbGxiYXJzLgpAQCAtMjA2OCw3ICsyMDgyLDcgQEAgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0
byBrZWVwIGV2ZXJ5dGhpbmcgd29ya2luZyAoc2VlIGhvdyBzY3JvbGxYT2Zmc2V0KCkKICAgICAg
ICAgLy8gZGlmZmVycyBmcm9tIHNjcm9sbFlPZmZzZXQoKSB0byBnZXQgYW4gaWRlYSBvZiB3aHkg
dGhlIGhvcml6b250YWwgYW5kCiAgICAgICAgIC8vIHZlcnRpY2FsIHNjcm9sbGJhcnMgbmVlZCB0
byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5KS4KLSAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3Jv
bGxYT2Zmc2V0KCkpOworICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwg
U2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgIH0KICAgICBpZiAobV92QmFy
KSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAKIAogICAg
IC8vIFNjcm9sbEJhckNsaWVudCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXpl
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbgogCiAgICAgbV9pbmRleE9mZnNldCA9IG5ld09m
ZnNldDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhP
ZmZzZXQpOworICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIFNjcm9sbGJh
cjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTIz
LDYgKzUyMywxNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lCiAg
ICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKK2ludCBS
ZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFy
KSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVTaXpl
KCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmlt
YXRvcik7Cit9CisKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciop
CiB7CiAgICAgaW50IG5ld09mZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKQEAgLTU3OCw3ICs1ODks
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAgICAgICAgIHJl
dHVybjsKICAgICBtX2luZGV4T2Zmc2V0ID0gaW5kZXg7CiAgICAgaWYgKG1fdkJhcikKLSAgICAg
ICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCk7CisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5k
ZXgsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKIH0KIAogYm9vbCBSZW5kZXJM
aXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZp
c2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsNiArOTYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7
CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50IHNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7
CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NjU1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wOC0zMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5n
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzIzNTYKKworICAgICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcDogUGx1bWIgbmV3
IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBBbGxvdyB3aGVlbCBzY3JvbGxzIHRvIGJlIGFu
aW1hdGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xs
YmFySW1wbDo6b25LZXlEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJh
ckltcGwuaDogUGx1bWIgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICog
c3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6IFVwZGF0ZSBjb21tZW50cyBub3cgdGhh
dCB3ZSBoYXZlIHNtb290aCBzY3JvbGxpbmcuCisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZl
bnRGYWN0b3J5Ojptb3VzZVdoZWVsRXZlbnQpOgorCiAyMDEwLTA4LTI0ICBKZXJlbXkgT3Jsb3cg
IDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2Nr
LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCShyZXZpc2lv
biA2NjU1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVl
KCkgY29uc3QKIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24p
CiB7Ci0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uKTsKKyAgICBtX3Njcm9sbGJh
ci0+c2V0VmFsdWUocG9zaXRpb24sIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsK
IH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUpCkBA
IC0yMTgsNyArMjE4LDcgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29u
cwogICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICAgICAgZGVs
dGEgKj0gLTE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFs
dWUobV9zY3JvbGxiYXItPnZhbHVlKCkgLSBkZWx0YSk7CisgICAgICAgICAgICBtX3Njcm9sbGJh
ci0+c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6
U2Nyb2xsQnlQaXhlbCwgZGVsdGEpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KIApAQCAtMjYyLDYgKzI2MiwxNiBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93
bihjb25zdCBXCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29u
c3QKK3sKKyAgICByZXR1cm4gKG9yaWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpKSA/IChtX3Njcm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNp
emUoKSkgOiAwOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Nj
cm9sbGJhci0+c2V0VmFsdWUoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNj
cm9sbEFuaW1hdG9yKTsKK30KKwogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZUNoYW5nZWQo
V2ViQ29yZTo6U2Nyb2xsYmFyKikKIHsKICAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkKHRoaXMp
OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHJldmlzaW9uIDY2
NTU1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJ
bnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNvcmU6OlNjcm9s
bGJhckNsaWVudCBtZXRob2RzCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOwogICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkg
Y29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRFdmVu
dEZhY3RvcnkuY3BwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvd2lu
L1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDYgKzQwMyw5
IEBAIFdlYk1vdXNlV2hlZWxFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeToKICAgICAvLyBzbW9v
dGggc2Nyb2xsaW5nIHdoaWxlIEZpcmVmb3ggZG9lc24ndCwgc28gaXQgY2FuIGdldCBhd2F5IHdp
dGggc29tZXdoYXQKICAgICAvLyBsYXJnZXIgc2Nyb2xsIHZhbHVlcyB3aXRob3V0IGZlZWxpbmcg
YXMgamVya3kuICBIZXJlIHdlIHVzZSAxMDAgcHggcGVyCiAgICAgLy8gdGhyZWUgbGluZXMgKHRo
ZSBkZWZhdWx0IHNjcm9sbCBhbW91bnQgaXMgdGhyZWUgbGluZXMgcGVyIHdoZWVsIHRpY2spLgor
ICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGhhdmUgc21vb3RoIHNjcm9sbGluZywgd2UgZG9uJ3QgbWFr
ZSB0aGlzIGFzIGxhcmdlIGFzIElFCisgICAgLy8gYmVjYXVzZSBzdWJqZWN0aXZlbHkgSUUgZmVl
bHMgbGlrZSBpdCBzY3JvbGxzIGZhcnRoZXIgdGhhbiB5b3Ugd2FudCB3aGlsZQorICAgIC8vIHJl
YWRpbmcgYXJ0aWNsZXMuCiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbGJhclBpeGVsc1Bl
ckxpbmUgPSAxMDAuMGYgLyAzLjBmOwogICAgIHdoZWVsRGVsdGEgLz0gV0hFRUxfREVMVEE7CiAg
ICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRhOwpJbmRleDogV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU1NSkK
KysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxMC0wOC0zMSAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3Jv
bGxpbmcgZnJhbWV3b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAq
IEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1
ZSk6CisKIDIwMTAtMDgtMzEgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjksNyArOTI5LDcgQEAgdm9pZCBR
V2ViRnJhbWU6OnNldFNjcm9sbEJhclZhbHVlKFF0OjpPcgogICAgICAgICAgICAgdmFsdWUgPSAw
OwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24p
KQogICAgICAgICAgICAgdmFsdWUgPSBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKTsKLSAg
ICAgICAgc2ItPnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgc2ItPnNldFZhbHVlKHZhbHVlLCBO
b3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66150</attachid>
            <date>2010-08-31 17:47:47 -0700</date>
            <delta_ts>2010-08-31 17:48:30 -0700</delta_ts>
            <desc>patch v5.6</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>60689</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2NTU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MzEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0zMSAgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiB3c2NyaXB0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdzY3JpcHQJKHJldmlzaW9uIDY2NTU1KQorKysgd3NjcmlwdAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNiArNjgsOCBAQCBpZiBidWlsZF9wb3J0ID09ICJ3eCI6CiAgICAgICAgIHdlYmNvcmVfc291
cmNlc1snd3gtd2luJ10gPSBbCiAgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAnLAogICAgICAgICAgICAgICAg
J1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNw
cCcsCisgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwJywKKyAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxBbmlt
YXRvcldpbi5oJywKICAgICAgICAgICAgICAgICMgd3hUaW1lciBvbiBXaW5kb3dzIGhhcyBhIGJ1
ZyB0aGF0IGNhdXNlcyBpdCB0byBlYXQgY3Jhc2hlcyBpbiBjYWxsYmFja3MKICAgICAgICAgICAg
ICAgICMgc28gd2UgbmVlZCB0byB1c2UgdGhlIFdpbiBwb3J0J3MgaW1wbGVtZW50YXRpb24gdW50
aWwgdGhlIHd4IGJ1ZyBmaXggaXMKICAgICAgICAgICAgICAgICMgd2lkZWx5IGF2YWlsYWJsZSAo
aXQgd2FzIGZpeGVkIGluIDIuOC4xMCkuCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEwLTA4LTMxICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9s
bEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93
cyBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmlt
YXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwOiBBZGRlZCB0byBhdm9pZCBoYXZpbmcgdG8g
bWFrZSBTY3JvbGxBbmltYXRvci5oIG5vbi1wcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
R3RrLmNwcDoKKyAgICAgICAgKFNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJl
bmNlIHRvIHNldFZhbHVlKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRN
ZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBN
ZW51V2luOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5o
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJh
ckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuCisKIDIwMTAtMDgtMzEgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uLgpJbmRleDogV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMTksNyArMTIxOSw5IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKICAgICBwbGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIHBsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCiAgICAgcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKICAg
ICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKICAgICBwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAogICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTQ3LDYgKzE5NDcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBA
IC0xOTU0LDYgKzE5NTYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgXApAQCAtMjU2Niw2ICsyNTY5LDggQEAgZW5kaWYK
IAogaWYgVEFSR0VUX1dJTjMyCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yV2luLmggXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTMxMjcsNiArMzEyNywxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmgnLApAQCAtMzEzNCw2ICsz
MTM4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxiYXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTU4LDcgKzk1OCw5IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vU2No
ZW1lUmVnaXN0cnkuY3BwIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAogICAg
IHBsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5j
cHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBcCiAgICAgcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5n
LmNwcCBcCkBAIC0xNzkwLDcgKzE3OTIsOSBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9x
dC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmggXAorICAgIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhci5oIFwKKyAgICBw
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKICAgICBwbGF0Zm9ybS9T
ZWFyY2hQb3B1cE1lbnUuaCBcCkBAIC0yMzQ4LDggKzIzNTIsMTIgQEAgbWFlbW81IHsKIH0KIAog
Ci0gICAgd2luMzItKnx3aW5jZSo6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVX
aW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCisgICAgd2luMzItKnx3aW5jZSogewor
ICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAgXAorICAgICAgICAgICAg
ICAgICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1UaW1lV2luLmNwcCBcCisgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAorICAg
IH0KIAogICAgIG1hYyB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNiArMTI3OSw4IEBACiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAogICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcv
U2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1RyYW5zcGFy
ZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjY5LDYgKzI0MjY5LDIyIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNDI3Nyw2ICsyNDI5
MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyQ2xpZW50
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MzYsNyArNDgzNiw4
IEBACiAJCUJDOTk4MTJFMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OTgxMkQw
REJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07CiAJCUJDOUFE
RDIzMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIwQ0M0MDMyNjAw
MDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8q
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDdGMENDNDA5MjIwMDA5OEM0QyAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07Ci0JCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzlCQzY0RDBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuY3BwICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRD
MEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1QjQwMDE5Q0E3
NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5oICovOyB9OwogCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMg
LyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBMkIwNjAxMDUwNDc1RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEyNiw2ICs1MTI3LDgg
QEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgx
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2
RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRB
RTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBB
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2
N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87
IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMx
MUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMDY0NCw3ICsxMDY0Nyw4IEBACiAJCUJDOTk4MTJEMERCRTgwN0Ew
MDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01BYnN0cmFjdFZpZXdGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFERDdGMENDNDA5MjIw
MDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xs
YmFyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhckNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQzY0QjBFN0M0ODg5MDA4
Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMkIwNjAxMDUwNDc1
RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVXNlclNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5NjMsNiAr
MTA5NjcsOCBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1h
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENEUwQUZBMTFGN0JDMjcwMDlE
MzgxMSAvKiBmdWxsc2NyZWVuLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gZnVsbHNj
cmVlbi5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjczNSw4
ICsxNjc0MSwxMSBAQAogCQkJCTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29wVGlt
ZXIuaCAqLywKIAkJCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
Y3BwICovLAogCQkJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
ICovLAorCQkJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
Ki8sCisJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8s
CiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAotCQkJCUJD
OUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKKwkJCQlCQzlC
QzY0QjBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKKwkJCQlCQzlC
QzY0QzBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1
NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgw
RTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlC
QzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywK
QEAgLTE5ODI3LDYgKzE5ODM2LDcgQEAKIAkJCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyog
U2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzBFMjBFRDM5RDZGMDBBNjU4
RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyOEMyODQ1MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNBM0JGNjdF
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyMzc1LDcgKzIyMzg1LDkgQEAKIAkJCQk5RjcyMzA1MDExMTg0
QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEy
N0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Ny
b2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTQwMjhBMEU4MzY4MDgwMDMx
OTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1RDkyNUI2NzBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhT1MoV0lORE9XUykK
K1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50KTsKK30KKyNl
bmRpZgorCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKQoreworICAgIGZsb2F0KiBjdXJyZW50UG9zID0gKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpID8gJm1fY3VycmVudFBvc1ggOiAmbV9jdXJyZW50UG9zWTsKKyAgICBmbG9h
dCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlw
bGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlv
bikpKSwgMC4wZik7CisgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpjdXJyZW50UG9zID0gbmV3UG9zOworICAgIG1fY2xpZW50LT5zZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVu
dFBvc1kpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7CisgICAgZWxzZQorICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5p
bWF0b3JfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudDsKKwor
Y2xhc3MgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3JvbGxBbmltYXRv
ciogY3JlYXRlKFNjcm9sbGJhckNsaWVudCopOworCisgICAgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2aXJ0dWFsIH5T
Y3JvbGxBbmltYXRvcigpIHsgfQorCisgICAgLy8gQ29tcHV0ZXMgYSBzY3JvbGwgZGVzdGluYXRp
b24gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGFs
cmVhZHkgYXQgdGhlIGRlc3RpbmF0aW9uLiAgT3RoZXJ3aXNlLCBzdGFydHMgc2Nyb2xsaW5nIHRv
d2FyZHMgdGhlCisgICAgLy8gZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4gIFNjcm9sbGlu
ZyBtYXkgYmUgaW1tZWRpYXRlIG9yIGFuaW1hdGVkLgorICAgIC8vIFRoZSBiYXNlIGNsYXNzIGlt
cGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBhbmltYXRlcy4K
KyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAvLyBTdG9wcyBh
bnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHVwZGF0ZXMgdGhlIFNjcm9s
bEFuaW1hdG9yCisgICAgLy8gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICBUaGlz
IGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJhckNs
aWVudCogbV9jbGllbnQ7CisgICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNp
bmcgYSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQorICAgIGZsb2F0IG1fY3VycmVudFBv
c1k7IC8vIHN1YmNsYXNzIGNvZGUgY29tcGxleGl0eS4KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
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
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvcldpbi5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3JvbGxBbmlt
YXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yV2luKGNsaWVudCk7Cit9CisKK2NvbnN0IGRv
dWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDE7CisKK1Nj
cm9sbEFuaW1hdG9yV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JX
aW4qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJlbnRQb3MoY3VycmVu
dFBvcykKKyAgICAsIG1fZGVzaXJlZFBvcygwKQorICAgICwgbV9jdXJyZW50VmVsb2NpdHkoMCkK
KyAgICAsIG1fZGVzaXJlZFZlbG9jaXR5KDApCisgICAgLCBtX2xhc3RBbmltYXRpb25UaW1lKDAp
CisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHBhcmVudCwgJlNjcm9sbEFuaW1hdG9yV2luOjphbmlt
YXRpb25UaW1lckZpcmVkKQoreworfQorCisKK1Njcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmlt
YXRvcldpbihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKGNs
aWVudCkKKyAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSkKK3sKK30KKworU2Nyb2xsQW5p
bWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbigpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVy
SWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9s
bChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gRG9uJ3Qg
YW5pbWF0ZSBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBkb2N1bWVudC4K
KyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBt
dWx0aXBsaWVyKTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuICBDYWxj
dWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9u
dGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rl
c2lyZWRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGll
bnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS0+bV9k
ZXNpcmVkUG9zID0gbmV3UG9zOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVs
b2NpdHkuCisgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0
YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIC8vIFRoZXJlIGFyZSBhIG51bWJl
ciBvZiBkaWZmZXJlbnQgc291cmNlcyBvZiBzY3JvbGwgcmVxdWVzdHMuICBXZSB3YW50IHRvCisg
ICAgLy8gbWFrZSBib3RoIGtleWJvYXJkIGFuZCB3aGVlbC1nZW5lcmF0ZWQgc2Nyb2xsIHJlcXVl
c3RzICh3aGljaCBjYW4gY29tZSBhdAorICAgIC8vIHVucHJlZGljdGFibGUgcmF0ZXMpIGFuZCBh
dXRvc2Nyb2xsaW5nIGZyb20gaG9sZGluZyBkb3duIHRoZSBtb3VzZSBidXR0b24KKyAgICAvLyBv
biBhIHNjcm9sbGJhciBwYXJ0ICh3aGVyZSB0aGUgcmVxdWVzdCByYXRlIGNhbiBiZSBvYnRhaW5l
ZCBmcm9tIHRoZQorICAgIC8vIHNjcm9sbGJhciB0aGVtZSkgZmVlbCBzbW9vdGgsIHJlc3BvbnNp
dmUsIGFuZCBzaW1pbGFyLgorICAgIC8vCisgICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB0aGUg
c2Nyb2xsYmFyJ3MgYXV0b3Njcm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAgICAvLyBpbmNy
ZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8ICh3aXRoIHxtdWx0aXBsaWVyfCA9
PSAxKSBldmVyeQorICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Ny
b2xsVGltZXJEZWxheSgpIHNlY29uZHMuICBJZiB3ZSBzZXQKKyAgICAvLyB0aGUgZGVzaXJlZCB2
ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsIG5laXRo
ZXIKKyAgICAvLyByYWNlIGFoZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGlu
Y3JlYXNpbmdseSBsYWcgYmVoaW5kLCBidXQKKyAgICAvLyB3aWxsIGJlIHNtb290aCBhbmQgc3lu
Y2hyb25pemVkLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGFjY2Vs
ZXJhdGlvbiBwZXJpb2QsIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluCisgICAgLy8gdGhpcyBjYXNl
IHdvdWxkIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IChz
ZWUKKyAgICAvLyBjb21tZW50cyBvbiBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3QgYW1vdW50
IGlzIGdpdmVuIGJ5CisgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQpCisgICAg
Ly8gV2hlcmUKKyAgICAvLyAgIHYgPSBUaGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LAorICAgIC8v
ICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpCisgICAgLy8gICB0QSA9IGFjY2VsZXJhdGlvblRpbWUoKQorICAgIC8vICAg
dEQgPSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5n
IHRvIHNjcm9sbCwKKyAgICAvLyAgICAgICAgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8K
KyAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21lIGJ1ZmZlciBhZ2FpbnN0IHRpbWVyIGppdHRl
ciBzbyB3ZSdyZSBsZXNzIGxpa2VseQorICAgIC8vIHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlv
biBhbmQgc3RvcCAoYW5kIHRodXMgaGF2ZSB0byByZS1hY2NlbGVyYXRlLAorICAgIC8vIGNhdXNp
bmcgYSB2aXNpYmxlIGhpdGNoKSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4dCBhdXRvc2Nyb2xs
IGluY3JlbWVudC4KKyAgICAvLworICAgIC8vIFRodXMsIGZvciBhdXRvc2Nyb2xsLXRpbWVyLXRy
aWdnZXJlZCByZXF1ZXN0cywgdGhlIGlkZWFsIHN0ZWFkeS1zdGF0ZQorICAgIC8vIGRpc3RhbmNl
IHRvIHRyYXZlbCBpbiBlYWNoIHRpbWUgaW50ZXJ2YWwgaXM6CisgICAgLy8gICBmbG9hdCBhbmlt
YXRpb25TdGVwID0gc3RlcDsKKyAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSdyZSBub3QgYWxyZWFk
eSBhbmltYXRpbmcsIHRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcworICAgIC8vIHRoZSBkaXN0
YW5jZSB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgV2UnbGwgcmV0dXJuIHRvIHRoYXQgaW4gYSBt
b21lbnQuCisgICAgLy8KKyAgICAvLyBGb3Iga2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdl
IGRvbid0IGtub3cgd2hlbiB0aGUgbmV4dCBpbmNyZW1lbnQKKyAgICAvLyB3aWxsIGJlIHJlcXVl
c3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIgYXdh
eQorICAgIC8vIGZyb20gdGhlIHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUsIHRoZW4gZm9yIGtleWJv
YXJkL3doZWVsIGV2ZW50cyB0aGF0IGNvbWUKKyAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Nj
cm9sbCBkZWxheSwgd2UnbGwgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggdGhlCisgICAgLy8gdmVs
b2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2VyJ3MgYWN0
aW9uczsgZm9yCisgICAgLy8gZXZlbnRzIHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9sbCBv
bmUgaW5jcmVtZW50IGFuZCB0aGVuIHBhdXNlIHVudGlsCisgICAgLy8gdGhlIG5leHQgZXZlbnQg
ZmlyZXMuCisgICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9j
dXJyZW50UG9zKTsKKyAgICAvLyBJZiBhIGtleSBpcyBoZWxkIGRvd24gKG9yIHRoZSB3aGVlbCBj
b250aW51YWxseSBzcHVuKSwgdGhlbiBvbmNlIHdlIGhhdmUKKyAgICAvLyByZWFjaGVkIGEgdmVs
b2NpdHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUgbGlrZWx5IHRv
CisgICAgLy8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1l
IHdlJ2QgZXhwZWN0IHRoZSBuZXh0CisgICAgLy8gaW5jcmVtZW50IHRvIG9jY3VyIC0tIGJhZCBi
ZWNhdXNlIGl0IGxlYWRzIHRvIGhpdGNoaW5nIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgIC8vIChp
ZiBhdXRvc2Nyb2xsLWJhc2VkIHJlcXVlc3RzIGRpZG4ndCByZXN1bHQgaW4gYSBzbWFsbCBhbW91
bnQgb2YgY29uc3RhbnQKKyAgICAvLyBsYWcpLiAgU28gaWYgd2UncmUgY2FsbGVkIGFnYWluIHdo
aWxlIGFscmVhZHkgYW5pbWF0aW5nLCB3ZSB3YW50IHRvIHRyaW0KKyAgICAvLyB0aGUgYW5pbWF0
aW9uU3RlcCBzbGlnaHRseSB0byBtYWludGFpbiBsYWcgbGlrZSB3aGF0J3MgZGVzY3JpYmVkIGFi
b3ZlLgorICAgIC8vIChJIHNheSAibWFpbnRhaW4iIHNpbmNlIHdlJ2xsIGFscmVhZHkgYmUgbGFn
Z2VkIGR1ZSB0byB0aGUgYWNjZWxlcmF0aW9uCisgICAgLy8gZHVyaW5nIHRoZSBmaXJzdCBzY3Jv
bGwgcGVyaW9kLikKKyAgICAvLworICAgIC8vIFJlbWVtYmVyIHRoYXQgdHJpbW1pbmcgd29uJ3Qg
Y2F1c2UgdXMgdG8gZmFsbCBzdGVhZGlseSBmdXJ0aGVyIGJlaGluZAorICAgIC8vIGhlcmUsIGJl
Y2F1c2UgdGhlIGZ1cnRoZXIgYmVoaW5kIHdlIGFyZSwgdGhlIGxhcmdlciB0aGUgYmFzZSBzdGVw
IHZhbHVlCisgICAgLy8gYWJvdmUuICBHaXZlbiB0aGUgc2Nyb2xsaW5nIGFsZ29yaXRobSBpbiBh
bmltYXRlU2Nyb2xsKCksIHRoZSBwcmFjdGljYWwKKyAgICAvLyBlZmZlY3Qgd2lsbCBhY3R1YWxs
eSBiZSB0aGF0LCBhc3N1bWluZyBhIGNvbnN0YW50IHRyaW0gZmFjdG9yLCB3ZSdsbCBsYWcKKyAg
ICAvLyBieSBhIGNvbnN0YW50IGFtb3VudCBkZXBlbmRpbmcgb24gdGhlIHJhdGUgYXQgd2hpY2gg
aW5jcmVtZW50cyBvY2N1cgorICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVy
IGRlbGF5LiAgVGhlIGV4YWN0IGxhZyBpcyBnaXZlbiBieQorICAgIC8vICAgbGFnID0gfHN0ZXB8
ICogKChyIC8gaykgLSAxKQorICAgIC8vIFdoZXJlCisgICAgLy8gICByID0gVGhlIHJhdGlvIG9m
IHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAvLyAgICAgICBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSwgdG8gdGhlCisgICAgLy8g
ICAgICAga2V5L3doZWVsIHJlcGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBm
YXN0ZXIpCisgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVs
b3cKKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8gY2hvb3NlIHRoZSB0cmltIGZhY3RvciBzdWNo
IHRoYXQgZm9yIGNhbGxzIHRoYXQgY29tZSBhdCB0aGUKKyAgICAvLyBhdXRvc2Nyb2xsIHRpbWVy
IHJhdGUsIHdlJ2xsIHdpbmQgdXAgd2l0aCB0aGUgc2FtZSBsYWcgYXMgaW4gdGhlCisgICAgLy8g
InBlcmZlY3QiIGNhc2UgZGVzY3JpYmVkIGFib3ZlIChvciwgdG8gcHV0IGl0IGFub3RoZXIgd2F5
LCB3ZSdsbCBlbmQgdXAKKyAgICAvLyB3aXRoIHxhbmltYXRpb25TdGVwfCA9PSB8c3RlcHwgKiB8
bXVsdGlwbGllcnwgZGVzcGl0ZSB0aGUgYWN0dWFsIGRpc3RhbmNlCisgICAgLy8gY2FsY3VsYXRl
ZCBhYm92ZSBiZWluZyBsYXJnZXIgdGhhbiB0aGF0KS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gInBl
cmZlY3QiCisgICAgLy8gYmVoYXZpb3IgZm9yIGF1dG9zY3JvbGxpbmcgd2l0aG91dCBoYXZpbmcg
dG8gc3BlY2lhbC1jYXNlIGl0LgorICAgIGlmIChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBh
bmltYXRpb25TdGVwIC89ICgyLjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkg
KyBhbmltYXRpb25UaW1lckRlbGF5KSkpOworICAgIC8vIFRoZSByZXN1bHQgb2YgYWxsIHRoaXMg
aXMgdGhhdCBzaW5nbGUga2V5cHJlc3NlcyBvciB3aGVlbCBmbGlja3Mgd2lsbAorICAgIC8vIHNj
cm9sbCBpbiB0aGUgc2FtZSB0aW1lIHBlcmlvZCBhcyBzaW5nbGUgcHJlc3NlcyBvZiBzY3JvbGxi
YXIgZWxlbWVudHM7CisgICAgLy8gaG9sZGluZyB0aGUgbW91c2UgZG93biBvbiBhIHNjcm9sbGJh
ciBwYXJ0IHdpbGwgc2Nyb2xsIGFzIGZhc3QgYXMKKyAgICAvLyBwb3NzaWJsZSB3aXRob3V0IGhp
dGNoaW5nOyBhbmQgb3RoZXIgcmVwZWF0ZWQgc2Nyb2xsIGV2ZW50cyB3aWxsIGFsc28KKyAgICAv
LyBzY3JvbGwgd2l0aCB0aGUgc2FtZSB0aW1lIGxhZyBhcyBob2xkaW5nIGRvd24gdGhlIG1vdXNl
IG9uIGEgc2Nyb2xsYmFyCisgICAgLy8gcGFydC4KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0
eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Nj
cm9sbFRpbWVyRGVsYXkoKTsKKworICAgIC8vIElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9sbGlu
Zywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRlU2Ny
b2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2lu
OjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1f
dmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAg
ICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9z
OworICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7Cit9CisKKy8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjph
Y2NlbGVyYXRpb25UaW1lKCkKK3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUg
bGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFy
Z2V0CisgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9k
dWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1l
ciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxE
YXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRp
b25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3Jv
bGwoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5n
IHBlcmYgdmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFs
IHRpbWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAg
dCA9IHQwICsgMC41dEEgLSB0RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhl
IHRpbWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAg
IC8vICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cp
CisgICAgLy8gICB0RCA9IHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZh
bHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEK
KyAgICAvLyAgICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9u
ZSBkdWUgdG8gY2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkg
KH4wIGZvciBzaW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBw
YWdlcykuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxs
LCB0aGUgdG90YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdp
YmxlIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBX
aXRob3V0CisgICAgLy8ga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhh
cmQgdG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0
byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisg
ICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUg
dGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBi
ZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBw
YWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8g
YXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxp
bmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBp
ZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21l
IGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBk
YXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xh
c3RBbmltYXRpb25UaW1lKSA6IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUg
b3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVu
dAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYg
KGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAg
ICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2gg
dGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBk
YXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0
byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBw
b3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50
ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJy
ZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVu
dGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAg
IC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4g
b3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRy
YXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0
aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAg
ICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9j
aXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxv
YXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJh
dGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29u
c3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxp
bmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAg
ICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIg
cG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVy
YXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQg
dGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVs
b2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAg
ICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Ny
b2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBl
bnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0
YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9
IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0
YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2Np
dHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5t
X2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3Vy
IGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0
eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVk
VmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxl
ZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsKKyAg
ICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJlZCBw
b3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAgKmRh
dGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0aW9u
LiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1cGRh
dGUuCisgICAgICAgIGlmICgqZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAg
ICAgICAqZGF0YS0+bV9jdXJyZW50UG9zICs9IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgIGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkpOwor
ICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwor
ICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2lu
dCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJl
bnRQb3MpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1h
dG9yV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbEFuaW1hdG9yV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1Ymxp
YzoKKyAgICBTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvcldpbigpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
UGVyQXhpc0RhdGEgeworICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFy
ZW50LCBmbG9hdCogY3VycmVudFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxv
Y2l0eTsKKyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBt
X2xhc3RBbmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9h
bmltYXRpb25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25U
aW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisg
ICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOwor
ICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2
b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9y
aXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9Cisj
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3MywyMCBAQCBJbnRQ
b2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpCiAgICAgcmV0dXJuIEludFBvaW50
KG1heGltdW1PZmZzZXQud2lkdGgoKSwgbWF4aW11bU9mZnNldC5oZWlnaHQoKSk7CiB9CiAKK2lu
dCBTY3JvbGxWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxT
Y3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFNjcm9s
bFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNl
dCkKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5p
bWF0b3IpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTQ0
MSw3ICs0NTUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
dHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCksIFNj
cm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFy
c1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CiAg
ICAgfQpAQCAtNjczLDcgKzY4NywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlCiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgZGVs
dGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0
YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIHNjcm9s
bEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRlbHRhPworICAg
ICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7
CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhl
bCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lv
biA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw5IEBAIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJs
aWMKIHB1YmxpYzoKICAgICB+U2Nyb2xsVmlldygpOwogCi0gICAgLy8gU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9uLiBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCisgICAgLy8gU2Nyb2xs
YmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4g
VGhlIFNjcm9sbFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0
aGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTIgKzEwMSwx
MiBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3Jv
bGxiYXIodGhpcyk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdikKK2Jvb2wg
U2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdiwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKICAgICB2
ID0gbWF4KG1pbih2LCBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKICAgICBpZiAo
dmFsdWUoKSA9PSB2KQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQg
dGhlIHNhbWUuCi0gICAgc2V0Q3VycmVudFBvcyh2KTsKKyAgICBzZXRDdXJyZW50UG9zKHYsIHNv
dXJjZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Miw5ICsxNDIsNiBAQCBib29sIFNj
cm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogI2VuZGlmCiAKLSAgICAv
LyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgotICAgIGlmICgobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0
aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8IGRpcmVjdGlv
biA9PSBTY3JvbGxSaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmbG9hdCBzdGVw
ID0gMDsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBTY3JvbGxCeUxpbmU6
ICAgICBzdGVwID0gbV9saW5lU3RlcDsgIGJyZWFrOwpAQCAtMTU0LDggKzE1MSwxMCBAQCBib29s
IFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogICAgIGlmIChkaXJl
Y3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCiAgICAgICAgIG11
bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIHJldHVy
biBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0
aXBsaWVyKTsKIAotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9z
ICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0g
bV92aXNpYmxlU2l6ZSkpLCAwLjBmKSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1p
bihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0
b3IpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpAQCAtMjg3LDExICsyODYs
MTQgQEAgdm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQogICAgIGVsc2UgaWYgKGRl
bHRhIDwgMCkKICAgICAgICAgZGVsdGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7CiAgICAgaWYg
KGRlbHRhKQotICAgICAgICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBv
cyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7CisgICAgICAg
IHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4
aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwog
fQogCi1ib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9s
bGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7Cisg
ICAgaWYgKChzb3VyY2UgIT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0
aW9uLCBwb3MpOworCiAgICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzM2LDcgKzMzOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVk
KGNvbnN0IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
ICAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpCi0gICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAg
ICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250
YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2
aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0MiwxMSBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiAKIGNsYXNz
IFNjcm9sbGJhciA6IHB1YmxpYyBXaWRnZXQgewogcHVibGljOgorICAgIGVudW0gU2Nyb2xsU291
cmNlIHsKKyAgICAgICAgRnJvbVNjcm9sbEFuaW1hdG9yLAorICAgICAgICBOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IsCisgICAgfTsKKwogICAgIHZpcnR1YWwgflNjcm9sbGJhcigpOwogCiAgICAgLy8g
TXVzdCBiZSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNlIHRo
ZSBTY3JvbGxiYXIgYmFzZSBjbGFzcy4gIFJpZ2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0aGF0
IGlzIG5vdCB1c2luZyB0aGUgYmFzZSBjbGFzcyBpcyBHVEsuCkBAIC03NSw3ICs4MCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAK
ICAgICB2b2lkIHNldFN0ZXBzKGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxz
UGVyU3RlcCA9IDEpOwotICAgIGJvb2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVl
KGludCwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2
aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBw
KSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIApAQCAtMTY3LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CisgICAgYm9vbCBz
ZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQoKQorICAgIDogbV9zY3JvbGxBbmlt
YXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKQoreworfQorCitTY3JvbGxiYXJDbGll
bnQ6On5TY3JvbGxiYXJDbGllbnQoKQoreworfQorCitib29sIFNjcm9sbGJhckNsaWVudDo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3sKKyAgICBtX3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BB
bmltYXRpb24ob3JpZW50YXRpb24sIHBvcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjEgKzI2LDI4IEBACiAj
aWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CisKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CisgICAgU2Nyb2xsYmFyQ2xpZW50KCk7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpOwogCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKLSAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CkBA
IC01MiwyMSArNTksMjEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxiYXJSZWN0KTsKICAgICB9
Ci0gICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50
UmVjdCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29u
dmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKICAgICB9Ci0gICAgCiAgICAgdmly
dHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoc2Nyb2xsYmFyUG9pbnQpOwogICAgIH0KLSAgICAKICAgICB2aXJ0dWFsIElu
dFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJHdGsuY3BwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCB2
b2lkIFNjcm9sbGJhckd0azo6c2V0RnJhbWVSZWN0KGNvbnN0IEluCiAKIHZvaWQgU2Nyb2xsYmFy
R3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFNjcm9sbGJhckd0ayogdGhhdCkK
IHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKSk7CisgICAgdGhhdC0+c2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSks
IE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyR3RrOjpzZXRFbmFi
bGVkKGJvb2wgc2hvdWxkRW5hYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxi
YXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5j
cHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3NiwxMSBAQCBib29sIFNjcm9sbGJhcjo6Y29u
dGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgICAgIGNvbnN0IFFQb2ludCBwb3MgPSBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZlbnQucG9zKCkpOwogICAgICAgICBtb3ZlVGh1bWIoaG9y
aXpvbnRhbCA/IHBvcy54KCkgOiBwb3MueSgpKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvblNlbGVj
dGVkID09IGFjdFNjcm9sbFRvcCkKLSAgICAgICAgc2V0VmFsdWUoMCk7CisgICAgICAgIHNjcm9s
bChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsK
ICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAg
IHNldFZhbHVlKG1heGltdW0oKSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xs
UmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rp
b25TZWxlY3RlZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIHNjcm9sbChob3Jpem9u
dGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYg
KGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQogICAgICAgICBzY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlm
IChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxVcCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDE3IEBAIHZv
aWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JgogICAgICAgICA6OlJlbGVhc2VE
QyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAoraW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChv
cmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Nj
cm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwor
fQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9z
Y3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1h
dG9yKTsKK30KKwogdm9pZCBQb3B1cE1lbnVXaW46OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbEJhcikKIHsKICAgICBBU1NFUlQobV9zY3JvbGxiYXIpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmgJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKGJvb2wgYikgeyBtX3Njcm9s
bGJhckNhcHR1cmluZ01vdXNlID0gYjsgfQogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50CisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciop
OwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkocmV2aXNp
b24gNjY1NTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MCw2ICsxNzAsMTcgQEAgdm9pZCBSZW5kZXJEYXRhR3JpZDo6cGFpbnRD
b2x1bW5IZWFkZXIoRAogfQogCiAvLyBTY3JvbGxpbmcgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25z
CitpbnQgUmVuZGVyRGF0YUdyaWQ6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxs
U2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZp
c2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3ZC
YXIpCisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9t
U2Nyb2xsQW5pbWF0b3IpOworfQorCiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66152</attachid>
            <date>2010-08-31 17:48:30 -0700</date>
            <delta_ts>2010-09-08 03:18:10 -0700</delta_ts>
            <desc>patch v5.7</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>71318</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2NTU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDgt
MzEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZy
YW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0
OiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOC0zMSAgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiB3c2NyaXB0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdzY3JpcHQJKHJldmlzaW9uIDY2NTU1KQorKysgd3NjcmlwdAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNiArNjgsOCBAQCBpZiBidWlsZF9wb3J0ID09ICJ3eCI6CiAgICAgICAgIHdlYmNvcmVfc291
cmNlc1snd3gtd2luJ10gPSBbCiAgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAnLAogICAgICAgICAgICAgICAg
J1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNw
cCcsCisgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwJywKKyAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxBbmlt
YXRvcldpbi5oJywKICAgICAgICAgICAgICAgICMgd3hUaW1lciBvbiBXaW5kb3dzIGhhcyBhIGJ1
ZyB0aGF0IGNhdXNlcyBpdCB0byBlYXQgY3Jhc2hlcyBpbiBjYWxsYmFja3MKICAgICAgICAgICAg
ICAgICMgc28gd2UgbmVlZCB0byB1c2UgdGhlIFdpbiBwb3J0J3MgaW1wbGVtZW50YXRpb24gdW50
aWwgdGhlIHd4IGJ1ZyBmaXggaXMKICAgICAgICAgICAgICAgICMgd2lkZWx5IGF2YWlsYWJsZSAo
aXQgd2FzIGZpeGVkIGluIDIuOC4xMCkuCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEwLTA4LTMxICBQZXRl
ciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmss
IGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9s
bEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93
cyBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmlt
YXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5p
bWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNl
IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFz
cyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlz
RGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46
OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2lu
Ojp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JX
aW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Ny
b2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1h
dGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8g
YmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRv
ciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwOiBBZGRlZCB0byBhdm9pZCBoYXZpbmcgdG8g
bWFrZSBTY3JvbGxBbmltYXRvci5oIG5vbi1wcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
R3RrLmNwcDoKKyAgICAgICAgKFNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJl
bmNlIHRvIHNldFZhbHVlKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRN
ZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBN
ZW51V2luOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5o
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJh
ckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuCisKIDIwMTAtMDgtMzEgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uLgpJbmRleDogV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEyMTksNyArMTIxOSw5IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKICAgICBwbGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIHBsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCiAgICAgcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKICAg
ICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKICAgICBwbGF0Zm9ybS9TY3Jv
bGxWaWV3LmNwcAogICAgIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTQ3LDYgKzE5NDcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51U3R5bGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCkBA
IC0xOTU0LDYgKzE5NTYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgXApAQCAtMjU2Niw2ICsyNTY5LDggQEAgZW5kaWYK
IAogaWYgVEFSR0VUX1dJTjMyCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yV2luLmggXAogCVdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwK
IAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTMxMjcsNiArMzEyNywxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BvcHVwTWVudVN0eWxl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1Njcm9sbFR5cGVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmgnLApAQCAtMzEzNCw2ICsz
MTM4LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxiYXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTU4LDcgKzk1OCw5IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vU2No
ZW1lUmVnaXN0cnkuY3BwIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgXAogICAg
IHBsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAorICAgIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5j
cHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBcCiAgICAgcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5n
LmNwcCBcCkBAIC0xNzkwLDcgKzE3OTIsOSBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9x
dC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmggXAorICAgIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhci5oIFwKKyAgICBw
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKICAgICBwbGF0Zm9ybS9T
ZWFyY2hQb3B1cE1lbnUuaCBcCkBAIC0yMzQ4LDggKzIzNTIsMTIgQEAgbWFlbW81IHsKIH0KIAog
Ci0gICAgd2luMzItKnx3aW5jZSo6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVX
aW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCisgICAgd2luMzItKnx3aW5jZSogewor
ICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKKyAgICAgICAg
U09VUkNFUyArPSBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAgXAorICAgICAgICAgICAg
ICAgICAgIHBsYXRmb3JtL3dpbi9TeXN0ZW1UaW1lV2luLmNwcCBcCisgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAorICAg
IH0KIAogICAgIG1hYyB7CiAgICAgICAgIFNPVVJDRVMgKz0gXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNiArMTI3OSw4IEBACiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAogICAg
ICAgICAgICAgWydpbmNsdWRlJywgJy9vcGVudHlwZS8nXSwKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAnL1Njcm9sbEFuaW1hdG9yV2luXFwuaCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcv
U2tpYUZvbnRXaW5cXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1RyYW5zcGFy
ZW5jeVdpblxcLmNwcCQnXSwKICAgICAgICAgICBdLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0MjY5LDYgKzI0MjY5LDIyIEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXFNjcm9sbEFuaW1hdG9yLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxTY3JvbGxBbmltYXRvcldpbi5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvcldpbi5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0yNDI3Nyw2ICsyNDI5
MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyQ2xpZW50
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MzYsNyArNDgzNiw4
IEBACiAJCUJDOTk4MTJFMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OTgxMkQw
REJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07CiAJCUJDOUFE
RDIzMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIwQ0M0MDMyNjAw
MDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8q
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDdGMENDNDA5MjIwMDA5OEM0QyAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07Ci0JCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzlCQzY0RDBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuY3BwICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjRD
MEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1QjQwMDE5Q0E3
NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5oICovOyB9OwogCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMg
LyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBMkIwNjAxMDUwNDc1RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEyNiw2ICs1MTI3LDgg
QEAKIAkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RUJERDgx
MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi87IH07CiAJCUM2
RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRB
RTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBB
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKKwkJQ0EzQkY2
N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5jcHAgKi87IH07CisJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAv
KiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87
IH07CiAJCUNFMDJGMEM0MTFFODNBREQwMEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwMkYwQzMx
MUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0UwNTdGQTUxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQ0UwNTdGQTYxMjIwNzMxMTAwQTQ3
NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UwNTdGQTQxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMDY0NCw3ICsxMDY0Nyw4IEBACiAJCUJDOTk4MTJEMERCRTgwN0Ew
MDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01BYnN0cmFjdFZpZXdGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFERDdGMENDNDA5MjIw
MDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xs
YmFyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhckNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQzY0QjBFN0M0ODg5MDA4
Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMkIwNjAxMDUwNDc1
RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVXNlclNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5NjMsNiAr
MTA5NjcsOCBAQAogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4
MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9s
bEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1h
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENEUwQUZBMTFGN0JDMjcwMDlE
MzgxMSAvKiBmdWxsc2NyZWVuLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gZnVsbHNj
cmVlbi5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDJGMEMzMTFFODNBREQw
MEM2Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRTA1N0ZBMzEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjczNSw4
ICsxNjc0MSwxMSBAQAogCQkJCTFDNjNBMjQ2MEY3MTY0NjYwMEMwOUQ1QSAvKiBSdW5Mb29wVGlt
ZXIuaCAqLywKIAkJCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
Y3BwICovLAogCQkJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
ICovLAorCQkJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAg
Ki8sCisJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8s
CiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAotCQkJCUJD
OUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKKwkJCQlCQzlC
QzY0QjBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKKwkJCQlCQzlC
QzY0QzBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1
NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgw
RTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlC
QzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywK
QEAgLTE5ODI3LDYgKzE5ODM2LDcgQEAKIAkJCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyog
U2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzBFMjBFRDM5RDZGMDBBNjU4
RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyOEMyODQ1MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNBM0JGNjdF
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIyMzc1LDcgKzIyMzg1LDkgQEAKIAkJCQk5RjcyMzA1MDExMTg0
QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEy
N0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJh
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Ny
b2xsYmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTQwMjhBMEU4MzY4MDgwMDMx
OTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1RDkyNUI2NzBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhT1MoV0lORE9XUykK
K1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50KTsKK30KKyNl
bmRpZgorCitib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKQoreworICAgIGZsb2F0KiBjdXJyZW50UG9zID0gKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpID8gJm1fY3VycmVudFBvc1ggOiAmbV9jdXJyZW50UG9zWTsKKyAgICBmbG9h
dCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbigqY3VycmVudFBvcyArIChzdGVwICogbXVsdGlw
bGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlv
bikpKSwgMC4wZik7CisgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpjdXJyZW50UG9zID0gbmV3UG9zOworICAgIG1fY2xpZW50LT5zZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVu
dFBvc1kpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7CisgICAgZWxzZQorICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5p
bWF0b3JfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCisKKyNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudDsKKwor
Y2xhc3MgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBTY3JvbGxBbmltYXRv
ciogY3JlYXRlKFNjcm9sbGJhckNsaWVudCopOworCisgICAgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQpIDogbV9jbGllbnQoY2xpZW50KSB7IH0KKyAgICB2aXJ0dWFsIH5T
Y3JvbGxBbmltYXRvcigpIHsgfQorCisgICAgLy8gQ29tcHV0ZXMgYSBzY3JvbGwgZGVzdGluYXRp
b24gZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGFs
cmVhZHkgYXQgdGhlIGRlc3RpbmF0aW9uLiAgT3RoZXJ3aXNlLCBzdGFydHMgc2Nyb2xsaW5nIHRv
d2FyZHMgdGhlCisgICAgLy8gZGVzdGluYXRpb24gYW5kIHJldHVybnMgdHJ1ZS4gIFNjcm9sbGlu
ZyBtYXkgYmUgaW1tZWRpYXRlIG9yIGFuaW1hdGVkLgorICAgIC8vIFRoZSBiYXNlIGNsYXNzIGlt
cGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBhbmltYXRlcy4K
KyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAvLyBTdG9wcyBh
bnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIHVwZGF0ZXMgdGhlIFNjcm9s
bEFuaW1hdG9yCisgICAgLy8gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24uICBUaGlz
IGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Ny
b2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJvdGVjdGVkOgorICAgIFNjcm9sbGJhckNs
aWVudCogbV9jbGllbnQ7CisgICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNp
bmcgYSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQorICAgIGZsb2F0IG1fY3VycmVudFBv
c1k7IC8vIHN1YmNsYXNzIGNvZGUgY29tcGxleGl0eS4KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
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
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvcldpbi5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitTY3JvbGxBbmlt
YXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yV2luKGNsaWVudCk7Cit9CisKK2NvbnN0IGRv
dWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDE7CisKK1Nj
cm9sbEFuaW1hdG9yV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JX
aW4qIHBhcmVudCwgZmxvYXQqIGN1cnJlbnRQb3MpCisgICAgOiBtX2N1cnJlbnRQb3MoY3VycmVu
dFBvcykKKyAgICAsIG1fZGVzaXJlZFBvcygwKQorICAgICwgbV9jdXJyZW50VmVsb2NpdHkoMCkK
KyAgICAsIG1fZGVzaXJlZFZlbG9jaXR5KDApCisgICAgLCBtX2xhc3RBbmltYXRpb25UaW1lKDAp
CisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHBhcmVudCwgJlNjcm9sbEFuaW1hdG9yV2luOjphbmlt
YXRpb25UaW1lckZpcmVkKQoreworfQorCisKK1Njcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmlt
YXRvcldpbihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKGNs
aWVudCkKKyAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gpCisgICAg
LCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSkKK3sKK30KKworU2Nyb2xsQW5p
bWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbigpCit7CisgICAgc3RvcEFuaW1hdGlvblRpbWVy
SWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVl
ZGVkKCZtX3ZlcnRpY2FsRGF0YSk7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9s
bChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgLy8gRG9uJ3Qg
YW5pbWF0ZSBqdW1waW5nIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBkb2N1bWVudC4K
KyAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBt
dWx0aXBsaWVyKTsKKworICAgIC8vIFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuICBDYWxj
dWxhdGUgdGhlIHNjcm9sbCBkZWx0YS4KKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyAmbV92ZXJ0aWNhbERhdGEgOiAmbV9ob3Jpem9u
dGFsRGF0YTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heChzdGQ6Om1pbihkYXRhLT5tX2Rl
c2lyZWRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGll
bnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGlmIChuZXdQb3MgPT0g
ZGF0YS0+bV9kZXNpcmVkUG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS0+bV9k
ZXNpcmVkUG9zID0gbmV3UG9zOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbmltYXRpb24gdmVs
b2NpdHkuCisgICAgaWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBhbHJlYWR5QW5pbWF0aW5nID0gZGF0
YS0+bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworICAgIC8vIFRoZXJlIGFyZSBhIG51bWJl
ciBvZiBkaWZmZXJlbnQgc291cmNlcyBvZiBzY3JvbGwgcmVxdWVzdHMuICBXZSB3YW50IHRvCisg
ICAgLy8gbWFrZSBib3RoIGtleWJvYXJkIGFuZCB3aGVlbC1nZW5lcmF0ZWQgc2Nyb2xsIHJlcXVl
c3RzICh3aGljaCBjYW4gY29tZSBhdAorICAgIC8vIHVucHJlZGljdGFibGUgcmF0ZXMpIGFuZCBh
dXRvc2Nyb2xsaW5nIGZyb20gaG9sZGluZyBkb3duIHRoZSBtb3VzZSBidXR0b24KKyAgICAvLyBv
biBhIHNjcm9sbGJhciBwYXJ0ICh3aGVyZSB0aGUgcmVxdWVzdCByYXRlIGNhbiBiZSBvYnRhaW5l
ZCBmcm9tIHRoZQorICAgIC8vIHNjcm9sbGJhciB0aGVtZSkgZmVlbCBzbW9vdGgsIHJlc3BvbnNp
dmUsIGFuZCBzaW1pbGFyLgorICAgIC8vCisgICAgLy8gV2hlbiBhdXRvc2Nyb2xsaW5nLCB0aGUg
c2Nyb2xsYmFyJ3MgYXV0b3Njcm9sbCB0aW1lciB3aWxsIGNhbGwgdXMgdG8KKyAgICAvLyBpbmNy
ZW1lbnQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYnkgfHN0ZXB8ICh3aXRoIHxtdWx0aXBsaWVyfCA9
PSAxKSBldmVyeQorICAgIC8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Ny
b2xsVGltZXJEZWxheSgpIHNlY29uZHMuICBJZiB3ZSBzZXQKKyAgICAvLyB0aGUgZGVzaXJlZCB2
ZWxvY2l0eSB0byBleGFjdGx5IHRoaXMgcmF0ZSwgc21vb3RoIHNjcm9sbGluZyB3aWxsIG5laXRo
ZXIKKyAgICAvLyByYWNlIGFoZWFkIChhbmQgdGhlbiBoYXZlIHRvIHNsb3cgZG93bikgbm9yIGlu
Y3JlYXNpbmdseSBsYWcgYmVoaW5kLCBidXQKKyAgICAvLyB3aWxsIGJlIHNtb290aCBhbmQgc3lu
Y2hyb25pemVkLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIGFjY2Vs
ZXJhdGlvbiBwZXJpb2QsIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluCisgICAgLy8gdGhpcyBjYXNl
IHdvdWxkIGxhZyB0aGUgZGVzaXJlZCBvbmUgYnkgYSBzbWFsbCwgY29uc3RhbnQgYW1vdW50IChz
ZWUKKyAgICAvLyBjb21tZW50cyBvbiBhbmltYXRlU2Nyb2xsKCkpOyB0aGUgZXhhY3QgYW1vdW50
IGlzIGdpdmVuIGJ5CisgICAgLy8gICBsYWcgPSB8c3RlcHwgLSB2KDAuNXRBICsgdEQpCisgICAg
Ly8gV2hlcmUKKyAgICAvLyAgIHYgPSBUaGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LAorICAgIC8v
ICAgICAgIHxzdGVwfCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xs
VGltZXJEZWxheSgpCisgICAgLy8gICB0QSA9IGFjY2VsZXJhdGlvblRpbWUoKQorICAgIC8vICAg
dEQgPSBUaGUgdGltZSB3ZSBwcmV0ZW5kIGhhcyBhbHJlYWR5IHBhc3NlZCB3aGVuIHN0YXJ0aW5n
IHRvIHNjcm9sbCwKKyAgICAvLyAgICAgICAgfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8K
KyAgICAvLyBUaGlzIGxhZyBwcm92aWRlcyBzb21lIGJ1ZmZlciBhZ2FpbnN0IHRpbWVyIGppdHRl
ciBzbyB3ZSdyZSBsZXNzIGxpa2VseQorICAgIC8vIHRvIGhpdCB0aGUgZGVzaXJlZCBwb3NpdGlv
biBhbmQgc3RvcCAoYW5kIHRodXMgaGF2ZSB0byByZS1hY2NlbGVyYXRlLAorICAgIC8vIGNhdXNp
bmcgYSB2aXNpYmxlIGhpdGNoKSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbmV4dCBhdXRvc2Nyb2xs
IGluY3JlbWVudC4KKyAgICAvLworICAgIC8vIFRodXMsIGZvciBhdXRvc2Nyb2xsLXRpbWVyLXRy
aWdnZXJlZCByZXF1ZXN0cywgdGhlIGlkZWFsIHN0ZWFkeS1zdGF0ZQorICAgIC8vIGRpc3RhbmNl
IHRvIHRyYXZlbCBpbiBlYWNoIHRpbWUgaW50ZXJ2YWwgaXM6CisgICAgLy8gICBmbG9hdCBhbmlt
YXRpb25TdGVwID0gc3RlcDsKKyAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSdyZSBub3QgYWxyZWFk
eSBhbmltYXRpbmcsIHRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcworICAgIC8vIHRoZSBkaXN0
YW5jZSB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgV2UnbGwgcmV0dXJuIHRvIHRoYXQgaW4gYSBt
b21lbnQuCisgICAgLy8KKyAgICAvLyBGb3Iga2V5Ym9hcmQgYW5kIHdoZWVsIHNjcm9sbHMsIHdl
IGRvbid0IGtub3cgd2hlbiB0aGUgbmV4dCBpbmNyZW1lbnQKKyAgICAvLyB3aWxsIGJlIHJlcXVl
c3RlZC4gIElmIHdlIHNldCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGJhc2VkIG9uIGhvdyBmYXIgYXdh
eQorICAgIC8vIGZyb20gdGhlIHRhcmdldCBwb3NpdGlvbiB3ZSBhcmUsIHRoZW4gZm9yIGtleWJv
YXJkL3doZWVsIGV2ZW50cyB0aGF0IGNvbWUKKyAgICAvLyBmYXN0ZXIgdGhhbiB0aGUgYXV0b3Nj
cm9sbCBkZWxheSwgd2UnbGwgYXN5bXB0b3RpY2FsbHkgYXBwcm9hY2ggdGhlCisgICAgLy8gdmVs
b2NpdHkgbmVlZGVkIHRvIHN0YXkgc21vb3RobHkgaW4gc3luYyB3aXRoIHRoZSB1c2VyJ3MgYWN0
aW9uczsgZm9yCisgICAgLy8gZXZlbnRzIHRoYXQgY29tZSBzbG93ZXIsIHdlJ2xsIHNjcm9sbCBv
bmUgaW5jcmVtZW50IGFuZCB0aGVuIHBhdXNlIHVudGlsCisgICAgLy8gdGhlIG5leHQgZXZlbnQg
ZmlyZXMuCisgICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9IGFicyhuZXdQb3MgLSAqZGF0YS0+bV9j
dXJyZW50UG9zKTsKKyAgICAvLyBJZiBhIGtleSBpcyBoZWxkIGRvd24gKG9yIHRoZSB3aGVlbCBj
b250aW51YWxseSBzcHVuKSwgdGhlbiBvbmNlIHdlIGhhdmUKKyAgICAvLyByZWFjaGVkIGEgdmVs
b2NpdHkgY2xvc2UgdG8gdGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwgd2UncmUgbGlrZWx5IHRv
CisgICAgLy8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGF0IGFyb3VuZCB0aGUgc2FtZSB0aW1l
IHdlJ2QgZXhwZWN0IHRoZSBuZXh0CisgICAgLy8gaW5jcmVtZW50IHRvIG9jY3VyIC0tIGJhZCBi
ZWNhdXNlIGl0IGxlYWRzIHRvIGhpdGNoaW5nIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgIC8vIChp
ZiBhdXRvc2Nyb2xsLWJhc2VkIHJlcXVlc3RzIGRpZG4ndCByZXN1bHQgaW4gYSBzbWFsbCBhbW91
bnQgb2YgY29uc3RhbnQKKyAgICAvLyBsYWcpLiAgU28gaWYgd2UncmUgY2FsbGVkIGFnYWluIHdo
aWxlIGFscmVhZHkgYW5pbWF0aW5nLCB3ZSB3YW50IHRvIHRyaW0KKyAgICAvLyB0aGUgYW5pbWF0
aW9uU3RlcCBzbGlnaHRseSB0byBtYWludGFpbiBsYWcgbGlrZSB3aGF0J3MgZGVzY3JpYmVkIGFi
b3ZlLgorICAgIC8vIChJIHNheSAibWFpbnRhaW4iIHNpbmNlIHdlJ2xsIGFscmVhZHkgYmUgbGFn
Z2VkIGR1ZSB0byB0aGUgYWNjZWxlcmF0aW9uCisgICAgLy8gZHVyaW5nIHRoZSBmaXJzdCBzY3Jv
bGwgcGVyaW9kLikKKyAgICAvLworICAgIC8vIFJlbWVtYmVyIHRoYXQgdHJpbW1pbmcgd29uJ3Qg
Y2F1c2UgdXMgdG8gZmFsbCBzdGVhZGlseSBmdXJ0aGVyIGJlaGluZAorICAgIC8vIGhlcmUsIGJl
Y2F1c2UgdGhlIGZ1cnRoZXIgYmVoaW5kIHdlIGFyZSwgdGhlIGxhcmdlciB0aGUgYmFzZSBzdGVw
IHZhbHVlCisgICAgLy8gYWJvdmUuICBHaXZlbiB0aGUgc2Nyb2xsaW5nIGFsZ29yaXRobSBpbiBh
bmltYXRlU2Nyb2xsKCksIHRoZSBwcmFjdGljYWwKKyAgICAvLyBlZmZlY3Qgd2lsbCBhY3R1YWxs
eSBiZSB0aGF0LCBhc3N1bWluZyBhIGNvbnN0YW50IHRyaW0gZmFjdG9yLCB3ZSdsbCBsYWcKKyAg
ICAvLyBieSBhIGNvbnN0YW50IGFtb3VudCBkZXBlbmRpbmcgb24gdGhlIHJhdGUgYXQgd2hpY2gg
aW5jcmVtZW50cyBvY2N1cgorICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBhdXRvc2Nyb2xsIHRpbWVy
IGRlbGF5LiAgVGhlIGV4YWN0IGxhZyBpcyBnaXZlbiBieQorICAgIC8vICAgbGFnID0gfHN0ZXB8
ICogKChyIC8gaykgLSAxKQorICAgIC8vIFdoZXJlCisgICAgLy8gICByID0gVGhlIHJhdGlvIG9m
IHRoZSBhdXRvc2Nyb2xsIHJlcGVhdCBkZWxheSwKKyAgICAvLyAgICAgICBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSwgdG8gdGhlCisgICAgLy8g
ICAgICAga2V5L3doZWVsIHJlcGVhdCBkZWxheSAoaS5lLiA+IDEgd2hlbiBrZXlzIHJlcGVhdCBm
YXN0ZXIpCisgICAgLy8gICBrID0gVGhlIHZlbG9jaXR5IHRyaW0gY29uc3RhbnQgZ2l2ZW4gYmVs
b3cKKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8gY2hvb3NlIHRoZSB0cmltIGZhY3RvciBzdWNo
IHRoYXQgZm9yIGNhbGxzIHRoYXQgY29tZSBhdCB0aGUKKyAgICAvLyBhdXRvc2Nyb2xsIHRpbWVy
IHJhdGUsIHdlJ2xsIHdpbmQgdXAgd2l0aCB0aGUgc2FtZSBsYWcgYXMgaW4gdGhlCisgICAgLy8g
InBlcmZlY3QiIGNhc2UgZGVzY3JpYmVkIGFib3ZlIChvciwgdG8gcHV0IGl0IGFub3RoZXIgd2F5
LCB3ZSdsbCBlbmQgdXAKKyAgICAvLyB3aXRoIHxhbmltYXRpb25TdGVwfCA9PSB8c3RlcHwgKiB8
bXVsdGlwbGllcnwgZGVzcGl0ZSB0aGUgYWN0dWFsIGRpc3RhbmNlCisgICAgLy8gY2FsY3VsYXRl
ZCBhYm92ZSBiZWluZyBsYXJnZXIgdGhhbiB0aGF0KS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gInBl
cmZlY3QiCisgICAgLy8gYmVoYXZpb3IgZm9yIGF1dG9zY3JvbGxpbmcgd2l0aG91dCBoYXZpbmcg
dG8gc3BlY2lhbC1jYXNlIGl0LgorICAgIGlmIChhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBh
bmltYXRpb25TdGVwIC89ICgyLjAgLSAoKDEuMCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKSAqICgwLjUgKiBhY2NlbGVyYXRpb25UaW1lKCkg
KyBhbmltYXRpb25UaW1lckRlbGF5KSkpOworICAgIC8vIFRoZSByZXN1bHQgb2YgYWxsIHRoaXMg
aXMgdGhhdCBzaW5nbGUga2V5cHJlc3NlcyBvciB3aGVlbCBmbGlja3Mgd2lsbAorICAgIC8vIHNj
cm9sbCBpbiB0aGUgc2FtZSB0aW1lIHBlcmlvZCBhcyBzaW5nbGUgcHJlc3NlcyBvZiBzY3JvbGxi
YXIgZWxlbWVudHM7CisgICAgLy8gaG9sZGluZyB0aGUgbW91c2UgZG93biBvbiBhIHNjcm9sbGJh
ciBwYXJ0IHdpbGwgc2Nyb2xsIGFzIGZhc3QgYXMKKyAgICAvLyBwb3NzaWJsZSB3aXRob3V0IGhp
dGNoaW5nOyBhbmQgb3RoZXIgcmVwZWF0ZWQgc2Nyb2xsIGV2ZW50cyB3aWxsIGFsc28KKyAgICAv
LyBzY3JvbGwgd2l0aCB0aGUgc2FtZSB0aW1lIGxhZyBhcyBob2xkaW5nIGRvd24gdGhlIG1vdXNl
IG9uIGEgc2Nyb2xsYmFyCisgICAgLy8gcGFydC4KKyAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0
eSA9IGFuaW1hdGlvblN0ZXAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Nj
cm9sbFRpbWVyRGVsYXkoKTsKKworICAgIC8vIElmIHdlJ3JlIG5vdCBhbHJlYWR5IHNjcm9sbGlu
Zywgc3RhcnQuCisgICAgaWYgKCFhbHJlYWR5QW5pbWF0aW5nKQorICAgICAgICBhbmltYXRlU2Ny
b2xsKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2lu
OjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBQZXJBeGlzRGF0YSogZGF0YSA9IChvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hvcml6b250YWxEYXRhIDogJm1f
dmVydGljYWxEYXRhOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKGRhdGEpOworICAg
ICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7CisgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gcG9z
OworICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBkYXRhLT5tX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7Cit9CisKKy8vIHN0YXRpYworZG91YmxlIFNjcm9sbEFuaW1hdG9yV2luOjph
Y2NlbGVyYXRpb25UaW1lKCkKK3sKKyAgICAvLyBXZSBlbGVjdCB0byB1c2UgU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgYXMKKyAgICAvLyB0aGUg
bGVuZ3RoIG9mIHRpbWUgd2UnbGwgdGFrZSB0byBhY2NlbGVyYXRlIGZyb20gMCB0byBvdXIgdGFy
Z2V0CisgICAgLy8gdmVsb2NpdHkuICBDaG9vc2luZyBhIGxhcmdlciB2YWx1ZSB3b3VsZCBwcm9k
dWNlIGEgbW9yZSBwcm9ub3VuY2VkCisgICAgLy8gYWNjZWxlcmF0aW9uIGVmZmVjdC4KKyAgICBy
ZXR1cm4gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JXaW4+KiB0aW1lcikKK3sKKyAgICBhbmltYXRlU2Nyb2xsKCh0aW1l
ciA9PSAmbV9ob3Jpem9udGFsRGF0YS5tX2FuaW1hdGlvblRpbWVyKSA/ICZtX2hvcml6b250YWxE
YXRhIDogJm1fdmVydGljYWxEYXRhKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c3Rv
cEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgaWYgKGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGF0YS0+bV9hbmltYXRp
b25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3Jv
bGwoUGVyQXhpc0RhdGEqIGRhdGEpCit7CisgICAgLy8gTm90ZSBvbiBzbW9vdGggc2Nyb2xsaW5n
IHBlcmYgdmVyc3VzIG5vbi1zbW9vdGggc2Nyb2xsaW5nIHBlcmY6CisgICAgLy8gVGhlIHRvdGFs
IHRpbWUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIHNjcm9sbCBpcyBnaXZlbiBieQorICAgIC8vICAg
dCA9IHQwICsgMC41dEEgLSB0RCArIHRTCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHQwID0gVGhl
IHRpbWUgdG8gcGVyZm9ybSB0aGUgc2Nyb2xsIHdpdGhvdXQgc21vb3RoIHNjcm9sbGluZworICAg
IC8vICAgdEEgPSBUaGUgYWNjZWxlcmF0aW9uIHRpbWUsCisgICAgLy8gICAgICAgIFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIChzZWUgYmVsb3cp
CisgICAgLy8gICB0RCA9IHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vICAgdFMgPSBBIHZh
bHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZSByZXF1aXJlZCB0byBwZXJmb3JtIGEK
KyAgICAvLyAgICAgICAgc2luZ2xlIHNjcm9sbCBpbmNyZW1lbnQsIGkuZS4gdGhlIHdvcmsgZG9u
ZSBkdWUgdG8gY2FsbGluZworICAgIC8vICAgICAgICBjbGllbnQoKS0+dmFsdWVDaGFuZ2VkKCkg
KH4wIGZvciBzaW1wbGUgcGFnZXMsIGxhcmdlciBmb3IgY29tcGxleAorICAgIC8vICAgICAgICBw
YWdlcykuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHRBIGFuZCB0RCBhcmUgZmFpcmx5IHNtYWxs
LCB0aGUgdG90YWwgbGFnIChhcyB1c2VycyBwZXJjZWl2ZSBpdCkKKyAgICAvLyBpcyBuZWdsaWdp
YmxlIGZvciBzaW1wbGUgcGFnZXMgYW5kIHJvdWdobHkgdFMgZm9yIGNvbXBsZXggcGFnZXMuICBX
aXRob3V0CisgICAgLy8ga25vd2luZyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0UyBpcyBpdCdzIGhh
cmQgdG8gZG8gYmV0dGVyIHRoYW4gdGhpcy4KKyAgICAvLyBQZXJoYXBzIHdlIGNvdWxkIHRyeSB0
byByZW1lbWJlciBwcmV2aW91cyB2YWx1ZXMgYW5kIGZvcndhcmQtY29tcGVuc2F0ZS4KKworCisg
ICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUg
dGltZSBpdCdzIGJlZW4gc2luY2UKKyAgICAvLyBvdXIgbGFzdCB1cGRhdGUuICBUaGlzIG1heSBi
ZSBsb25nZXIgdGhhbiBvdXIgaWRlYWwgdGltZSwgZXNwZWNpYWxseSBpZgorICAgIC8vIHRoZSBw
YWdlIGlzIGNvbXBsZXggb3IgdGhlIHN5c3RlbSBpcyBzbG93LgorICAgIC8vCisgICAgLy8gVG8g
YXZvaWQgZmVlbGluZyBsYWdneSwgaWYgd2UndmUganVzdCBzdGFydGVkIHNtb290aCBzY3JvbGxp
bmcgd2UgcHJldGVuZAorICAgIC8vIHdlJ3ZlIGFscmVhZHkgYWNjZWxlcmF0ZWQgZm9yIG9uZSBp
ZGVhbCBpbnRlcnZhbCwgc28gdGhhdCB3ZSdsbCBzY3JvbGwgYXQKKyAgICAvLyBsZWFzdCBzb21l
IGRpc3RhbmNlIGltbWVkaWF0ZWx5LgorICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBk
YXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA/IChXVEY6OmN1cnJlbnRUaW1lKCkgLSBkYXRhLT5tX2xh
c3RBbmltYXRpb25UaW1lKSA6IGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICAvLyBGaWd1cmUg
b3V0IGhvdyBmYXIgd2UndmUgYWN0dWFsbHkgdHJhdmVsZWQgYW5kIHVwZGF0ZSBvdXIgY3VycmVu
dAorICAgIC8vIHZlbG9jaXR5LgorICAgIGZsb2F0IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgaWYg
KGRhdGEtPm1fY3VycmVudFZlbG9jaXR5IDwgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAg
ICAgICAgLy8gV2UgYWNjZWxlcmF0ZSBhdCBhIGNvbnN0YW50IHJhdGUgdW50aWwgd2UgcmVhY2gg
dGhlIGRlc2lyZWQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IGFjY2VsZXJhdGlvblJhdGUgPSBk
YXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAvIGFjY2VsZXJhdGlvblRpbWUoKTsKKworICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoZXRoZXIgY29udGFudCBhY2NlbGVyYXRpb24gaGFzIGNhdXNlZCB1cyB0
byByZWFjaCBvdXIKKyAgICAgICAgLy8gdGFyZ2V0IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBw
b3RlbnRpYWxWZWxvY2l0eUNoYW5nZSA9IGFjY2VsZXJhdGlvblJhdGUgKiBsYXN0U2Nyb2xsSW50
ZXJ2YWw7CisgICAgICAgIGZsb2F0IHBvdGVudGlhbE5ld1ZlbG9jaXR5ID0gZGF0YS0+bV9jdXJy
ZW50VmVsb2NpdHkgKyBwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZTsKKyAgICAgICAgaWYgKHBvdGVu
dGlhbE5ld1ZlbG9jaXR5ID4gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkpIHsKKyAgICAgICAgICAg
IC8vIFdlIHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSBhdCBzb21lIHBvaW50IGJldHdlZW4g
b3VyIGxhc3QKKyAgICAgICAgICAgIC8vIHVwZGF0ZSBhbmQgbm93LiAgVGhlIGRpc3RhbmNlIHRy
YXZlbGVkIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3bworICAgICAgICAgICAgLy8gcGllY2VzOiB0
aGUgZGlzdGFuY2UgdHJhdmVsZWQgd2hpbGUgYWNjZWxlcmF0aW5nLCBhbmQgdGhlCisgICAgICAg
ICAgICAvLyBkaXN0YW5jZSB0cmF2ZWxlZCBhZnRlciByZWFjaGluZyB0aGUgdGFyZ2V0IHZlbG9j
aXR5LgorICAgICAgICAgICAgZmxvYXQgYWN0dWFsVmVsb2NpdHlDaGFuZ2UgPSBkYXRhLT5tX2Rl
c2lyZWRWZWxvY2l0eSAtIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5OworICAgICAgICAgICAgZmxv
YXQgYWNjZWxlcmF0aW9uSW50ZXJ2YWwgPSBhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIGFjY2VsZXJh
dGlvblJhdGU7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgdW5kZXIgY29u
c3RhbnQgYWNjZWxlcmF0aW9uIGlzIHRoZSBhcmVhCisgICAgICAgICAgICAvLyB1bmRlciBhIGxp
bmUgc2VnbWVudCB3aXRoIGEgY29uc3RhbnQgcmlzaW5nIHNsb3BlLiAgQnJlYWsgdGhpcworICAg
ICAgICAgICAgLy8gaW50byBhIHRyaWFuZ3VsYXIgcG9ydGlvbiBhdG9wIGEgcmVjdGFuZ3VsYXIg
cG9ydGlvbiBhbmQgc3VtLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9ICgoZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgKyAoYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBhY2NlbGVy
YXRpb25JbnRlcnZhbCk7CisgICAgICAgICAgICAvLyBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYXQg
dGhlIHRhcmdldCB2ZWxvY2l0eSBpcyBzaW1wbHkKKyAgICAgICAgICAgIC8vICh0YXJnZXQgdmVs
b2NpdHkpICogKHJlbWFpbmluZyB0aW1lIGFmdGVyIGFjY2VsZXJhdGluZykuCisgICAgICAgICAg
ICBkaXN0YW5jZVRyYXZlbGVkICs9IChkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSAqIChsYXN0U2Ny
b2xsSW50ZXJ2YWwgLSBhY2NlbGVyYXRpb25JbnRlcnZhbCkpOworICAgICAgICAgICAgZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIENvbnN0YW50IGFjY2VsZXJhdGlvbiB0aHJvdWdoIHRoZSBl
bnRpcmUgdGltZSBpbnRlcnZhbC4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoZGF0
YS0+bV9jdXJyZW50VmVsb2NpdHkgKyAocG90ZW50aWFsVmVsb2NpdHlDaGFuZ2UgLyAyKSkgKiBs
YXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9
IHBvdGVudGlhbE5ld1ZlbG9jaXR5OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSByZWFjaGVkIHRoZSB0YXJnZXQgdmVsb2NpdHksIHNvIHRoZSBkaXN0
YW5jZSB3ZSd2ZQorICAgICAgICAvLyB0cmF2ZWxlZCBpcyBzaW1wbHkgKGN1cnJlbnQgdmVsb2Np
dHkpICogKGVsYXBzZWQgdGltZSkuCisgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSBkYXRhLT5t
X2N1cnJlbnRWZWxvY2l0eSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAgICAgLy8gSWYgb3Vy
IGRlc2lyZWQgdmVsb2NpdHkgaGFzIGRlY3JlYXNlZCwgZHJvcCB0aGUgY3VycmVudCB2ZWxvY2l0
eSB0b28uCisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVk
VmVsb2NpdHk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9u
IGJhc2VkIG9uIHRoZSBkaXN0YW5jZSB0cmF2ZWxlZC4KKyAgICBpZiAoZGlzdGFuY2VUcmF2ZWxl
ZCA+PSBhYnMoZGF0YS0+bV9kZXNpcmVkUG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcykpIHsKKyAg
ICAgICAgLy8gV2UndmUgdHJhdmVsZWQgZmFyIGVub3VnaCB0byByZWFjaCB0aGUgZGVzaXJlZCBw
b3NpdGlvbi4gIFN0b3Agc21vb3RoCisgICAgICAgIC8vIHNjcm9sbGluZy4KKyAgICAgICAgKmRh
dGEtPm1fY3VycmVudFBvcyA9IGRhdGEtPm1fZGVzaXJlZFBvczsKKyAgICAgICAgZGF0YS0+bV9j
dXJyZW50VmVsb2NpdHkgPSAwOworICAgICAgICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHlldCBhdCB0aGUgdGFyZ2V0IHBvc2l0aW9u
LiAgVHJhdmVsIHRvd2FyZHMgaXQgYW5kIHNldCB1cCB0aGUKKyAgICAgICAgLy8gbmV4dCB1cGRh
dGUuCisgICAgICAgIGlmICgqZGF0YS0+bV9jdXJyZW50UG9zID4gZGF0YS0+bV9kZXNpcmVkUG9z
KQorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IC1kaXN0YW5jZVRyYXZlbGVkOworICAg
ICAgICAqZGF0YS0+bV9jdXJyZW50UG9zICs9IGRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgIGRh
dGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1hdGlvblRpbWVyRGVsYXkpOwor
ICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwor
ICAgIH0KKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2lu
dCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsICptX3ZlcnRpY2FsRGF0YS5tX2N1cnJl
bnRQb3MpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1h
dG9yV2luX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JXaW5faAorCisjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbEFuaW1hdG9yV2luIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1Ymxp
YzoKKyAgICBTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IH5TY3JvbGxBbmltYXRvcldpbigpOworCisgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRp
cGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
UGVyQXhpc0RhdGEgeworICAgICAgICBQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFy
ZW50LCBmbG9hdCogY3VycmVudFBvcyk7CisKKyAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvczsK
KyAgICAgICAgZmxvYXQgbV9kZXNpcmVkUG9zOworICAgICAgICBmbG9hdCBtX2N1cnJlbnRWZWxv
Y2l0eTsKKyAgICAgICAgZmxvYXQgbV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIGRvdWJsZSBt
X2xhc3RBbmltYXRpb25UaW1lOworICAgICAgICBUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4gbV9h
bmltYXRpb25UaW1lcjsKKyAgICB9OworCisgICAgc3RhdGljIGRvdWJsZSBhY2NlbGVyYXRpb25U
aW1lKCk7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRlbGF5OworCisg
ICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiopOwor
ICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoUGVyQXhpc0RhdGEqKTsKKyAgICB2
b2lkIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEqKTsKKworICAgIFBlckF4aXNEYXRhIG1faG9y
aXpvbnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Cit9OworCit9Cisj
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JXaW4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3MywyMCBAQCBJbnRQ
b2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpCiAgICAgcmV0dXJuIEludFBvaW50
KG1heGltdW1PZmZzZXQud2lkdGgoKSwgbWF4aW11bU9mZnNldC5oZWlnaHQoKSk7CiB9CiAKK2lu
dCBTY3JvbGxWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxT
Y3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFNjcm9s
bFZpZXc6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNl
dCkKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5p
bWF0b3IpOworfQorCiB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbGJhcikKIHsKICAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KQEAgLTQ0
MSw3ICs0NTUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
dHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCksIFNj
cm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFy
c1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAgLTQ2Myw3ICs0NzcsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QKICAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CiAg
ICAgfQpAQCAtNjczLDcgKzY4NywxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlCiAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAgICAgICAgICAgICAgICAgZGVs
dGFZID0gLWRlbHRhWTsKICAgICAgICAgfQotICAgICAgICBzY3JvbGxCeShJbnRTaXplKC1kZWx0
YVgsIC1kZWx0YVkpKTsKKworICAgICAgICAvLyBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIHNjcm9s
bEJ5KCkgaWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIGZvciBhIG5vbi16ZXJvIGRlbHRhPworICAg
ICAgICBpZiAoZGVsdGFZICYmIG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7
CisgICAgICAgIGlmIChkZWx0YVkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhl
bCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lv
biA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw5IEBAIGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJs
aWMKIHB1YmxpYzoKICAgICB+U2Nyb2xsVmlldygpOwogCi0gICAgLy8gU2Nyb2xsYmFyQ2xpZW50
IGZ1bmN0aW9uLiBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCisgICAgLy8gU2Nyb2xs
YmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7CiAgICAgCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4g
VGhlIFNjcm9sbFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0
aGUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTIgKzEwMSwx
MiBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3Jv
bGxiYXIodGhpcyk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdikKK2Jvb2wg
U2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdiwgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKICAgICB2
ID0gbWF4KG1pbih2LCBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKICAgICBpZiAo
dmFsdWUoKSA9PSB2KQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQg
dGhlIHNhbWUuCi0gICAgc2V0Q3VycmVudFBvcyh2KTsKKyAgICBzZXRDdXJyZW50UG9zKHYsIHNv
dXJjZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Miw5ICsxNDIsNiBAQCBib29sIFNj
cm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogI2VuZGlmCiAKLSAgICAv
LyBJZ25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgotICAgIGlmICgobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0
aW9uID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8IGRpcmVjdGlv
biA9PSBTY3JvbGxSaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmbG9hdCBzdGVw
ID0gMDsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CiAgICAgY2FzZSBTY3JvbGxCeUxpbmU6
ICAgICBzdGVwID0gbV9saW5lU3RlcDsgIGJyZWFrOwpAQCAtMTU0LDggKzE1MSwxMCBAQCBib29s
IFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogICAgIGlmIChkaXJl
Y3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCiAgICAgICAgIG11
bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIHJldHVy
biBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0
aXBsaWVyKTsKIAotICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9z
ICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0g
bV92aXNpYmxlU2l6ZSkpLCAwLjBmKSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1p
bihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0
b3IpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpAQCAtMjg3LDExICsyODYs
MTQgQEAgdm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQogICAgIGVsc2UgaWYgKGRl
bHRhIDwgMCkKICAgICAgICAgZGVsdGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7CiAgICAgaWYg
KGRlbHRhKQotICAgICAgICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBv
cyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7CisgICAgICAg
IHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4
aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwog
fQogCi1ib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9s
bGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7Cisg
ICAgaWYgKChzb3VyY2UgIT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0
aW9uLCBwb3MpOworCiAgICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzM2LDcgKzMzOCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVk
KGNvbnN0IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
ICAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpCi0gICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAg
ICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250
YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2
aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0MiwxMSBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiAKIGNsYXNz
IFNjcm9sbGJhciA6IHB1YmxpYyBXaWRnZXQgewogcHVibGljOgorICAgIGVudW0gU2Nyb2xsU291
cmNlIHsKKyAgICAgICAgRnJvbVNjcm9sbEFuaW1hdG9yLAorICAgICAgICBOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IsCisgICAgfTsKKwogICAgIHZpcnR1YWwgflNjcm9sbGJhcigpOwogCiAgICAgLy8g
TXVzdCBiZSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNlIHRo
ZSBTY3JvbGxiYXIgYmFzZSBjbGFzcy4gIFJpZ2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0aGF0
IGlzIG5vdCB1c2luZyB0aGUgYmFzZSBjbGFzcyBpcyBHVEsuCkBAIC03NSw3ICs4MCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAK
ICAgICB2b2lkIHNldFN0ZXBzKGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxz
UGVyU3RlcCA9IDEpOwotICAgIGJvb2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVl
KGludCwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2
aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBw
KSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIApAQCAtMTY3LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CisgICAgYm9vbCBz
ZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworU2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQoKQorICAgIDogbV9zY3JvbGxBbmlt
YXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKQoreworfQorCitTY3JvbGxiYXJDbGll
bnQ6On5TY3JvbGxiYXJDbGllbnQoKQoreworfQorCitib29sIFNjcm9sbGJhckNsaWVudDo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3sKKyAgICBtX3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BB
bmltYXRpb24ob3JpZW50YXRpb24sIHBvcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjEgKzI2LDI4IEBACiAj
aWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CisKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CisgICAgU2Nyb2xsYmFyQ2xpZW50KCk7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpOwogCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKLSAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CkBA
IC01MiwyMSArNTksMjEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxiYXJSZWN0KTsKICAgICB9
Ci0gICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50
UmVjdCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29u
dmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKICAgICB9Ci0gICAgCiAgICAgdmly
dHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoc2Nyb2xsYmFyUG9pbnQpOwogICAgIH0KLSAgICAKICAgICB2aXJ0dWFsIElu
dFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KHBhcmVudFBvaW50KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJHdGsuY3BwCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCB2
b2lkIFNjcm9sbGJhckd0azo6c2V0RnJhbWVSZWN0KGNvbnN0IEluCiAKIHZvaWQgU2Nyb2xsYmFy
R3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFNjcm9sbGJhckd0ayogdGhhdCkK
IHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKSk7CisgICAgdGhhdC0+c2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSks
IE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyR3RrOjpzZXRFbmFi
bGVkKGJvb2wgc2hvdWxkRW5hYmxlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxi
YXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5j
cHAJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3NiwxMSBAQCBib29sIFNjcm9sbGJhcjo6Y29u
dGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgICAgIGNvbnN0IFFQb2ludCBwb3MgPSBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZlbnQucG9zKCkpOwogICAgICAgICBtb3ZlVGh1bWIoaG9y
aXpvbnRhbCA/IHBvcy54KCkgOiBwb3MueSgpKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvblNlbGVj
dGVkID09IGFjdFNjcm9sbFRvcCkKLSAgICAgICAgc2V0VmFsdWUoMCk7CisgICAgICAgIHNjcm9s
bChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsK
ICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAg
IHNldFZhbHVlKG1heGltdW0oKSk7CisgICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xs
UmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rp
b25TZWxlY3RlZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Ny
b2xsTGVmdDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIHNjcm9sbChob3Jpem9u
dGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYg
KGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQogICAgICAgICBzY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlm
IChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxVcCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDE3IEBAIHZv
aWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JgogICAgICAgICA6OlJlbGVhc2VE
QyhtX3BvcHVwLCBsb2NhbERDKTsKIH0KIAoraW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChv
cmllbnRhdGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Nj
cm9sbGJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwor
fQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9z
Y3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1h
dG9yKTsKK30KKwogdm9pZCBQb3B1cE1lbnVXaW46OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNj
cm9sbEJhcikKIHsKICAgICBBU1NFUlQobV9zY3JvbGxiYXIpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmgJKHJldmlzaW9uIDY2NTU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKGJvb2wgYikgeyBtX3Njcm9s
bGJhckNhcHR1cmluZ01vdXNlID0gYjsgfQogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50CisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciop
OwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAkocmV2aXNp
b24gNjY1NTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MCw2ICsxNzAsMTcgQEAgdm9pZCBSZW5kZXJEYXRhR3JpZDo6cGFpbnRD
b2x1bW5IZWFkZXIoRAogfQogCiAvLyBTY3JvbGxpbmcgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25z
CitpbnQgUmVuZGVyRGF0YUdyaWQ6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxs
U2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZp
c2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlmIChtX3ZC
YXIpCisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9t
U2Nyb2xsQW5pbWF0b3IpOworfQorCiB2b2lkIFJlbmRlckRhdGFHcmlkOjp2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEYXRhR3JpZC5oCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0
ZToKICAgICBIVE1MRGF0YUdyaWRFbGVtZW50KiBncmlkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxEYXRhR3JpZEVsZW1lbnQqPihub2RlKCkpOyB9CiAKICAgICAvLyBT
Y3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNjMsOSArMTM2Myw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFRvT2Zmc2V0KGludCB4LAogCiAgICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKICAgICAg
ICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNl
dCgpKTsKKyAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBTY3Jv
bGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgICAgIGlmIChtX3ZCYXIpCi0gICAg
ICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSk7CisgICAgICAgICAgICBtX3ZCYXIt
PnNldFZhbHVlKG1fc2Nyb2xsWSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwog
ICAgIH0KIAogICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgpAQCAtMTYxOCw2
ICsxNjE4LDIwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU0KICAg
ICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhl
IHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBp
biB2aWV3LgogfQogCitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAo
KG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9oQmFyIDogbV92QmFyKS5n
ZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBz
Y3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgU2Nyb2xs
YmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJh
ci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOwor
fQorCiB2b2lkIFJlbmRlckxheWVyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICAv
LyBVcGRhdGUgc2Nyb2xsIHBvc2l0aW9uIGZyb20gc2Nyb2xsYmFycy4KQEAgLTIwNjgsNyArMjA4
Miw3IEBAIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAgICAg
Ly8gc28gdGhpcyBpcyBuZWVkZWQgdG8ga2VlcCBldmVyeXRoaW5nIHdvcmtpbmcgKHNlZSBob3cg
c2Nyb2xsWE9mZnNldCgpCiAgICAgICAgIC8vIGRpZmZlcnMgZnJvbSBzY3JvbGxZT2Zmc2V0KCkg
dG8gZ2V0IGFuIGlkZWEgb2Ygd2h5IHRoZSBob3Jpem9udGFsIGFuZAogICAgICAgICAvLyB2ZXJ0
aWNhbCBzY3JvbGxiYXJzIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseSkuCi0gICAgICAg
IG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpKTsKKyAgICAgICAgbV9oQmFyLT5zZXRW
YWx1ZShzY3JvbGxYT2Zmc2V0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsK
ICAgICB9CiAgICAgaWYgKG1fdkJhcikgewogICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gYm94
LT5jbGllbnRIZWlnaHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24g
NjY1NTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MTgsNiArNTE4LDggQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxv
d09ubHkoKSBjb25zdDsgCiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29u
c3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciop
OwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcg
KzUwMCw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW4KIAogICAg
IG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92
QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZSht
X2luZGV4T2Zmc2V0LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTUyMyw2ICs1MjMsMTcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2
YWx1ZUNoYW5nZWQodW5zaWduZQogICAgIGVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpOwogfQogCitpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgJiYgbV92QmFyKSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgp
IC0gbV92QmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyTGlzdEJveDo6
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQorewor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Ny
b2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworfQorCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZh
bHVlKCk7CkBAIC01NzgsNyArNTg5LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxU
b3AoaW50IG5ldwogICAgICAgICByZXR1cm47CiAgICAgbV9pbmRleE9mZnNldCA9IGluZGV4Owog
ICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgpOworICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKGluZGV4LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRv
cik7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDggQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFj
ZS4KKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgtMzEgIFBl
dGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29y
aywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xs
YmFySW1wbC5jcHA6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgQWxsb3cg
d2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xs
YmFySW1wbDo6c2V0TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBs
OjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bik6CisgICAgICAgIChXZWJL
aXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAg
ICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmg6IFBsdW1iIG5ldyBTY3JvbGxiYXJDbGllbnQg
ZnVuY3Rpb25zLgorICAgICAgICAqIHNyYy93aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwOiBV
cGRhdGUgY29tbWVudHMgbm93IHRoYXQgd2UgaGF2ZSBzbW9vdGggc2Nyb2xsaW5nLgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91c2VXaGVlbEV2ZW50KToKKwogMjAx
MC0wOC0yNCAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3Jv
bGxiYXJJbXBsLmNwcAkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNjcm9sbGJhckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIGludCBX
ZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6
c2V0VmFsdWUoaW50IHBvc2l0aW9uKQogewotICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShwb3Np
dGlvbik7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uLCBTY3JvbGxiYXI6Ok5v
dEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0RG9j
dW1lbnRTaXplKGludCBzaXplKQpAQCAtMjE4LDcgKzIxOCw3IEBAIGJvb2wgV2ViU2Nyb2xsYmFy
SW1wbDo6b25Nb3VzZVdoZWVsKGNvbnMKICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCiAg
ICAgICAgICAgICAgICAgICAgIGRlbHRhICo9IC0xOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG1fc2Nyb2xsYmFyLT52YWx1ZSgpIC0gZGVsdGEpOwor
ICAgICAgICAgICAgbV9zY3JvbGxiYXItPnNjcm9sbCgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29y
ZTo6U2Nyb2xsVXAsIFdlYkNvcmU6OlNjcm9sbEJ5UGl4ZWwsIGRlbHRhKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTI2Miw2ICsyNjIsMTYgQEAgYm9vbCBXZWJT
Y3JvbGxiYXJJbXBsOjpvbktleURvd24oY29uc3QgVwogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
aW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIChvcmllbnRhdGlvbiA9PSBt
X3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0g
bV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBvZmZzZXQpCit7CisgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKChtX3Njcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQu
eSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQgV2ViU2Nyb2xs
YmFySW1wbDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopCiB7CiAgICAgbV9jbGll
bnQtPnZhbHVlQ2hhbmdlZCh0aGlzKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xs
YmFySW1wbC5oCShyZXZpc2lvbiA2NjU1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Ny
b2xsYmFySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAK
ICAgICAvLyBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgbWV0aG9kcworICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChXZWJD
b3JlOjpTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy93
aW4vV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gNjY1NTUpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMyw2ICs0MDMsOSBAQCBXZWJNb3VzZVdoZWVsRXZlbnQgV2ViSW5wdXRFdmVu
dEZhY3Rvcnk6CiAgICAgLy8gc21vb3RoIHNjcm9sbGluZyB3aGlsZSBGaXJlZm94IGRvZXNuJ3Qs
IHNvIGl0IGNhbiBnZXQgYXdheSB3aXRoIHNvbWV3aGF0CiAgICAgLy8gbGFyZ2VyIHNjcm9sbCB2
YWx1ZXMgd2l0aG91dCBmZWVsaW5nIGFzIGplcmt5LiAgSGVyZSB3ZSB1c2UgMTAwIHB4IHBlcgog
ICAgIC8vIHRocmVlIGxpbmVzICh0aGUgZGVmYXVsdCBzY3JvbGwgYW1vdW50IGlzIHRocmVlIGxp
bmVzIHBlciB3aGVlbCB0aWNrKS4KKyAgICAvLyBFdmVuIHRob3VnaCB3ZSBoYXZlIHNtb290aCBz
Y3JvbGxpbmcsIHdlIGRvbid0IG1ha2UgdGhpcyBhcyBsYXJnZSBhcyBJRQorICAgIC8vIGJlY2F1
c2Ugc3ViamVjdGl2ZWx5IElFIGZlZWxzIGxpa2UgaXQgc2Nyb2xscyBmYXJ0aGVyIHRoYW4geW91
IHdhbnQgd2hpbGUKKyAgICAvLyByZWFkaW5nIGFydGljbGVzLgogICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gMTAwLjBmIC8gMy4wZjsKICAgICB3aGVlbERl
bHRhIC89IFdIRUVMX0RFTFRBOwogICAgIGZsb2F0IHNjcm9sbERlbHRhID0gd2hlZWxEZWx0YTsK
SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjY1NTUpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMzEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGlu
Z0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyMzU2CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJG
cmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUpOgorCiAyMDEwLTA4LTMxICBCZW5qYW1pbiBQb3VsYWlu
ICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiA2
NjU1NSkKKysrIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTI5LDcgKzkyOSw3IEBAIHZvaWQgUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1ZShRdDo6T3IK
ICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzY3JvbGxC
YXJNYXhpbXVtKG9yaWVudGF0aW9uKSkKICAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsQmFyTWF4
aW11bShvcmllbnRhdGlvbik7Ci0gICAgICAgIHNiLT5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAg
IHNiLT5zZXRWYWx1ZSh2YWx1ZSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwog
ICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66762</attachid>
            <date>2010-09-07 14:03:08 -0700</date>
            <delta_ts>2010-09-07 15:39:41 -0700</delta_ts>
            <desc>patch v5.8</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>70975</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2ODk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDkt
MDcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IERhdmUgSHlhdHQuCisKKyAgICAgICAgQWRkIHNtb290aCBzY3JvbGxpbmcgZnJhbWV3
b3JrLCBhbmQgYSBXaW5kb3dzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzNTYKKworICAgICAgICAqIHdzY3JpcHQ6IEFk
ZCBXaW5kb3dzIFNjcm9sbEFuaW1hdG9yLgorCiAyMDEwLTA5LTA3ICBBcm5vIFJlbmV2aWVyICA8
YXJub0ByZW5ldmllci5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVy
LgpJbmRleDogd3NjcmlwdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3c2NyaXB0CShyZXZpc2lvbiA2Njg5NykK
KysrIHdzY3JpcHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgaWYgYnVpbGRfcG9y
dCA9PSAid3giOgogICAgICAgICB3ZWJjb3JlX3NvdXJjZXNbJ3d4LXdpbiddID0gWwogICAgICAg
ICAgICAgICAgJ1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q2Fpcm9XaW4uY3BwJywKICAgICAgICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAnLAorICAgICAgICAgICAgICAgJ1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAgICAn
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAg
ICAjIHd4VGltZXIgb24gV2luZG93cyBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gZWF0IGNy
YXNoZXMgaW4gY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdXNlIHRo
ZSBXaW4gcG9ydCdzIGltcGxlbWVudGF0aW9uIHVudGlsIHRoZSB3eCBidWcgZml4IGlzCiAgICAg
ICAgICAgICAgICAjIHdpZGVseSBhdmFpbGFibGUgKGl0IHdhcyBmaXhlZCBpbiAyLjguMTApLgpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw4MiBAQAorMjAxMC0wOS0wNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KKworICAgICAgICBBZGQg
c21vb3RoIHNjcm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1Ngor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwOiBBZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnBybzog
QWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuY3BwOiBBZGRlZCBiYXNlIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBubyBh
bmltYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDogQWRkZWQgYmFzZSBpbXBsZW1lbnRh
dGlvbiB0aGF0IGRvZXMgbm8gYW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3I6OlNjcm9sbEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Ojp+U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2lu
LmNwcDogQWRkZWQgV2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OlNjcm9sbEFuaW1hdG9yV2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjp+U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGlt
ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0
ZVNjcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaDogQWRkZWQg
V2luZG93cyBzdWJjbGFzcyB0aGF0IGFuaW1hdGVzIHNjcm9sbHMuCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHA6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9u
cy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8gYmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3OjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3
aGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6IEltcGxlbWVudCBu
ZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwOiBBbGxvdyBTY3JvbGxBbmltYXRvciB0byBoYW5kbGUgc2Nyb2xscyBpZiBwcmVzZW50
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dmVUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3Bw
OiBBZGRlZCB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSBTY3JvbGxBbmltYXRvci5oIG5vbi1wcml2
YXRlLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDogQWRkIGhvb2tzIGZvciBT
Y3JvbGxBbmltYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhckNsaWVudDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcDoKKyAgICAgICAgKE1h
aW5GcmFtZVNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JvbGxiYXJRdC5jcHA6IFVzZSBzY3JvbGwoKSBpbiBwcmVmZXJlbmNlIHRvIHNldFZh
bHVlKCkuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRNZW51KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxi
YXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3Jv
bGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oOiBJ
bXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckRhdGFHcmlkLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNjcm9sbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGF0YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5j
dGlvbnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOiBJbXBsZW1lbnQg
bmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisK
IDIwMTAtMDktMDcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY2ODk3
KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsx
MTk4LDkgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL0xpbmtIYXNoLmNwcAog
ICAgIHBsYXRmb3JtL0xvZ2dpbmcuY3BwCiAgICAgcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5j
cHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKICAgICBwbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwCisgICAgcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAogICAgIHBsYXRmb3JtL1Nj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAogICAgIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCiAg
ICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2Njg5NykK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NDksNiArMTk0
OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnVT
dHlsZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIFwKQEAgLTE5NTYsNiArMTk1
OCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdp
c3RyeS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJUaGVtZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmNwcCBcCkBAIC0yNTY4LDYgKzI1NzEsOCBAQCBlbmRpZgogCiBpZiBUQVJHRVRf
V0lOMzIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvcldpbi5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCBcCiAJ
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAogCVdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAogCVdlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjY4OTcp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzE3MSw2ICszMTcx
LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vUG9wdXBNZW51U3R5bGUuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1NTTEtleUdlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xs
VHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL1Njcm9sbFZpZXcuaCcsCkBAIC0zMTc4LDYgKzMxODIsNyBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL1Njcm9sbGJhci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhci5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Ny
b2xsYmFyVGhlbWUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC05NTcsNyArOTU3LDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgXAogICAgIHBsYXRmb3JtL3Rl
eHQvUmVndWxhckV4cHJlc3Npb24uY3BwIFwKICAgICBwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5j
cHAgXAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBcCiAgICAgcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcCBcCisgICAgcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcCBcCiAgICAgcGxh
dGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwIFwKQEAgLTE3
ODcsNyArMTc4OSw5IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVPcHRp
b25XZWJDb21ib0JveC5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAogICAg
IHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaCBcCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyLmggXAorICAgIHBsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIFwK
ICAgICBwbGF0Zm9ybS9TY3JvbGxWaWV3LmggXAogICAgIHBsYXRmb3JtL1NlYXJjaFBvcHVwTWVu
dS5oIFwKQEAgLTIzNDcsOCArMjM1MSwxMiBAQCBtYWVtbzUgewogfQogCiAKLSAgICB3aW4zMi0q
fHdpbmNlKjogU09VUkNFUyArPSBwbGF0Zm9ybS93aW4vU3lzdGVtVGltZVdpbi5jcHAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zv
cm1hdGlvbk1hdHJpeFdpbi5jcHAKKyAgICB3aW4zMi0qfHdpbmNlKiB7CisgICAgICAgIEhFQURF
UlMgKz0gcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAorICAgICAgICBTT1VSQ0VTICs9IHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcCBcCisgICAgICAgICAgICAgICAgICAgcGxhdGZv
cm0vd2luL1N5c3RlbVRpbWVXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCisgICAgfQogCiAgICAgbWFj
IHsKICAgICAgICAgU09VUkNFUyArPSBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJl
dmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI3OSw2ICsxMjc5LDggQEAKICAgICAgICAgICAnc291cmNlcy8nOiBbCiAg
ICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnUG9zaXhcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2lu
Y2x1ZGUnLCAnL29wZW50eXBlLyddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJy9TY3JvbGxB
bmltYXRvcldpblxcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICcvU2Nyb2xsQW5p
bWF0b3JXaW5cXC5oJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9Ta2lhRm9udFdpblxc
LmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICcvVHJhbnNwYXJlbmN5V2luXFwuY3Bw
JCddLAogICAgICAgICAgIF0sCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQyNjksNiArMjQyNjksMjIgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xs
QW5pbWF0b3IuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3IuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1h
dG9yV2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbEFuaW1hdG9yV2luLmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXIu
Y3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTI0Mjc3LDYgKzI0MjkzLDEwIEBACiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XFNjcm9sbGJhckNsaWVudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuaCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDgzNiw3ICs0ODM2LDggQEAKIAkJQkM5OTgx
MkUwREJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk5ODEyRDBEQkU4MDdBMDA4Q0U5
RUYgLyogRE9NQWJzdHJhY3RWaWV3RnJhbWUuaCAqLzsgfTsKIAkJQkM5QUREMjMwQ0M0MDMyNjAw
MDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCQzlBREQ4MDBDQzQwOTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM5QUREN0YwQ0M0MDkyMjAwMDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
LmNwcCAqLzsgfTsKLQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QkM2
NEQwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0
OSAvKiBTY3JvbGxiYXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM5QkM2NEIwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVu
dC5jcHAgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QkM2NEMwRTdDNDg4OTAwOEI5
ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUJDQTE2OUEyMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25F
bGVtZW50LmNwcCAqLzsgfTsKIAkJQkNBMTY5QTMwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDQTE2OUExMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25F
bGVtZW50LmggKi87IH07CiAJCUJDQTJCMDYxMTA1MDQ3NjAwMDQzQkQxQyAvKiBVc2VyU2NyaXB0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EyQjA2
MDEwNTA0NzVGMDA0M0JEMUMgLyogVXNlclNjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MTI2LDYgKzUxMjcsOCBAQAogCQlDNUVCREQ4
NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4
MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgy
RTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8q
IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAw
QjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBN
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovOyB9OworCQlDQTNCRjY3QzEwRDk5QkFFMDBF
NkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1h
dG9yLmNwcCAqLzsgfTsKKwkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1h
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNC
RjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLzsgfTsKIAkJQ0UwMkYw
QzQxMUU4M0FERDAwQzY2ODRBIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTAyRjBDMzExRTgzQUREMDBDNjY4
NEEgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDRTA1N0ZBNTEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFMDU3RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwICovOyB9OwogCQlDRTA1N0ZBNjEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRTA1N0ZBNDEyMjA3MzExMDBBNDc2RDUgLyogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTEwNjMxLDcgKzEwNjM0LDggQEAKIAkJQkM5OTgxMkQwREJFODA3QTAwOENFOUVGIC8qIERP
TUFic3RyYWN0Vmlld0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TUFic3RyYWN0Vmlld0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUFE
RDIyMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5QUREN0YwQ0M0MDkyMjAwMDk4QzRDIC8qIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3Jv
bGxiYXJDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ny
b2xsYmFyQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5QkM2NEMw
RTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ExNjlB
MTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EyQjA2MDEwNTA0NzVGMDA0M0JEMUMgLyog
VXNlclNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyU2NyaXB0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDk1MCw2ICsxMDk1NCw4IEBACiAJ
CUM1RUJERDgxMTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8q
IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQTNCRjY3QjEw
RDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDQTNCRjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q0RTBBRkExMUY3QkMyNzAwOUQzODExIC8qIGZ1bGxz
Y3JlZW4uY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBmdWxsc2NyZWVuLmNzczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UwMkYwQzMxMUU4M0FERDAwQzY2ODRBIC8qIFNj
cmlwdENvbnRyb2xsZXJCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdENvbnRyb2xsZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMDU3
RkEzMTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzE3LDggKzE2NzIzLDExIEBA
CiAJCQkJMUM2M0EyNDYwRjcxNjQ2NjAwQzA5RDVBIC8qIFJ1bkxvb3BUaW1lci5oICovLAogCQkJ
CTUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8sCiAJCQkJ
NTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi8sCisJCQkJQ0Ez
QkY2N0IxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLywKKwkJCQlDQTNC
RjY3RDEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLywKIAkJCQlCQzdCMkFG
ODA0NTA4MjQxMDBBODAwMEYgLyogU2Nyb2xsYmFyLmggKi8sCi0JCQkJQkM5QkM2NEQwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovLAorCQkJCUJDOUJDNjRCMEU3QzQ4ODkw
MDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuY3BwICovLAorCQkJCUJDOUJDNjRDMEU3QzQ4ODkw
MDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBB
QjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3
MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICovLAogCQkJCUJDMTQwMjg5MEU4MzY4
MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovLApAQCAtMTk4MDksNiAr
MTk4MTgsNyBAQAogCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMEUyMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNj
cmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZD
RTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1
RTU5MDAxRTlBQkMgLyogU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCQzY0RTBF
N0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzhCODU0QjBFN0M3RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICov
LApAQCAtMjIzNTcsNyArMjIzNjcsOSBAQAogCQkJCTlGNzIzMDUwMTExODRCNDEwMEFEMDEyNiAv
KiBTY3JpcHRQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTI3RDUzNzBGOEFBQjFE
MDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0Q0MwRTEw
RUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNB
M0JGNjdDMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUY4NjlGMEU4NDRF
OUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVE
OTI1QjY3MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxCZWhhdmlvci5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
LmgiCisKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFPUyhXSU5ET1dTKQorU2Nyb2xsQW5pbWF0
b3IqIFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgcmV0dXJuIG5ldyBTY3JvbGxBbmltYXRvcihjbGllbnQpOworfQorI2VuZGlmCisKK2Jvb2wg
U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAg
ZmxvYXQqIGN1cnJlbnRQb3MgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyAmbV9jdXJyZW50UG9zWCA6ICZtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9IHN0
ZDo6bWF4KHN0ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsK
KyAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgKmN1cnJlbnRQb3MgPSBuZXdQb3M7CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3sKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAg
ICAgICAgbV9jdXJyZW50UG9zWCA9IHBvczsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFBv
c1kgPSBwb3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcl9oCisjZGVm
aW5lIFNjcm9sbEFuaW1hdG9yX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyQ2xpZW50OworCitjbGFzcyBTY3JvbGxB
bmltYXRvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBjcmVhdGUoU2Ny
b2xsYmFyQ2xpZW50Kik7CisKKyAgICBTY3JvbGxBbmltYXRvcihTY3JvbGxiYXJDbGllbnQqIGNs
aWVudCkgOiBtX2NsaWVudChjbGllbnQpIHsgfQorICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9y
KCkgeyB9CisKKyAgICAvLyBDb21wdXRlcyBhIHNjcm9sbCBkZXN0aW5hdGlvbiBmb3IgdGhlIGdp
dmVuIHBhcmFtZXRlcnMuICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gYWxyZWFkeSBhdCB0aGUg
ZGVzdGluYXRpb24uICBPdGhlcndpc2UsIHN0YXJ0cyBzY3JvbGxpbmcgdG93YXJkcyB0aGUKKyAg
ICAvLyBkZXN0aW5hdGlvbiBhbmQgcmV0dXJucyB0cnVlLiAgU2Nyb2xsaW5nIG1heSBiZSBpbW1l
ZGlhdGUgb3IgYW5pbWF0ZWQuCisgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24g
YWx3YXlzIHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgorICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKworICAgIC8vIFN0b3BzIGFueSBhbmltYXRpb24g
aW4gdGhlIGdpdmVuIGRpcmVjdGlvbiBhbmQgdXBkYXRlcyB0aGUgU2Nyb2xsQW5pbWF0b3IKKyAg
ICAvLyB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRoaXMgZG9lcyBub3QgY2F1
c2UgYSBjYWxsYmFjayB0byB0aGUKKyAgICAvLyBTY3JvbGxiYXJDbGllbnQuCisgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRh
dGlvbiwgZmxvYXQpOworCitwcm90ZWN0ZWQ6CisgICAgU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEZsb2F0UG9p
bnQgaW4gb3JkZXIgdG8gcmVkdWNlCisgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3ViY2xh
c3MgY29kZSBjb21wbGV4aXR5LgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yV2luLmgiCisK
KyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5o
IgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK1Njcm9sbEFuaW1hdG9yKiBTY3JvbGxB
bmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBu
ZXcgU2Nyb2xsQW5pbWF0b3JXaW4oY2xpZW50KTsKK30KKworY29uc3QgZG91YmxlIFNjcm9sbEFu
aW1hdG9yV2luOjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKKworU2Nyb2xsQW5pbWF0b3JX
aW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvcldpbiogcGFyZW50LCBm
bG9hdCogY3VycmVudFBvcykKKyAgICA6IG1fY3VycmVudFBvcyhjdXJyZW50UG9zKQorICAgICwg
bV9kZXNpcmVkUG9zKDApCisgICAgLCBtX2N1cnJlbnRWZWxvY2l0eSgwKQorICAgICwgbV9kZXNp
cmVkVmVsb2NpdHkoMCkKKyAgICAsIG1fbGFzdEFuaW1hdGlvblRpbWUoMCkKKyAgICAsIG1fYW5p
bWF0aW9uVGltZXIocGFyZW50LCAmU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmly
ZWQpCit7Cit9CisKKworU2Nyb2xsQW5pbWF0b3JXaW46OlNjcm9sbEFuaW1hdG9yV2luKFNjcm9s
bGJhckNsaWVudCogY2xpZW50KQorICAgIDogU2Nyb2xsQW5pbWF0b3IoY2xpZW50KQorICAgICwg
bV9ob3Jpem9udGFsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWCkKKyAgICAsIG1fdmVydGljYWxE
YXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZKQoreworfQorCitTY3JvbGxBbmltYXRvcldpbjo6flNj
cm9sbEFuaW1hdG9yV2luKCkKK3sKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV9o
b3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGlj
YWxEYXRhKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBEb24ndCBhbmltYXRlIGp1bXBp
bmcgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGlmIChncmFu
dWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0
b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwor
CisgICAgLy8gVGhpcyBpcyBhbiBhbmltYXRhYmxlIHNjcm9sbC4gIENhbGN1bGF0ZSB0aGUgc2Ny
b2xsIGRlbHRhLgorICAgIFBlckF4aXNEYXRhKiBkYXRhID0gKG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsU2Nyb2xsYmFyKSA/ICZtX3ZlcnRpY2FsRGF0YSA6ICZtX2hvcml6b250YWxEYXRhOworICAg
IGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKGRhdGEtPm1fZGVzaXJlZFBvcyArIChz
dGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6
ZShvcmllbnRhdGlvbikpKSwgMC4wZik7CisgICAgaWYgKG5ld1BvcyA9PSBkYXRhLT5tX2Rlc2ly
ZWRQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLT5tX2Rlc2lyZWRQb3MgPSBu
ZXdQb3M7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFuaW1hdGlvbiB2ZWxvY2l0eS4KKyAgICBp
ZiAoKmRhdGEtPm1fY3VycmVudFBvcyA9PSBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBib29sIGFscmVhZHlBbmltYXRpbmcgPSBkYXRhLT5tX2FuaW1hdGlv
blRpbWVyLmlzQWN0aXZlKCk7CisgICAgLy8gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVu
dCBzb3VyY2VzIG9mIHNjcm9sbCByZXF1ZXN0cy4gIFdlIHdhbnQgdG8KKyAgICAvLyBtYWtlIGJv
dGgga2V5Ym9hcmQgYW5kIHdoZWVsLWdlbmVyYXRlZCBzY3JvbGwgcmVxdWVzdHMgKHdoaWNoIGNh
biBjb21lIGF0CisgICAgLy8gdW5wcmVkaWN0YWJsZSByYXRlcykgYW5kIGF1dG9zY3JvbGxpbmcg
ZnJvbSBob2xkaW5nIGRvd24gdGhlIG1vdXNlIGJ1dHRvbgorICAgIC8vIG9uIGEgc2Nyb2xsYmFy
IHBhcnQgKHdoZXJlIHRoZSByZXF1ZXN0IHJhdGUgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlCisg
ICAgLy8gc2Nyb2xsYmFyIHRoZW1lKSBmZWVsIHNtb290aCwgcmVzcG9uc2l2ZSwgYW5kIHNpbWls
YXIuCisgICAgLy8KKyAgICAvLyBXaGVuIGF1dG9zY3JvbGxpbmcsIHRoZSBzY3JvbGxiYXIncyBh
dXRvc2Nyb2xsIHRpbWVyIHdpbGwgY2FsbCB1cyB0bworICAgIC8vIGluY3JlbWVudCB0aGUgZGVz
aXJlZCBwb3NpdGlvbiBieSB8c3RlcHwgKHdpdGggfG11bHRpcGxpZXJ8ID09IDEpIGV2ZXJ5Cisg
ICAgLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5
KCkgc2Vjb25kcy4gIElmIHdlIHNldAorICAgIC8vIHRoZSBkZXNpcmVkIHZlbG9jaXR5IHRvIGV4
YWN0bHkgdGhpcyByYXRlLCBzbW9vdGggc2Nyb2xsaW5nIHdpbGwgbmVpdGhlcgorICAgIC8vIHJh
Y2UgYWhlYWQgKGFuZCB0aGVuIGhhdmUgdG8gc2xvdyBkb3duKSBub3IgaW5jcmVhc2luZ2x5IGxh
ZyBiZWhpbmQsIGJ1dAorICAgIC8vIHdpbGwgYmUgc21vb3RoIGFuZCBzeW5jaHJvbml6ZWQuCisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0aGUgYWNjZWxlcmF0aW9uIHBlcmlv
ZCwgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4KKyAgICAvLyB0aGlzIGNhc2Ugd291bGQgbGFnIHRo
ZSBkZXNpcmVkIG9uZSBieSBhIHNtYWxsLCBjb25zdGFudCBhbW91bnQgKHNlZQorICAgIC8vIGNv
bW1lbnRzIG9uIGFuaW1hdGVTY3JvbGwoKSk7IHRoZSBleGFjdCBhbW91bnQgaXMgZ2l2ZW4gYnkK
KyAgICAvLyAgIGxhZyA9IHxzdGVwfCAtIHYoMC41dEEgKyB0RCkKKyAgICAvLyBXaGVyZQorICAg
IC8vICAgdiA9IFRoZSBzdGVhZHktc3RhdGUgdmVsb2NpdHksCisgICAgLy8gICAgICAgfHN0ZXB8
IC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkK
KyAgICAvLyAgIHRBID0gYWNjZWxlcmF0aW9uVGltZSgpCisgICAgLy8gICB0RCA9IFRoZSB0aW1l
IHdlIHByZXRlbmQgaGFzIGFscmVhZHkgcGFzc2VkIHdoZW4gc3RhcnRpbmcgdG8gc2Nyb2xsLAor
ICAgIC8vICAgICAgICB8YW5pbWF0aW9uVGltZXJEZWxheXwKKyAgICAvLworICAgIC8vIFRoaXMg
bGFnIHByb3ZpZGVzIHNvbWUgYnVmZmVyIGFnYWluc3QgdGltZXIgaml0dGVyIHNvIHdlJ3JlIGxl
c3MgbGlrZWx5CisgICAgLy8gdG8gaGl0IHRoZSBkZXNpcmVkIHBvc2l0aW9uIGFuZCBzdG9wIChh
bmQgdGh1cyBoYXZlIHRvIHJlLWFjY2VsZXJhdGUsCisgICAgLy8gY2F1c2luZyBhIHZpc2libGUg
aGl0Y2gpIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGF1dG9zY3JvbGwgaW5jcmVtZW50Lgor
ICAgIC8vCisgICAgLy8gVGh1cywgZm9yIGF1dG9zY3JvbGwtdGltZXItdHJpZ2dlcmVkIHJlcXVl
c3RzLCB0aGUgaWRlYWwgc3RlYWR5LXN0YXRlCisgICAgLy8gZGlzdGFuY2UgdG8gdHJhdmVsIGlu
IGVhY2ggdGltZSBpbnRlcnZhbCBpczoKKyAgICAvLyAgIGZsb2F0IGFuaW1hdGlvblN0ZXAgPSBz
dGVwOworICAgIC8vIE5vdGUgdGhhdCB3aGVuIHdlJ3JlIG5vdCBhbHJlYWR5IGFuaW1hdGluZywg
dGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzCisgICAgLy8gdGhlIGRpc3RhbmNlIHRvIHRoZSB0
YXJnZXQgcG9zaXRpb24uICBXZSdsbCByZXR1cm4gdG8gdGhhdCBpbiBhIG1vbWVudC4KKyAgICAv
LworICAgIC8vIEZvciBrZXlib2FyZCBhbmQgd2hlZWwgc2Nyb2xscywgd2UgZG9uJ3Qga25vdyB3
aGVuIHRoZSBuZXh0IGluY3JlbWVudAorICAgIC8vIHdpbGwgYmUgcmVxdWVzdGVkLiAgSWYgd2Ug
c2V0IHRoZSB0YXJnZXQgdmVsb2NpdHkgYmFzZWQgb24gaG93IGZhciBhd2F5CisgICAgLy8gZnJv
bSB0aGUgdGFyZ2V0IHBvc2l0aW9uIHdlIGFyZSwgdGhlbiBmb3Iga2V5Ym9hcmQvd2hlZWwgZXZl
bnRzIHRoYXQgY29tZQorICAgIC8vIGZhc3RlciB0aGFuIHRoZSBhdXRvc2Nyb2xsIGRlbGF5LCB3
ZSdsbCBhc3ltcHRvdGljYWxseSBhcHByb2FjaCB0aGUKKyAgICAvLyB2ZWxvY2l0eSBuZWVkZWQg
dG8gc3RheSBzbW9vdGhseSBpbiBzeW5jIHdpdGggdGhlIHVzZXIncyBhY3Rpb25zOyBmb3IKKyAg
ICAvLyBldmVudHMgdGhhdCBjb21lIHNsb3dlciwgd2UnbGwgc2Nyb2xsIG9uZSBpbmNyZW1lbnQg
YW5kIHRoZW4gcGF1c2UgdW50aWwKKyAgICAvLyB0aGUgbmV4dCBldmVudCBmaXJlcy4KKyAgICBm
bG9hdCBhbmltYXRpb25TdGVwID0gYWJzKG5ld1BvcyAtICpkYXRhLT5tX2N1cnJlbnRQb3MpOwor
ICAgIC8vIElmIGEga2V5IGlzIGhlbGQgZG93biAob3IgdGhlIHdoZWVsIGNvbnRpbnVhbGx5IHNw
dW4pLCB0aGVuIG9uY2Ugd2UgaGF2ZQorICAgIC8vIHJlYWNoZWQgYSB2ZWxvY2l0eSBjbG9zZSB0
byB0aGUgc3RlYWR5LXN0YXRlIHZlbG9jaXR5LCB3ZSdyZSBsaWtlbHkgdG8KKyAgICAvLyBoaXQg
dGhlIGRlc2lyZWQgcG9zaXRpb24gYXQgYXJvdW5kIHRoZSBzYW1lIHRpbWUgd2UnZCBleHBlY3Qg
dGhlIG5leHQKKyAgICAvLyBpbmNyZW1lbnQgdG8gb2NjdXIgLS0gYmFkIGJlY2F1c2UgaXQgbGVh
ZHMgdG8gaGl0Y2hpbmcgYXMgZGVzY3JpYmVkIGFib3ZlCisgICAgLy8gKGlmIGF1dG9zY3JvbGwt
YmFzZWQgcmVxdWVzdHMgZGlkbid0IHJlc3VsdCBpbiBhIHNtYWxsIGFtb3VudCBvZiBjb25zdGFu
dAorICAgIC8vIGxhZykuICBTbyBpZiB3ZSdyZSBjYWxsZWQgYWdhaW4gd2hpbGUgYWxyZWFkeSBh
bmltYXRpbmcsIHdlIHdhbnQgdG8gdHJpbQorICAgIC8vIHRoZSBhbmltYXRpb25TdGVwIHNsaWdo
dGx5IHRvIG1haW50YWluIGxhZyBsaWtlIHdoYXQncyBkZXNjcmliZWQgYWJvdmUuCisgICAgLy8g
KEkgc2F5ICJtYWludGFpbiIgc2luY2Ugd2UnbGwgYWxyZWFkeSBiZSBsYWdnZWQgZHVlIHRvIHRo
ZSBhY2NlbGVyYXRpb24KKyAgICAvLyBkdXJpbmcgdGhlIGZpcnN0IHNjcm9sbCBwZXJpb2QuKQor
ICAgIC8vCisgICAgLy8gUmVtZW1iZXIgdGhhdCB0cmltbWluZyB3b24ndCBjYXVzZSB1cyB0byBm
YWxsIHN0ZWFkaWx5IGZ1cnRoZXIgYmVoaW5kCisgICAgLy8gaGVyZSwgYmVjYXVzZSB0aGUgZnVy
dGhlciBiZWhpbmQgd2UgYXJlLCB0aGUgbGFyZ2VyIHRoZSBiYXNlIHN0ZXAgdmFsdWUKKyAgICAv
LyBhYm92ZS4gIEdpdmVuIHRoZSBzY3JvbGxpbmcgYWxnb3JpdGhtIGluIGFuaW1hdGVTY3JvbGwo
KSwgdGhlIHByYWN0aWNhbAorICAgIC8vIGVmZmVjdCB3aWxsIGFjdHVhbGx5IGJlIHRoYXQsIGFz
c3VtaW5nIGEgY29uc3RhbnQgdHJpbSBmYWN0b3IsIHdlJ2xsIGxhZworICAgIC8vIGJ5IGEgY29u
c3RhbnQgYW1vdW50IGRlcGVuZGluZyBvbiB0aGUgcmF0ZSBhdCB3aGljaCBpbmNyZW1lbnRzIG9j
Y3VyCisgICAgLy8gY29tcGFyZWQgdG8gdGhlIGF1dG9zY3JvbGwgdGltZXIgZGVsYXkuICBUaGUg
ZXhhY3QgbGFnIGlzIGdpdmVuIGJ5CisgICAgLy8gICBsYWcgPSB8c3RlcHwgKiAoKHIgLyBrKSAt
IDEpCisgICAgLy8gV2hlcmUKKyAgICAvLyAgIHIgPSBUaGUgcmF0aW8gb2YgdGhlIGF1dG9zY3Jv
bGwgcmVwZWF0IGRlbGF5LAorICAgIC8vICAgICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpLCB0byB0aGUKKyAgICAvLyAgICAgICBrZXkvd2hl
ZWwgcmVwZWF0IGRlbGF5IChpLmUuID4gMSB3aGVuIGtleXMgcmVwZWF0IGZhc3RlcikKKyAgICAv
LyAgIGsgPSBUaGUgdmVsb2NpdHkgdHJpbSBjb25zdGFudCBnaXZlbiBiZWxvdworICAgIC8vCisg
ICAgLy8gV2Ugd2FudCB0byBjaG9vc2UgdGhlIHRyaW0gZmFjdG9yIHN1Y2ggdGhhdCBmb3IgY2Fs
bHMgdGhhdCBjb21lIGF0IHRoZQorICAgIC8vIGF1dG9zY3JvbGwgdGltZXIgcmF0ZSwgd2UnbGwg
d2luZCB1cCB3aXRoIHRoZSBzYW1lIGxhZyBhcyBpbiB0aGUKKyAgICAvLyAicGVyZmVjdCIgY2Fz
ZSBkZXNjcmliZWQgYWJvdmUgKG9yLCB0byBwdXQgaXQgYW5vdGhlciB3YXksIHdlJ2xsIGVuZCB1
cAorICAgIC8vIHdpdGggfGFuaW1hdGlvblN0ZXB8ID09IHxzdGVwfCAqIHxtdWx0aXBsaWVyfCBk
ZXNwaXRlIHRoZSBhY3R1YWwgZGlzdGFuY2UKKyAgICAvLyBjYWxjdWxhdGVkIGFib3ZlIGJlaW5n
IGxhcmdlciB0aGFuIHRoYXQpLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiAicGVyZmVjdCIKKyAgICAv
LyBiZWhhdmlvciBmb3IgYXV0b3Njcm9sbGluZyB3aXRob3V0IGhhdmluZyB0byBzcGVjaWFsLWNh
c2UgaXQuCisgICAgaWYgKGFscmVhZHlBbmltYXRpbmcpCisgICAgICAgIGFuaW1hdGlvblN0ZXAg
Lz0gKDIuMCAtICgoMS4wIC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3Jv
bGxUaW1lckRlbGF5KCkpICogKDAuNSAqIGFjY2VsZXJhdGlvblRpbWUoKSArIGFuaW1hdGlvblRp
bWVyRGVsYXkpKSk7CisgICAgLy8gVGhlIHJlc3VsdCBvZiBhbGwgdGhpcyBpcyB0aGF0IHNpbmds
ZSBrZXlwcmVzc2VzIG9yIHdoZWVsIGZsaWNrcyB3aWxsCisgICAgLy8gc2Nyb2xsIGluIHRoZSBz
YW1lIHRpbWUgcGVyaW9kIGFzIHNpbmdsZSBwcmVzc2VzIG9mIHNjcm9sbGJhciBlbGVtZW50czsK
KyAgICAvLyBob2xkaW5nIHRoZSBtb3VzZSBkb3duIG9uIGEgc2Nyb2xsYmFyIHBhcnQgd2lsbCBz
Y3JvbGwgYXMgZmFzdCBhcworICAgIC8vIHBvc3NpYmxlIHdpdGhvdXQgaGl0Y2hpbmc7IGFuZCBv
dGhlciByZXBlYXRlZCBzY3JvbGwgZXZlbnRzIHdpbGwgYWxzbworICAgIC8vIHNjcm9sbCB3aXRo
IHRoZSBzYW1lIHRpbWUgbGFnIGFzIGhvbGRpbmcgZG93biB0aGUgbW91c2Ugb24gYSBzY3JvbGxi
YXIKKyAgICAvLyBwYXJ0LgorICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0gYW5pbWF0aW9u
U3RlcCAvIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxh
eSgpOworCisgICAgLy8gSWYgd2UncmUgbm90IGFscmVhZHkgc2Nyb2xsaW5nLCBzdGFydC4KKyAg
ICBpZiAoIWFscmVhZHlBbmltYXRpbmcpCisgICAgICAgIGFuaW1hdGVTY3JvbGwoZGF0YSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnNldFNjcm9sbFBv
c2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
ZmxvYXQgcG9zKQoreworICAgIFBlckF4aXNEYXRhKiBkYXRhID0gKG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gJm1faG9yaXpvbnRhbERhdGEgOiAmbV92ZXJ0aWNhbERhdGE7
CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoZGF0YSk7CisgICAgKmRhdGEtPm1fY3Vy
cmVudFBvcyA9IHBvczsKKyAgICBkYXRhLT5tX2Rlc2lyZWRQb3MgPSBwb3M7CisgICAgZGF0YS0+
bV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsK
K30KKworLy8gc3RhdGljCitkb3VibGUgU2Nyb2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRp
bWUoKQoreworICAgIC8vIFdlIGVsZWN0IHRvIHVzZSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhl
bWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBhcworICAgIC8vIHRoZSBsZW5ndGggb2YgdGlt
ZSB3ZSdsbCB0YWtlIHRvIGFjY2VsZXJhdGUgZnJvbSAwIHRvIG91ciB0YXJnZXQKKyAgICAvLyB2
ZWxvY2l0eS4gIENob29zaW5nIGEgbGFyZ2VyIHZhbHVlIHdvdWxkIHByb2R1Y2UgYSBtb3JlIHBy
b25vdW5jZWQKKyAgICAvLyBhY2NlbGVyYXRpb24gZWZmZWN0LgorICAgIHJldHVybiBTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmlt
YXRvcldpbj4qIHRpbWVyKQoreworICAgIGFuaW1hdGVTY3JvbGwoKHRpbWVyID09ICZtX2hvcml6
b250YWxEYXRhLm1fYW5pbWF0aW9uVGltZXIpID8gJm1faG9yaXpvbnRhbERhdGEgOiAmbV92ZXJ0
aWNhbERhdGEpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzdG9wQW5pbWF0aW9uVGlt
ZXJJZk5lZWRlZChQZXJBeGlzRGF0YSogZGF0YSkKK3sKKyAgICBpZiAoZGF0YS0+bV9hbmltYXRp
b25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0b3Ao
KTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9sbChQZXJBeGlzRGF0
YSogZGF0YSkKK3sKKyAgICAvLyBOb3RlIG9uIHNtb290aCBzY3JvbGxpbmcgcGVyZiB2ZXJzdXMg
bm9uLXNtb290aCBzY3JvbGxpbmcgcGVyZjoKKyAgICAvLyBUaGUgdG90YWwgdGltZSB0byBwZXJm
b3JtIGEgY29tcGxldGUgc2Nyb2xsIGlzIGdpdmVuIGJ5CisgICAgLy8gICB0ID0gdDAgKyAwLjV0
QSAtIHREICsgdFMKKyAgICAvLyBXaGVyZQorICAgIC8vICAgdDAgPSBUaGUgdGltZSB0byBwZXJm
b3JtIHRoZSBzY3JvbGwgd2l0aG91dCBzbW9vdGggc2Nyb2xsaW5nCisgICAgLy8gICB0QSA9IFRo
ZSBhY2NlbGVyYXRpb24gdGltZSwKKyAgICAvLyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2
ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkgKHNlZSBiZWxvdykKKyAgICAvLyAgIHRE
ID0gfGFuaW1hdGlvblRpbWVyRGVsYXl8CisgICAgLy8gICB0UyA9IEEgdmFsdWUgbGVzcyB0aGFu
IG9yIGVxdWFsIHRvIHRoZSB0aW1lIHJlcXVpcmVkIHRvIHBlcmZvcm0gYQorICAgIC8vICAgICAg
ICBzaW5nbGUgc2Nyb2xsIGluY3JlbWVudCwgaS5lLiB0aGUgd29yayBkb25lIGR1ZSB0byBjYWxs
aW5nCisgICAgLy8gICAgICAgIGNsaWVudCgpLT52YWx1ZUNoYW5nZWQoKSAofjAgZm9yIHNpbXBs
ZSBwYWdlcywgbGFyZ2VyIGZvciBjb21wbGV4CisgICAgLy8gICAgICAgIHBhZ2VzKS4KKyAgICAv
LworICAgIC8vIEJlY2F1c2UgdEEgYW5kIHREIGFyZSBmYWlybHkgc21hbGwsIHRoZSB0b3RhbCBs
YWcgKGFzIHVzZXJzIHBlcmNlaXZlIGl0KQorICAgIC8vIGlzIG5lZ2xpZ2libGUgZm9yIHNpbXBs
ZSBwYWdlcyBhbmQgcm91Z2hseSB0UyBmb3IgY29tcGxleCBwYWdlcy4gIFdpdGhvdXQKKyAgICAv
LyBrbm93aW5nIGluIGFkdmFuY2UgaG93IGxhcmdlIHRTIGlzIGl0J3MgaGFyZCB0byBkbyBiZXR0
ZXIgdGhhbiB0aGlzLgorICAgIC8vIFBlcmhhcHMgd2UgY291bGQgdHJ5IHRvIHJlbWVtYmVyIHBy
ZXZpb3VzIHZhbHVlcyBhbmQgZm9yd2FyZC1jb21wZW5zYXRlLgorCisKKyAgICAvLyBXZSB3YW50
IHRvIHVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSB0aW1lIGl0J3MgYmVl
biBzaW5jZQorICAgIC8vIG91ciBsYXN0IHVwZGF0ZS4gIFRoaXMgbWF5IGJlIGxvbmdlciB0aGFu
IG91ciBpZGVhbCB0aW1lLCBlc3BlY2lhbGx5IGlmCisgICAgLy8gdGhlIHBhZ2UgaXMgY29tcGxl
eCBvciB0aGUgc3lzdGVtIGlzIHNsb3cuCisgICAgLy8KKyAgICAvLyBUbyBhdm9pZCBmZWVsaW5n
IGxhZ2d5LCBpZiB3ZSd2ZSBqdXN0IHN0YXJ0ZWQgc21vb3RoIHNjcm9sbGluZyB3ZSBwcmV0ZW5k
CisgICAgLy8gd2UndmUgYWxyZWFkeSBhY2NlbGVyYXRlZCBmb3Igb25lIGlkZWFsIGludGVydmFs
LCBzbyB0aGF0IHdlJ2xsIHNjcm9sbCBhdAorICAgIC8vIGxlYXN0IHNvbWUgZGlzdGFuY2UgaW1t
ZWRpYXRlbHkuCisgICAgZG91YmxlIGxhc3RTY3JvbGxJbnRlcnZhbCA9IGRhdGEtPm1fY3VycmVu
dFZlbG9jaXR5ID8gKFdURjo6Y3VycmVudFRpbWUoKSAtIGRhdGEtPm1fbGFzdEFuaW1hdGlvblRp
bWUpIDogYW5pbWF0aW9uVGltZXJEZWxheTsKKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IGZhciB3
ZSd2ZSBhY3R1YWxseSB0cmF2ZWxlZCBhbmQgdXBkYXRlIG91ciBjdXJyZW50CisgICAgLy8gdmVs
b2NpdHkuCisgICAgZmxvYXQgZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICBpZiAoZGF0YS0+bV9jdXJy
ZW50VmVsb2NpdHkgPCBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSkgeworICAgICAgICAvLyBXZSBh
Y2NlbGVyYXRlIGF0IGEgY29uc3RhbnQgcmF0ZSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCB2
ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgYWNjZWxlcmF0aW9uUmF0ZSA9IGRhdGEtPm1fZGVzaXJl
ZFZlbG9jaXR5IC8gYWNjZWxlcmF0aW9uVGltZSgpOworCisgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hldGhlciBjb250YW50IGFjY2VsZXJhdGlvbiBoYXMgY2F1c2VkIHVzIHRvIHJlYWNoIG91cgor
ICAgICAgICAvLyB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAgIGZsb2F0IHBvdGVudGlhbFZlbG9j
aXR5Q2hhbmdlID0gYWNjZWxlcmF0aW9uUmF0ZSAqIGxhc3RTY3JvbGxJbnRlcnZhbDsKKyAgICAg
ICAgZmxvYXQgcG90ZW50aWFsTmV3VmVsb2NpdHkgPSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSAr
IHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlOworICAgICAgICBpZiAocG90ZW50aWFsTmV3VmVsb2Np
dHkgPiBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSkgeworICAgICAgICAgICAgLy8gV2UgcmVhY2hl
ZCB0aGUgdGFyZ2V0IHZlbG9jaXR5IGF0IHNvbWUgcG9pbnQgYmV0d2VlbiBvdXIgbGFzdAorICAg
ICAgICAgICAgLy8gdXBkYXRlIGFuZCBub3cuICBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgY2FuIGJl
IGNhbGN1bGF0ZWQgaW4gdHdvCisgICAgICAgICAgICAvLyBwaWVjZXM6IHRoZSBkaXN0YW5jZSB0
cmF2ZWxlZCB3aGlsZSBhY2NlbGVyYXRpbmcsIGFuZCB0aGUKKyAgICAgICAgICAgIC8vIGRpc3Rh
bmNlIHRyYXZlbGVkIGFmdGVyIHJlYWNoaW5nIHRoZSB0YXJnZXQgdmVsb2NpdHkuCisgICAgICAg
ICAgICBmbG9hdCBhY3R1YWxWZWxvY2l0eUNoYW5nZSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5
IC0gZGF0YS0+bV9jdXJyZW50VmVsb2NpdHk7CisgICAgICAgICAgICBmbG9hdCBhY2NlbGVyYXRp
b25JbnRlcnZhbCA9IGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gYWNjZWxlcmF0aW9uUmF0ZTsKKyAg
ICAgICAgICAgIC8vIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCB1bmRlciBjb25zdGFudCBhY2NlbGVy
YXRpb24gaXMgdGhlIGFyZWEKKyAgICAgICAgICAgIC8vIHVuZGVyIGEgbGluZSBzZWdtZW50IHdp
dGggYSBjb25zdGFudCByaXNpbmcgc2xvcGUuICBCcmVhayB0aGlzCisgICAgICAgICAgICAvLyBp
bnRvIGEgdHJpYW5ndWxhciBwb3J0aW9uIGF0b3AgYSByZWN0YW5ndWxhciBwb3J0aW9uIGFuZCBz
dW0uCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKChkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSArIChhY3R1YWxWZWxvY2l0eUNoYW5nZSAvIDIpKSAqIGFjY2VsZXJhdGlvbkludGVydmFs
KTsKKyAgICAgICAgICAgIC8vIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBhdCB0aGUgdGFyZ2V0IHZl
bG9jaXR5IGlzIHNpbXBseQorICAgICAgICAgICAgLy8gKHRhcmdldCB2ZWxvY2l0eSkgKiAocmVt
YWluaW5nIHRpbWUgYWZ0ZXIgYWNjZWxlcmF0aW5nKS4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJh
dmVsZWQgKz0gKGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ICogKGxhc3RTY3JvbGxJbnRlcnZhbCAt
IGFjY2VsZXJhdGlvbkludGVydmFsKSk7CisgICAgICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxv
Y2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gQ29uc3RhbnQgYWNjZWxlcmF0aW9uIHRocm91Z2ggdGhlIGVudGlyZSB0aW1lIGlu
dGVydmFsLgorICAgICAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IChkYXRhLT5tX2N1cnJlbnRW
ZWxvY2l0eSArIChwb3RlbnRpYWxWZWxvY2l0eUNoYW5nZSAvIDIpKSAqIGxhc3RTY3JvbGxJbnRl
cnZhbDsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gcG90ZW50aWFsTmV3
VmVsb2NpdHk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IHJlYWNoZWQgdGhlIHRhcmdldCB2ZWxvY2l0eSwgc28gdGhlIGRpc3RhbmNlIHdlJ3ZlCisg
ICAgICAgIC8vIHRyYXZlbGVkIGlzIHNpbXBseSAoY3VycmVudCB2ZWxvY2l0eSkgKiAoZWxhcHNl
ZCB0aW1lKS4KKyAgICAgICAgZGlzdGFuY2VUcmF2ZWxlZCA9IGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5ICogbGFzdFNjcm9sbEludGVydmFsOworICAgICAgICAvLyBJZiBvdXIgZGVzaXJlZCB2ZWxv
Y2l0eSBoYXMgZGVjcmVhc2VkLCBkcm9wIHRoZSBjdXJyZW50IHZlbG9jaXR5IHRvby4KKyAgICAg
ICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eTsKKyAg
ICB9CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhl
IGRpc3RhbmNlIHRyYXZlbGVkLgorICAgIGlmIChkaXN0YW5jZVRyYXZlbGVkID49IGFicyhkYXRh
LT5tX2Rlc2lyZWRQb3MgLSAqZGF0YS0+bV9jdXJyZW50UG9zKSkgeworICAgICAgICAvLyBXZSd2
ZSB0cmF2ZWxlZCBmYXIgZW5vdWdoIHRvIHJlYWNoIHRoZSBkZXNpcmVkIHBvc2l0aW9uLiAgU3Rv
cCBzbW9vdGgKKyAgICAgICAgLy8gc2Nyb2xsaW5nLgorICAgICAgICAqZGF0YS0+bV9jdXJyZW50
UG9zID0gZGF0YS0+bV9kZXNpcmVkUG9zOworICAgICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0
eSA9IDA7CisgICAgICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBOb3QgeWV0IGF0IHRoZSB0YXJnZXQgcG9zaXRpb24uICBUcmF2ZWwgdG93
YXJkcyBpdCBhbmQgc2V0IHVwIHRoZQorICAgICAgICAvLyBuZXh0IHVwZGF0ZS4KKyAgICAgICAg
aWYgKCpkYXRhLT5tX2N1cnJlbnRQb3MgPiBkYXRhLT5tX2Rlc2lyZWRQb3MpCisgICAgICAgICAg
ICBkaXN0YW5jZVRyYXZlbGVkID0gLWRpc3RhbmNlVHJhdmVsZWQ7CisgICAgICAgICpkYXRhLT5t
X2N1cnJlbnRQb3MgKz0gZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgZGF0YS0+bV9hbmltYXRp
b25UaW1lci5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSk7CisgICAgICAgIGRhdGEt
Pm1fbGFzdEFuaW1hdGlvblRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CisgICAgfQorICAgIG1f
Y2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KCptX2hvcml6b250
YWxEYXRhLm1fY3VycmVudFBvcywgKm1fdmVydGljYWxEYXRhLm1fY3VycmVudFBvcykpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JXaW5faAorI2Rl
ZmluZSBTY3JvbGxBbmltYXRvcldpbl9oCisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xs
QW5pbWF0b3JXaW4gOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIFNjcm9s
bEFuaW1hdG9yV2luKFNjcm9sbGJhckNsaWVudCopOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1h
dG9yV2luKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiwgZmxvYXQpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7
CisgICAgICAgIFBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJlbnQsIGZsb2F0KiBj
dXJyZW50UG9zKTsKKworICAgICAgICBmbG9hdCogbV9jdXJyZW50UG9zOworICAgICAgICBmbG9h
dCBtX2Rlc2lyZWRQb3M7CisgICAgICAgIGZsb2F0IG1fY3VycmVudFZlbG9jaXR5OworICAgICAg
ICBmbG9hdCBtX2Rlc2lyZWRWZWxvY2l0eTsKKyAgICAgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlv
blRpbWU7CisgICAgICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yV2luPiBtX2FuaW1hdGlvblRpbWVy
OworICAgIH07CisKKyAgICBzdGF0aWMgZG91YmxlIGFjY2VsZXJhdGlvblRpbWUoKTsKKyAgICBz
dGF0aWMgY29uc3QgZG91YmxlIGFuaW1hdGlvblRpbWVyRGVsYXk7CisKKyAgICB2b2lkIGFuaW1h
dGlvblRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+Kik7CisgICAgdm9pZCBzdG9w
QW5pbWF0aW9uVGltZXJJZk5lZWRlZChQZXJBeGlzRGF0YSopOworICAgIHZvaWQgYW5pbWF0ZVNj
cm9sbChQZXJBeGlzRGF0YSopOworCisgICAgUGVyQXhpc0RhdGEgbV9ob3Jpem9udGFsRGF0YTsK
KyAgICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2FsRGF0YTsKK307CisKK30KKyNlbmRpZgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcAkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDIwIEBAIEludFBvaW50IFNjcm9sbFZp
ZXc6Om1heGltdW1TY3JvbGxQb3NpdGkKICAgICByZXR1cm4gSW50UG9pbnQobWF4aW11bU9mZnNl
dC53aWR0aCgpLCBtYXhpbXVtT2Zmc2V0LmhlaWdodCgpKTsKIH0KIAoraW50IFNjcm9sbFZpZXc6
OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7Cisg
ICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0
KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0U2Ny
b2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0VmFsdWUob2Zmc2V0LngoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cit9CisK
IHZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewog
ICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgpAQCAtNDQxLDcgKzQ1NSw3IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSwgU2Nyb2xsYmFyOjpOb3RG
cm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkK
ICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRp
b24oZmFsc2UpOyAKICAgICB9IApAQCAtNDYzLDcgKzQ3Nyw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyhjb25zdAogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwog
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwg
Y29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVl
KHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVl
KHNjcm9sbC5oZWlnaHQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAg
ICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAgICB9CkBAIC02NzMs
NyArNjg3LDEyIEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUKICAg
ICAgICAgICAgIGlmIChuZWdhdGl2ZSkKICAgICAgICAgICAgICAgICBkZWx0YVkgPSAtZGVsdGFZ
OwogICAgICAgICB9Ci0gICAgICAgIHNjcm9sbEJ5KEludFNpemUoLWRlbHRhWCwgLWRlbHRhWSkp
OworCisgICAgICAgIC8vIFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gc2Nyb2xsQnkoKSBpZiB0aGVy
ZSBpcyBubyBzY3JvbGxiYXIgZm9yIGEgbm9uLXplcm8gZGVsdGE/CisgICAgICAgIGlmIChkZWx0
YVkgJiYgbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsKKyAgICAgICAgaWYg
KGRlbHRhWCAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgpOwog
ICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDY2ODk3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDkgQEAgY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYwogcHVibGljOgog
ICAgIH5TY3JvbGxWaWV3KCk7CiAKLSAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb24uIEZy
YW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KKyAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVu
Y3Rpb25zLiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICAKICAg
ICAvLyBUaGUgd2luZG93IHRoYXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xsVmll
dyB3aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMiArMTAxLDEyIEBAIFNjcm9sbGJh
cjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsK
IH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2KQorYm9vbCBTY3JvbGxiYXI6OnNl
dFZhbHVlKGludCB2LCBTY3JvbGxTb3VyY2Ugc291cmNlKQogewogICAgIHYgPSBtYXgobWluKHYs
IG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSksIDApOwogICAgIGlmICh2YWx1ZSgpID09IHYp
CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gT3VyIHZhbHVlIHN0YXllZCB0aGUgc2FtZS4KLSAg
ICBzZXRDdXJyZW50UG9zKHYpOworICAgIHNldEN1cnJlbnRQb3Modiwgc291cmNlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU0LDggKzE1NCwxMCBAQCBib29sIFNjcm9sbGJhcjo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgfQogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xs
VXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCiAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVs
dGlwbGllcjsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIHJldHVybiBjbGllbnQoKS0+c2Ny
b2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIAotICAg
IHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0
aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkp
LCAwLjBmKSk7CisgICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1pbihtX2N1cnJlbnRQb3Mg
KyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90b3RhbFNpemUgLSBt
X3Zpc2libGVTaXplKSksIDAuMGYpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogfQogCiB2b2lk
IFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQpAQCAtMjg3LDExICsyODksMTQgQEAgdm9pZCBTY3Jv
bGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQogICAgIGVsc2UgaWYgKGRlbHRhIDwgMCkKICAgICAg
ICAgZGVsdGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7CiAgICAgaWYgKGRlbHRhKQotICAgICAg
ICBzZXRDdXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1h
eGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7CisgICAgICAgIHNldEN1cnJlbnRQb3Mo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNr
TGVuIC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogfQogCi1ib29sIFNjcm9s
bGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MpCitib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVu
dFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7CisgICAgaWYgKChzb3VyY2Ug
IT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnNl
dFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0aW9uLCBwb3MpOworCiAg
ICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MzM2LDcgKzM0MSw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3IK
IHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKICAgICAgICAgaWYgKHRo
ZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2dCkpCi0gICAgICAgICAg
ICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAgICBzZXRDdXJyZW50UG9z
KG1fZHJhZ09yaWdpbiwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2
dC5wb3MoKSkueCgpIDoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gNjY4OTcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
MiwxMSBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiAKIGNsYXNzIFNjcm9sbGJhciA6IHB1
YmxpYyBXaWRnZXQgewogcHVibGljOgorICAgIGVudW0gU2Nyb2xsU291cmNlIHsKKyAgICAgICAg
RnJvbVNjcm9sbEFuaW1hdG9yLAorICAgICAgICBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IsCisgICAg
fTsKKwogICAgIHZpcnR1YWwgflNjcm9sbGJhcigpOwogCiAgICAgLy8gTXVzdCBiZSBpbXBsZW1l
bnRlZCBieSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNlIHRoZSBTY3JvbGxiYXIgYmFz
ZSBjbGFzcy4gIFJpZ2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0aGF0IGlzIG5vdCB1c2luZyB0
aGUgYmFzZSBjbGFzcyBpcyBHVEsuCkBAIC03NSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAKICAgICB2b2lkIHNldFN0
ZXBzKGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxzUGVyU3RlcCA9IDEpOwot
ICAgIGJvb2wgc2V0VmFsdWUoaW50KTsKKyAgICBib29sIHNldFZhbHVlKGludCwgU2Nyb2xsU291
cmNlIHNvdXJjZSk7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6ZSwgaW50
IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3NlZFBv
cyA9IHA7IH0KIApAQCAtMTY3LDcgKzE3Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
Ym9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcyk7CisgICAgYm9vbCBzZXRDdXJyZW50UG9zKGZs
b2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKworI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsYmFyQ2xp
ZW50OjpTY3JvbGxiYXJDbGllbnQoKQorICAgIDogbV9zY3JvbGxBbmltYXRvcihTY3JvbGxBbmlt
YXRvcjo6Y3JlYXRlKHRoaXMpKQoreworfQorCitTY3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJD
bGllbnQoKQoreworfQorCitib29sIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRv
ci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3sKKyAgICBt
X3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24ob3JpZW50
YXRpb24sIHBvcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xp
ZW50LmgJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjEgKzI2LDI4IEBACiAjaWZuZGVmIFNjcm9sbGJh
ckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKKyNpbmNsdWRlICJJbnRQb2lu
dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Nyb2xs
QW5pbWF0b3I7CisKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB+U2Nyb2xsYmFyQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChT
Y3JvbGxiYXIqKSA9IDA7CisgICAgU2Nyb2xsYmFyQ2xpZW50KCk7CisgICAgdmlydHVhbCB+U2Ny
b2xsYmFyQ2xpZW50KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICBib29sIHNjcm9sbChTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZvaWQgc2V0U2Nyb2xsUG9z
aXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBm
bG9hdCBwb3MpOwogCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CkBAIC01MiwyMSArNTksMjEg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252
ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxiYXJSZWN0KTsKICAgICB9Ci0gICAgCiAgICAgdmly
dHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydEZyb21Db250YWlu
aW5nVmlldyhwYXJlbnRSZWN0KTsKICAgICB9Ci0gICAgCiAgICAgdmlydHVhbCBJbnRQb2ludCBj
b252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Ny
b2xsYmFyUG9pbnQpOwogICAgIH0KLSAgICAKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50
KTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9s
bEFuaW1hdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1l
U2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWlu
RnJhbWVTY3JvbGxiYXJHdGsuY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3
ICsxMDgsNyBAQCB2b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6dXBkYXRlVGh1bWJQCiAKIHZv
aWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCos
IE1haW5GcmFtZVNjcm9sbGJhckd0ayogdGhhdCkKIHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQu
Z2V0KCkpKSk7CisgICAgdGhhdC0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50LmdldCgpKSksIE5vdEZyb21TY3JvbGxB
bmltYXRvcik7CiB9CiAKIHZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1Njcm9sbGJhclF0LmNwcAkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1Njcm9sbGJhclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEgKzc2LDExIEBAIGJv
b2wgU2Nyb2xsYmFyOjpjb250ZXh0TWVudShjb25zdCBQbGF0Zm8KICAgICAgICAgY29uc3QgUVBv
aW50IHBvcyA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldmVudC5wb3MoKSk7CiAgICAg
ICAgIG1vdmVUaHVtYihob3Jpem9udGFsID8gcG9zLngoKSA6IHBvcy55KCkpOwogICAgIH0gZWxz
ZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVG9wKQotICAgICAgICBzZXRWYWx1ZSgw
KTsKKyAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNj
cm9sbEJ5RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9s
bEJvdHRvbSkKLSAgICAgICAgc2V0VmFsdWUobWF4aW11bSgpKTsKKyAgICAgICAgc2Nyb2xsKGhv
cml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5RG9jdW1lbnQpOwog
ICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VVcCkKLSAgICAgICAgc2Nyb2xs
KGhvcml6b250YWwgPyBTY3JvbGxMZWZ0OiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlKTsKKyAgICAg
ICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFn
ZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURvd24pCiAgICAgICAg
IHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBh
Z2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVwKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
NCw2ICs2NjQsMTcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmCiAg
ICAgICAgIDo6UmVsZWFzZURDKG1fcG9wdXAsIGxvY2FsREMpOwogfQogCitpbnQgUG9wdXBNZW51
V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAor
eworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikgJiYgbV9z
Y3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNp
YmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpzZXRTY3JvbGxPZmZzZXRG
cm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fc2Nyb2xs
YmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFy
OjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworfQorCiB2b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkocmV2aXNpb24gNjY4OTcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NiArOTEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2Uo
Ym9vbCBiKSB7IG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UgPSBiOyB9CiAKICAgICAvLyBTY3Jv
bGxCYXJDbGllbnQKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNo
YW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJEYXRhR3JpZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0
YUdyaWQuY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRh
dGFHcmlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCwxNyBAQCB2b2lkIFJlbmRl
ckRhdGFHcmlkOjpwYWludENvbHVtbkhlYWRlcihECiB9CiAKIC8vIFNjcm9sbGluZyBpbXBsZW1l
bnRhdGlvbiBmdW5jdGlvbnMKK2ludCBSZW5kZXJEYXRhR3JpZDo6c2Nyb2xsU2l6ZShTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gKChvcmllbnRh
dGlvbiA9PSBWZXJ0aWNhbGxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNp
emUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lkIFJlbmRlckRhdGFH
cmlkOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQp
Cit7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgp
LCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQgUmVuZGVyRGF0YUdy
aWQ6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgJKHJldmlzaW9uIDY2ODk3KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NiArNjcsOCBAQCBwcml2YXRlOgogICAgIEhUTUxEYXRhR3JpZEVsZW1lbnQqIGdyaWRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTERhdGFHcmlkRWxlbWVudCo+KG5vZGUo
KSk7IH0KIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCBp
bnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50IHgsCiAKICAgICBpZiAodXBkYXRlU2Ny
b2xsYmFycykgewogICAgICAgICBpZiAobV9oQmFyKQotICAgICAgICAgICAgbV9oQmFyLT5zZXRW
YWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAgICAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3Jv
bGxYT2Zmc2V0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICAgICAg
aWYgKG1fdkJhcikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZKTsKKyAg
ICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBTY3JvbGxiYXI6Ok5vdEZyb21T
Y3JvbGxBbmltYXRvcik7CiAgICAgfQogCiAgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00g
ZXZlbnQuCkBAIC0xNjE4LDYgKzE2MTgsMjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNv
bnN0IFBsYXRmb3JtTQogICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFs
c28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1
bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsU2l6
ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxi
YXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBt
X2hCYXIgOiBtX3ZCYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2b2lk
IFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
JiBvZmZzZXQpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShv
ZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgaWYgKG1fdkJh
cikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21T
Y3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKQogewogICAgIC8vIFVwZGF0ZSBzY3JvbGwgcG9zaXRpb24gZnJvbSBzY3JvbGxiYXJz
LgpAQCAtMjA2OCw3ICsyMDgyLDcgQEAgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dAogICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0byBrZWVwIGV2ZXJ5dGhpbmcg
d29ya2luZyAoc2VlIGhvdyBzY3JvbGxYT2Zmc2V0KCkKICAgICAgICAgLy8gZGlmZmVycyBmcm9t
IHNjcm9sbFlPZmZzZXQoKSB0byBnZXQgYW4gaWRlYSBvZiB3aHkgdGhlIGhvcml6b250YWwgYW5k
CiAgICAgICAgIC8vIHZlcnRpY2FsIHNjcm9sbGJhcnMgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZl
cmVudGx5KS4KLSAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCkpOworICAg
ICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9t
U2Nyb2xsQW5pbWF0b3IpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIGludCBj
bGllbnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw2ICs1MTgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
c2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAKIAogICAgIC8vIFNjcm9sbEJhckNsaWVu
dCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNo
YW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lv
biA2Njg5NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1Jl
dmVhbEVsZW1lbgogCiAgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKICAgICBpZiAobV92
QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQpOworICAgICAgICBt
X3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTIzLDYgKzUyMywxNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lCiAgICAgZWxlbWVudC0+ZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9CiAKK2ludCBSZW5kZXJMaXN0Qm94OjpzY3Jv
bGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJl
dHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1f
dkJhci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9p
ZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBv
aW50JiBvZmZzZXQpCit7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1
ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQg
UmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgaW50IG5ld09m
ZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKQEAgLTU3OCw3ICs1ODksNyBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAgICAgICAgIHJldHVybjsKICAgICBtX2luZGV4
T2Zmc2V0ID0gaW5kZXg7CiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1
ZShpbmRleCk7CisgICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgsIFNjcm9sbGJhcjo6Tm90
RnJvbVNjcm9sbEFuaW1hdG9yKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA2Njg5NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiAr
OTYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICAvLyBTY3JvbGxi
YXJDbGllbnQgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3Jv
bGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2Njg5NykKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBA
QAorMjAxMC0wOS0wNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9s
bGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICog
c3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0
aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8gYmUgYW5pbWF0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNl
V2hlZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOiBQbHVtYiBuZXcgU2Ny
b2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBzcmMvd2luL1dlYklucHV0RXZlbnRG
YWN0b3J5LmNwcDogVXBkYXRlIGNvbW1lbnRzIG5vdyB0aGF0IHdlIGhhdmUgc21vb3RoIHNjcm9s
bGluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hlZWxF
dmVudCk6CisKIDIwMTAtMDktMDcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjY4ODYuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDY2ODk3KQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTQsNyArOTQsNyBAQCBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAog
CiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKGludCBwb3NpdGlvbikKIHsKLSAgICBt
X3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRpb24pOworICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1
ZShwb3NpdGlvbiwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogfQogCiB2b2lk
IFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShpbnQgc2l6ZSkKQEAgLTIxOCw3ICsy
MTgsNyBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbChjb25zCiAgICAgICAg
ICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgICAgICBkZWx0YSAqPSAtMTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShtX3Njcm9s
bGJhci0+dmFsdWUoKSAtIGRlbHRhKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwo
KG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gV2Vi
Q29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwLCBXZWJDb3JlOjpTY3JvbGxCeVBp
eGVsLCBkZWx0YSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0y
NjIsNiArMjYyLDE2IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0IFcK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxTaXpl
KFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAg
IHJldHVybiAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8gKG1f
c2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7
Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsYmFyLT5z
ZXRWYWx1ZSgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0
b3IpOworfQorCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpT
Y3JvbGxiYXIqKQogewogICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWQodGhpcyk7CkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkocmV2aXNpb24gNjY4OTcpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQo
Y29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50
IG1ldGhvZHMKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1
YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5j
cHAJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5wdXRF
dmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDkgQEAgV2ViTW91
c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogICAgIC8vIHNtb290aCBzY3JvbGxp
bmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aCBzb21ld2hh
dAogICAgIC8vIGxhcmdlciBzY3JvbGwgdmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJreS4g
IEhlcmUgd2UgdXNlIDEwMCBweCBwZXIKICAgICAvLyB0aHJlZSBsaW5lcyAodGhlIGRlZmF1bHQg
c2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGljaykuCisgICAgLy8gRXZl
biB0aG91Z2ggd2UgaGF2ZSBzbW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMgYXMg
bGFyZ2UgYXMgSUUKKyAgICAvLyBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtlIGl0
IHNjcm9sbHMgZmFydGhlciB0aGFuIHlvdSB3YW50IHdoaWxlCisgICAgLy8gcmVhZGluZyBhcnRp
Y2xlcy4KICAgICBzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDEw
MC4wZiAvIDMuMGY7CiAgICAgd2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9hdCBz
Y3JvbGxEZWx0YSA9IHdoZWVsRGVsdGE7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViS2l0
L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA5LTA3
ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZlIEh5YXR0LgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29y
aywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1l
LmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUpOgorCiAyMDEwLTA5
LTA2ICBEaWVnbyBHb256YWxleiAgPGRpZWdvaGNnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDY2
ODk3KQorKysgV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MjksNyArOTI5LDcgQEAgdm9pZCBRV2ViRnJhbWU6OnNldFNjcm9sbEJhclZhbHVlKFF0OjpPcgog
ICAgICAgICAgICAgdmFsdWUgPSAwOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHNjcm9sbEJh
ck1heGltdW0ob3JpZW50YXRpb24pKQogICAgICAgICAgICAgdmFsdWUgPSBzY3JvbGxCYXJNYXhp
bXVtKG9yaWVudGF0aW9uKTsKLSAgICAgICAgc2ItPnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
c2ItPnNldFZhbHVlKHZhbHVlLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAg
ICAgfQogfQogCg==
</data>
<flag name="commit-queue"
          id="55869"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66777</attachid>
            <date>2010-09-07 15:39:41 -0700</date>
            <delta_ts>2010-09-08 12:32:15 -0700</delta_ts>
            <desc>patch v5.9</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>70979</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY2ODk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDkt
MDcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEh5YXR0LgorCisgICAgICAgIEFkZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1l
d29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2CisKKyAgICAgICAgKiB3c2NyaXB0OiBB
ZGQgV2luZG93cyBTY3JvbGxBbmltYXRvci4KKwogMjAxMC0wOS0wNyAgQXJubyBSZW5ldmllciAg
PGFybm9AcmVuZXZpZXIubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhl
ci4KSW5kZXg6IHdzY3JpcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd3NjcmlwdAkocmV2aXNpb24gNjY4OTcp
CisrKyB3c2NyaXB0CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIGlmIGJ1aWxkX3Bv
cnQgPT0gInd4IjoKICAgICAgICAgd2ViY29yZV9zb3VyY2VzWyd3eC13aW4nXSA9IFsKICAgICAg
ICAgICAgICAgICdXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZUNhaXJvV2luLmNwcCcsCiAgICAgICAgICAgICAgICAnV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwJywKKyAgICAgICAgICAgICAgICdXZWJD
b3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxBbmltYXRvcldpbi5jcHAnLAorICAgICAgICAgICAgICAg
J1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbEFuaW1hdG9yV2luLmgnLAogICAgICAgICAgICAg
ICAgIyB3eFRpbWVyIG9uIFdpbmRvd3MgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIGVhdCBj
cmFzaGVzIGluIGNhbGxiYWNrcwogICAgICAgICAgICAgICAgIyBzbyB3ZSBuZWVkIHRvIHVzZSB0
aGUgV2luIHBvcnQncyBpbXBsZW1lbnRhdGlvbiB1bnRpbCB0aGUgd3ggYnVnIGZpeCBpcwogICAg
ICAgICAgICAgICAgIyB3aWRlbHkgYXZhaWxhYmxlIChpdCB3YXMgZml4ZWQgaW4gMi44LjEwKS4K
SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTAtMDktMDcgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgorCisgICAgICAgIEFk
ZCBzbW9vdGggc2Nyb2xsaW5nIGZyYW1ld29yaywgYW5kIGEgV2luZG93cyBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzU2
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXA6IEFkZCBXaW5kb3dzIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaTogQWRkIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAqIFdlYkNvcmUucHJv
OiBBZGQgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6IEFkZCBTY3JvbGxBbmltYXRvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6IEFkZGVkIGJhc2UgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5v
IGFuaW1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOiBBZGRlZCBiYXNlIGltcGxlbWVu
dGF0aW9uIHRoYXQgZG9lcyBubyBhbmltYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6U2Nyb2xsQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3I6On5TY3JvbGxBbmltYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uY3BwOiBBZGRlZCBXaW5kb3dzIHN1YmNsYXNzIHRoYXQgYW5pbWF0ZXMgc2Nyb2xscy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46On5TY3JvbGxBbmltYXRvcldpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25U
aW1lcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yV2luOjphbmlt
YXRlU2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oOiBBZGRl
ZCBXaW5kb3dzIHN1YmNsYXNzIHRoYXQgYW5pbWF0ZXMgc2Nyb2xscy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcDogSW1wbGVtZW50IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rp
b25zLiAgQWxsb3cgd2hlZWwgc2Nyb2xscyB0byBiZSBhbmltYXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OndoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDogSW1wbGVtZW50
IG5ldyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bGJhci5jcHA6IEFsbG93IFNjcm9sbEFuaW1hdG9yIHRvIGhhbmRsZSBzY3JvbGxzIGlmIHByZXNl
bnQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6
bW92ZVRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5j
cHA6IEFkZGVkIHRvIGF2b2lkIGhhdmluZyB0byBtYWtlIFNjcm9sbEFuaW1hdG9yLmggbm9uLXBy
aXZhdGUuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OlNjcm9sbGJhckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOiBBZGQgaG9va3MgZm9y
IFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50Ojpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyQ2xpZW50Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwOgorICAgICAgICAo
TWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpndGtWYWx1ZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1Njcm9sbGJhclF0LmNwcDogVXNlIHNjcm9sbCgpIGluIHByZWZlcmVuY2UgdG8gc2V0
VmFsdWUoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udGV4dE1lbnUpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9s
bGJhckNsaWVudCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNj
cm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmg6
IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEYXRhR3JpZDo6c2Nyb2xsU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEYXRhR3JpZDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmg6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOiBJbXBsZW1lbnQgbmV3IFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyLmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6IEltcGxlbWVu
dCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94Lmg6IEltcGxlbWVudCBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4K
KwogMjAxMC0wOS0wNyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjY4
OTcpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTk4LDcg
KzExOTgsOSBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vTGlua0hhc2guY3Bw
CiAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcAorICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAogICAgIHBsYXRmb3JtL1Njcm9s
bGJhci5jcHAKKyAgICBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCiAgICAgcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCiAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAK
ICAgICBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY2ODk3
KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTk0OSw2ICsx
OTQ5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVu
dVN0eWxlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vU1NMS2V5R2VuZXJhdG9yLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmggXApAQCAtMTk1Niw2ICsx
OTU4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJl
Z2lzdHJ5LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuY3BwIFwKQEAgLTI1NjgsNiArMjU3MSw4IEBAIGVuZGlmCiAKIGlmIFRBUkdF
VF9XSU4zMgogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yV2luLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oIFwK
IAlXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBcCiAJV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCiAJV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2Njg5
NykKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcxLDYgKzMx
NzEsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9Qb3B1cE1lbnVTdHlsZS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vU1NMS2V5R2VuZXJhdG9yLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5oJywKQEAgLTMxNzgsNiArMzE4Miw3IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTk1Nyw3ICs5NTcsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBcCiAgICAgcGxhdGZvcm0v
dGV4dC9SZWd1bGFyRXhwcmVzc2lvbi5jcHAgXAogICAgIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5
LmNwcCBcCisgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIFwKICAgICBwbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwIFwKICAgICBw
bGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgXAogICAgIHBsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAgXApAQCAt
MTc4Nyw3ICsxNzg5LDkgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvUXRTdHlsZU9w
dGlvbldlYkNvbWJvQm94LmggXAogICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaCBcCiAg
ICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCisgICAgcGxhdGZvcm0vU2Ny
b2xsYmFyQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgg
XAogICAgIHBsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCiAgICAgcGxhdGZvcm0vU2VhcmNoUG9wdXBN
ZW51LmggXApAQCAtMjM0Nyw4ICsyMzUxLDEyIEBAIG1hZW1vNSB7CiB9CiAKIAotICAgIHdpbjMy
LSp8d2luY2UqOiBTT1VSQ0VTICs9IHBsYXRmb3JtL3dpbi9TeXN0ZW1UaW1lV2luLmNwcCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5z
Zm9ybWF0aW9uTWF0cml4V2luLmNwcAorICAgIHdpbjMyLSp8d2luY2UqIHsKKyAgICAgICAgSEVB
REVSUyArPSBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCisgICAgICAgIFNPVVJDRVMgKz0g
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbGF0
Zm9ybS93aW4vU3lzdGVtVGltZVdpbi5jcHAgXAorICAgICAgICAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKKyAgICB9CiAKICAgICBt
YWMgewogICAgICAgICBTT1VSQ0VTICs9IFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAko
cmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjc5LDYgKzEyNzksOCBAQAogICAgICAgICAgICdzb3VyY2VzLyc6IFsK
ICAgICAgICAgICAgIFsnZXhjbHVkZScsICdQb3NpeFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsn
aW5jbHVkZScsICcvb3BlbnR5cGUvJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1Njcm9s
bEFuaW1hdG9yV2luXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJy9TY3JvbGxB
bmltYXRvcldpblxcLmgkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1NraWFGb250V2lu
XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9UcmFuc3BhcmVuY3lXaW5cXC5j
cHAkJ10sCiAgICAgICAgICAgXSwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDI2OSw2ICsyNDI2OSwyMiBAQAogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3Jv
bGxBbmltYXRvci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxBbmltYXRvci5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5p
bWF0b3JXaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsQW5pbWF0b3JXaW4uaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbGJh
ci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjQyNzcsNiArMjQyOTMsMTAgQEAKIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cU2Nyb2xsYmFyQ2xpZW50LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbGJhckNsaWVudC5oIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00ODM2LDcgKzQ4MzYsOCBAQAogCQlCQzk5
ODEyRTBEQkU4MDdBMDA4Q0U5RUYgLyogRE9NQWJzdHJhY3RWaWV3RnJhbWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTk4MTJEMERCRTgwN0EwMDhD
RTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovOyB9OwogCQlCQzlBREQyMzBDQzQwMzI2
MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDIyMENDNDAzMjYwMDA5OEM0QyAvKiBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUJDOUFERDgwMENDNDA5MjIwMDA5OEM0QyAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzlBREQ3RjBDQzQwOTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuY3BwICovOyB9OwotCQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlC
QzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkM5QkM2NEQwRTdDNDg4OTAwOEI5
ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzlCQzY0QjBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xp
ZW50LmNwcCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlCQzY0QzBFN0M0ODg5MDA4
Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBMTY5QTIwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuY3BwICovOyB9OwogCQlCQ0ExNjlBMzBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaCAqLzsgfTsKIAkJQkNBMkIwNjExMDUwNDc2MDAwNDNCRDFDIC8qIFVzZXJTY3Jp
cHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTJC
MDYwMTA1MDQ3NUYwMDQzQkQxQyAvKiBVc2VyU2NyaXB0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUxMjYsNiArNTEyNyw4IEBACiAJCUM1RUJE
RDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUVCREQ4MTEwNUVEREVDMDA1
NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovOyB9OwogCQlDNkQ3NEFENTA5QUEy
ODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIg
LyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEw
MDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8q
IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CisJCUNBM0JGNjdDMTBEOTlCQUUw
MEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5p
bWF0b3IuY3BwICovOyB9OworCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5p
bWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENB
M0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovOyB9OwogCQlDRTAy
RjBDNDExRTgzQUREMDBDNjY4NEEgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMDJGMEMzMTFFODNBREQwMEM2
Njg0QSAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFMDU3RkE1MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0UwNTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAgKi87IH07CiAJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFMDU3RkE0MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTA2MzEsNyArMTA2MzQsOCBAQAogCQlCQzk5ODEyRDBEQkU4MDdBMDA4Q0U5RUYgLyog
RE9NQWJzdHJhY3RWaWV3RnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NQWJzdHJhY3RWaWV3RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5
QUREMjIwQ0M0MDMyNjAwMDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzlBREQ3RjBDQzQwOTIyMDAwOThDNEMgLyog
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQkM5QkM2NEQwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5QkM2NEIwRTdDNDg4OTAwOEI5ODQ5IC8qIFNj
cm9sbGJhckNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JvbGxiYXJDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQzY0
QzBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2
OUExMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTJCMDYwMTA1MDQ3NUYwMDQzQkQxQyAv
KiBVc2VyU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJTY3Jp
cHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTUwLDYgKzEwOTU0LDggQEAK
IAkJQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIg
LyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBM0JGNjdC
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxBbmltYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDRFMEFGQTExRjdCQzI3MDA5RDM4MTEgLyogZnVs
bHNjcmVlbi5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGZ1bGxzY3JlZW4uY3NzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTAyRjBDMzExRTgzQUREMDBDNjY4NEEgLyog
U2NyaXB0Q29udHJvbGxlckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0Q29udHJvbGxlckJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Uw
NTdGQTMxMjIwNzMxMTAwQTQ3NkQ1IC8qIERvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY3MTcsOCArMTY3MjMsMTEg
QEAKIAkJCQkxQzYzQTI0NjBGNzE2NDY2MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCiAJ
CQkJNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLywKIAkJ
CQk1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKKwkJCQlD
QTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAorCQkJCUNB
M0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAogCQkJCUJDN0Iy
QUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKLQkJCQlCQzlCQzY0RDBFN0M0
ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCisJCQkJQkM5QkM2NEIwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5jcHAgKi8sCisJCQkJQkM5QkM2NEMwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovLAogCQkJCUJDOEI4NTRBMEU3QzdGNTYw
MEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oICovLAogCQkJCUJDMTQwMjg4MEU4MzY4MDgwMDMx
OTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgKi8sCiAJCQkJQkMxNDAyODkwRTgz
NjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi8sCkBAIC0xOTgwOSw2
ICsxOTgxOCw3IEBACiAJCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0Q0MwRTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlw
dFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyog
U2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDQTNCRjY3RTEwRDk5QkFFMDBF
NkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUI4MDgy
NDVFNTkwMDFFOUFCQyAvKiBTY3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOUJDNjRF
MEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMjM1Nyw3ICsyMjM2Nyw5IEBACiAJCQkJOUY3MjMwNTAxMTE4NEI0MTAwQUQwMTI2
IC8qIFNjcmlwdFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMjdENTM3MEY4QUFC
MUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzRDQzBF
MTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
Q0EzQkY2N0MxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDQUE5MEMzMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQkM5QkM2NEQwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzE0MDI4QTBFODM2ODA4MDAzMTk3MTcgLyogU2Ny
b2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFRjg2OUYwRTg0
NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUQ5MjVCNjcwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEJlaGF2aW9yLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
b3IuaCIKKworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIU9TKFdJTkRPV1MpCitTY3JvbGxBbmlt
YXRvciogU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICByZXR1cm4gbmV3IFNjcm9sbEFuaW1hdG9yKGNsaWVudCk7Cit9CisjZW5kaWYKKworYm9v
bCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAg
ICBmbG9hdCogY3VycmVudFBvcyA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KSA/ICZtX2N1cnJlbnRQb3NYIDogJm1fY3VycmVudFBvc1k7CisgICAgZmxvYXQgbmV3UG9zID0g
c3RkOjptYXgoc3RkOjptaW4oKmN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0
aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYp
OworICAgIGlmICgqY3VycmVudFBvcyA9PSBuZXdQb3MpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAqY3VycmVudFBvcyA9IG5ld1BvczsKKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxv
YXQgcG9zKQoreworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQor
ICAgICAgICBtX2N1cnJlbnRQb3NYID0gcG9zOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50
UG9zWSA9IHBvczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yX2gKKyNk
ZWZpbmUgU2Nyb2xsQW5pbWF0b3JfaAorCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXJDbGllbnQ7CisKK2NsYXNzIFNjcm9s
bEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2Nyb2xsQW5pbWF0b3IqIGNyZWF0ZShT
Y3JvbGxiYXJDbGllbnQqKTsKKworICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50KSA6IG1fY2xpZW50KGNsaWVudCkgeyB9CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0
b3IoKSB7IH0KKworICAgIC8vIENvbXB1dGVzIGEgc2Nyb2xsIGRlc3RpbmF0aW9uIGZvciB0aGUg
Z2l2ZW4gcGFyYW1ldGVycy4gIFJldHVybnMgZmFsc2UgaWYKKyAgICAvLyBhbHJlYWR5IGF0IHRo
ZSBkZXN0aW5hdGlvbi4gIE90aGVyd2lzZSwgc3RhcnRzIHNjcm9sbGluZyB0b3dhcmRzIHRoZQor
ICAgIC8vIGRlc3RpbmF0aW9uIGFuZCByZXR1cm5zIHRydWUuICBTY3JvbGxpbmcgbWF5IGJlIGlt
bWVkaWF0ZSBvciBhbmltYXRlZC4KKyAgICAvLyBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlv
biBhbHdheXMgc2Nyb2xscyBpbW1lZGlhdGVseSwgbmV2ZXIgYW5pbWF0ZXMuCisgICAgdmlydHVh
bCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworCisgICAgLy8gU3RvcHMgYW55IGFuaW1hdGlv
biBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFuZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmltYXRvcgor
ICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLiAgVGhpcyBkb2VzIG5vdCBj
YXVzZSBhIGNhbGxiYWNrIHRvIHRoZQorICAgIC8vIFNjcm9sbGJhckNsaWVudC4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVu
dGF0aW9uLCBmbG9hdCk7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxiYXJDbGllbnQqIG1fY2xp
ZW50OworICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQ
b2ludCBpbiBvcmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAvLyBzdWJj
bGFzcyBjb2RlIGNvbXBsZXhpdHkuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5k
aWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JXaW4uaCIK
KworI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworU2Nyb2xsQW5pbWF0b3IqIFNjcm9s
bEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJu
IG5ldyBTY3JvbGxBbmltYXRvcldpbihjbGllbnQpOworfQorCitjb25zdCBkb3VibGUgU2Nyb2xs
QW5pbWF0b3JXaW46OmFuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAxOworCitTY3JvbGxBbmltYXRv
cldpbjo6UGVyQXhpc0RhdGE6OlBlckF4aXNEYXRhKFNjcm9sbEFuaW1hdG9yV2luKiBwYXJlbnQs
IGZsb2F0KiBjdXJyZW50UG9zKQorICAgIDogbV9jdXJyZW50UG9zKGN1cnJlbnRQb3MpCisgICAg
LCBtX2Rlc2lyZWRQb3MoMCkKKyAgICAsIG1fY3VycmVudFZlbG9jaXR5KDApCisgICAgLCBtX2Rl
c2lyZWRWZWxvY2l0eSgwKQorICAgICwgbV9sYXN0QW5pbWF0aW9uVGltZSgwKQorICAgICwgbV9h
bmltYXRpb25UaW1lcihwYXJlbnQsICZTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0aW9uVGltZXJG
aXJlZCkKK3sKK30KKworCitTY3JvbGxBbmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4oU2Ny
b2xsYmFyQ2xpZW50KiBjbGllbnQpCisgICAgOiBTY3JvbGxBbmltYXRvcihjbGllbnQpCisgICAg
LCBtX2hvcml6b250YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYKQorICAgICwgbV92ZXJ0aWNh
bERhdGEodGhpcywgJm1fY3VycmVudFBvc1kpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9yV2luOjp+
U2Nyb2xsQW5pbWF0b3JXaW4oKQoreworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZt
X2hvcml6b250YWxEYXRhKTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0
aWNhbERhdGEpOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIC8vIERvbid0IGFuaW1hdGUganVt
cGluZyB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgaWYgKGdy
YW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmlt
YXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7
CisKKyAgICAvLyBUaGlzIGlzIGFuIGFuaW1hdGFibGUgc2Nyb2xsLiAgQ2FsY3VsYXRlIHRoZSBz
Y3JvbGwgZGVsdGEuCisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpID8gJm1fdmVydGljYWxEYXRhIDogJm1faG9yaXpvbnRhbERhdGE7Cisg
ICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oZGF0YS0+bV9kZXNpcmVkUG9zICsg
KHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxT
aXplKG9yaWVudGF0aW9uKSkpLCAwLjBmKTsKKyAgICBpZiAobmV3UG9zID09IGRhdGEtPm1fZGVz
aXJlZFBvcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9
IG5ld1BvczsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgYW5pbWF0aW9uIHZlbG9jaXR5LgorICAg
IGlmICgqZGF0YS0+bV9jdXJyZW50UG9zID09IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGJvb2wgYWxyZWFkeUFuaW1hdGluZyA9IGRhdGEtPm1fYW5pbWF0
aW9uVGltZXIuaXNBY3RpdmUoKTsKKyAgICAvLyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVy
ZW50IHNvdXJjZXMgb2Ygc2Nyb2xsIHJlcXVlc3RzLiAgV2Ugd2FudCB0bworICAgIC8vIG1ha2Ug
Ym90aCBrZXlib2FyZCBhbmQgd2hlZWwtZ2VuZXJhdGVkIHNjcm9sbCByZXF1ZXN0cyAod2hpY2gg
Y2FuIGNvbWUgYXQKKyAgICAvLyB1bnByZWRpY3RhYmxlIHJhdGVzKSBhbmQgYXV0b3Njcm9sbGlu
ZyBmcm9tIGhvbGRpbmcgZG93biB0aGUgbW91c2UgYnV0dG9uCisgICAgLy8gb24gYSBzY3JvbGxi
YXIgcGFydCAod2hlcmUgdGhlIHJlcXVlc3QgcmF0ZSBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUK
KyAgICAvLyBzY3JvbGxiYXIgdGhlbWUpIGZlZWwgc21vb3RoLCByZXNwb25zaXZlLCBhbmQgc2lt
aWxhci4KKyAgICAvLworICAgIC8vIFdoZW4gYXV0b3Njcm9sbGluZywgdGhlIHNjcm9sbGJhcidz
IGF1dG9zY3JvbGwgdGltZXIgd2lsbCBjYWxsIHVzIHRvCisgICAgLy8gaW5jcmVtZW50IHRoZSBk
ZXNpcmVkIHBvc2l0aW9uIGJ5IHxzdGVwfCAod2l0aCB8bXVsdGlwbGllcnwgPT0gMSkgZXZlcnkK
KyAgICAvLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVs
YXkoKSBzZWNvbmRzLiAgSWYgd2Ugc2V0CisgICAgLy8gdGhlIGRlc2lyZWQgdmVsb2NpdHkgdG8g
ZXhhY3RseSB0aGlzIHJhdGUsIHNtb290aCBzY3JvbGxpbmcgd2lsbCBuZWl0aGVyCisgICAgLy8g
cmFjZSBhaGVhZCAoYW5kIHRoZW4gaGF2ZSB0byBzbG93IGRvd24pIG5vciBpbmNyZWFzaW5nbHkg
bGFnIGJlaGluZCwgYnV0CisgICAgLy8gd2lsbCBiZSBzbW9vdGggYW5kIHN5bmNocm9uaXplZC4K
KyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBhY2NlbGVyYXRpb24gcGVy
aW9kLCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbgorICAgIC8vIHRoaXMgY2FzZSB3b3VsZCBsYWcg
dGhlIGRlc2lyZWQgb25lIGJ5IGEgc21hbGwsIGNvbnN0YW50IGFtb3VudCAoc2VlCisgICAgLy8g
Y29tbWVudHMgb24gYW5pbWF0ZVNjcm9sbCgpKTsgdGhlIGV4YWN0IGFtb3VudCBpcyBnaXZlbiBi
eQorICAgIC8vICAgbGFnID0gfHN0ZXB8IC0gdigwLjV0QSArIHREKQorICAgIC8vIFdoZXJlCisg
ICAgLy8gICB2ID0gVGhlIHN0ZWFkeS1zdGF0ZSB2ZWxvY2l0eSwKKyAgICAvLyAgICAgICB8c3Rl
cHwgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXko
KQorICAgIC8vICAgdEEgPSBhY2NlbGVyYXRpb25UaW1lKCkKKyAgICAvLyAgIHREID0gVGhlIHRp
bWUgd2UgcHJldGVuZCBoYXMgYWxyZWFkeSBwYXNzZWQgd2hlbiBzdGFydGluZyB0byBzY3JvbGws
CisgICAgLy8gICAgICAgIHxhbmltYXRpb25UaW1lckRlbGF5fAorICAgIC8vCisgICAgLy8gVGhp
cyBsYWcgcHJvdmlkZXMgc29tZSBidWZmZXIgYWdhaW5zdCB0aW1lciBqaXR0ZXIgc28gd2UncmUg
bGVzcyBsaWtlbHkKKyAgICAvLyB0byBoaXQgdGhlIGRlc2lyZWQgcG9zaXRpb24gYW5kIHN0b3Ag
KGFuZCB0aHVzIGhhdmUgdG8gcmUtYWNjZWxlcmF0ZSwKKyAgICAvLyBjYXVzaW5nIGEgdmlzaWJs
ZSBoaXRjaCkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG5leHQgYXV0b3Njcm9sbCBpbmNyZW1lbnQu
CisgICAgLy8KKyAgICAvLyBUaHVzLCBmb3IgYXV0b3Njcm9sbC10aW1lci10cmlnZ2VyZWQgcmVx
dWVzdHMsIHRoZSBpZGVhbCBzdGVhZHktc3RhdGUKKyAgICAvLyBkaXN0YW5jZSB0byB0cmF2ZWwg
aW4gZWFjaCB0aW1lIGludGVydmFsIGlzOgorICAgIC8vICAgZmxvYXQgYW5pbWF0aW9uU3RlcCA9
IHN0ZXA7CisgICAgLy8gTm90ZSB0aGF0IHdoZW4gd2UncmUgbm90IGFscmVhZHkgYW5pbWF0aW5n
LCB0aGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMKKyAgICAvLyB0aGUgZGlzdGFuY2UgdG8gdGhl
IHRhcmdldCBwb3NpdGlvbi4gIFdlJ2xsIHJldHVybiB0byB0aGF0IGluIGEgbW9tZW50LgorICAg
IC8vCisgICAgLy8gRm9yIGtleWJvYXJkIGFuZCB3aGVlbCBzY3JvbGxzLCB3ZSBkb24ndCBrbm93
IHdoZW4gdGhlIG5leHQgaW5jcmVtZW50CisgICAgLy8gd2lsbCBiZSByZXF1ZXN0ZWQuICBJZiB3
ZSBzZXQgdGhlIHRhcmdldCB2ZWxvY2l0eSBiYXNlZCBvbiBob3cgZmFyIGF3YXkKKyAgICAvLyBm
cm9tIHRoZSB0YXJnZXQgcG9zaXRpb24gd2UgYXJlLCB0aGVuIGZvciBrZXlib2FyZC93aGVlbCBl
dmVudHMgdGhhdCBjb21lCisgICAgLy8gZmFzdGVyIHRoYW4gdGhlIGF1dG9zY3JvbGwgZGVsYXks
IHdlJ2xsIGFzeW1wdG90aWNhbGx5IGFwcHJvYWNoIHRoZQorICAgIC8vIHZlbG9jaXR5IG5lZWRl
ZCB0byBzdGF5IHNtb290aGx5IGluIHN5bmMgd2l0aCB0aGUgdXNlcidzIGFjdGlvbnM7IGZvcgor
ICAgIC8vIGV2ZW50cyB0aGF0IGNvbWUgc2xvd2VyLCB3ZSdsbCBzY3JvbGwgb25lIGluY3JlbWVu
dCBhbmQgdGhlbiBwYXVzZSB1bnRpbAorICAgIC8vIHRoZSBuZXh0IGV2ZW50IGZpcmVzLgorICAg
IGZsb2F0IGFuaW1hdGlvblN0ZXAgPSBhYnMobmV3UG9zIC0gKmRhdGEtPm1fY3VycmVudFBvcyk7
CisgICAgLy8gSWYgYSBrZXkgaXMgaGVsZCBkb3duIChvciB0aGUgd2hlZWwgY29udGludWFsbHkg
c3B1biksIHRoZW4gb25jZSB3ZSBoYXZlCisgICAgLy8gcmVhY2hlZCBhIHZlbG9jaXR5IGNsb3Nl
IHRvIHRoZSBzdGVhZHktc3RhdGUgdmVsb2NpdHksIHdlJ3JlIGxpa2VseSB0bworICAgIC8vIGhp
dCB0aGUgZGVzaXJlZCBwb3NpdGlvbiBhdCBhcm91bmQgdGhlIHNhbWUgdGltZSB3ZSdkIGV4cGVj
dCB0aGUgbmV4dAorICAgIC8vIGluY3JlbWVudCB0byBvY2N1ciAtLSBiYWQgYmVjYXVzZSBpdCBs
ZWFkcyB0byBoaXRjaGluZyBhcyBkZXNjcmliZWQgYWJvdmUKKyAgICAvLyAoaWYgYXV0b3Njcm9s
bC1iYXNlZCByZXF1ZXN0cyBkaWRuJ3QgcmVzdWx0IGluIGEgc21hbGwgYW1vdW50IG9mIGNvbnN0
YW50CisgICAgLy8gbGFnKS4gIFNvIGlmIHdlJ3JlIGNhbGxlZCBhZ2FpbiB3aGlsZSBhbHJlYWR5
IGFuaW1hdGluZywgd2Ugd2FudCB0byB0cmltCisgICAgLy8gdGhlIGFuaW1hdGlvblN0ZXAgc2xp
Z2h0bHkgdG8gbWFpbnRhaW4gbGFnIGxpa2Ugd2hhdCdzIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAv
LyAoSSBzYXkgIm1haW50YWluIiBzaW5jZSB3ZSdsbCBhbHJlYWR5IGJlIGxhZ2dlZCBkdWUgdG8g
dGhlIGFjY2VsZXJhdGlvbgorICAgIC8vIGR1cmluZyB0aGUgZmlyc3Qgc2Nyb2xsIHBlcmlvZC4p
CisgICAgLy8KKyAgICAvLyBSZW1lbWJlciB0aGF0IHRyaW1taW5nIHdvbid0IGNhdXNlIHVzIHRv
IGZhbGwgc3RlYWRpbHkgZnVydGhlciBiZWhpbmQKKyAgICAvLyBoZXJlLCBiZWNhdXNlIHRoZSBm
dXJ0aGVyIGJlaGluZCB3ZSBhcmUsIHRoZSBsYXJnZXIgdGhlIGJhc2Ugc3RlcCB2YWx1ZQorICAg
IC8vIGFib3ZlLiAgR2l2ZW4gdGhlIHNjcm9sbGluZyBhbGdvcml0aG0gaW4gYW5pbWF0ZVNjcm9s
bCgpLCB0aGUgcHJhY3RpY2FsCisgICAgLy8gZWZmZWN0IHdpbGwgYWN0dWFsbHkgYmUgdGhhdCwg
YXNzdW1pbmcgYSBjb25zdGFudCB0cmltIGZhY3Rvciwgd2UnbGwgbGFnCisgICAgLy8gYnkgYSBj
b25zdGFudCBhbW91bnQgZGVwZW5kaW5nIG9uIHRoZSByYXRlIGF0IHdoaWNoIGluY3JlbWVudHMg
b2NjdXIKKyAgICAvLyBjb21wYXJlZCB0byB0aGUgYXV0b3Njcm9sbCB0aW1lciBkZWxheS4gIFRo
ZSBleGFjdCBsYWcgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIGxhZyA9IHxzdGVwfCAqICgociAvIGsp
IC0gMSkKKyAgICAvLyBXaGVyZQorICAgIC8vICAgciA9IFRoZSByYXRpbyBvZiB0aGUgYXV0b3Nj
cm9sbCByZXBlYXQgZGVsYXksCisgICAgLy8gICAgICAgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCksIHRvIHRoZQorICAgIC8vICAgICAgIGtleS93
aGVlbCByZXBlYXQgZGVsYXkgKGkuZS4gPiAxIHdoZW4ga2V5cyByZXBlYXQgZmFzdGVyKQorICAg
IC8vICAgayA9IFRoZSB2ZWxvY2l0eSB0cmltIGNvbnN0YW50IGdpdmVuIGJlbG93CisgICAgLy8K
KyAgICAvLyBXZSB3YW50IHRvIGNob29zZSB0aGUgdHJpbSBmYWN0b3Igc3VjaCB0aGF0IGZvciBj
YWxscyB0aGF0IGNvbWUgYXQgdGhlCisgICAgLy8gYXV0b3Njcm9sbCB0aW1lciByYXRlLCB3ZSds
bCB3aW5kIHVwIHdpdGggdGhlIHNhbWUgbGFnIGFzIGluIHRoZQorICAgIC8vICJwZXJmZWN0IiBj
YXNlIGRlc2NyaWJlZCBhYm92ZSAob3IsIHRvIHB1dCBpdCBhbm90aGVyIHdheSwgd2UnbGwgZW5k
IHVwCisgICAgLy8gd2l0aCB8YW5pbWF0aW9uU3RlcHwgPT0gfHN0ZXB8ICogfG11bHRpcGxpZXJ8
IGRlc3BpdGUgdGhlIGFjdHVhbCBkaXN0YW5jZQorICAgIC8vIGNhbGN1bGF0ZWQgYWJvdmUgYmVp
bmcgbGFyZ2VyIHRoYW4gdGhhdCkuICBUaGlzIHdpbGwgcmVzdWx0IGluICJwZXJmZWN0IgorICAg
IC8vIGJlaGF2aW9yIGZvciBhdXRvc2Nyb2xsaW5nIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpYWwt
Y2FzZSBpdC4KKyAgICBpZiAoYWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0aW9uU3Rl
cCAvPSAoMi4wIC0gKCgxLjAgLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Nj
cm9sbFRpbWVyRGVsYXkoKSkgKiAoMC41ICogYWNjZWxlcmF0aW9uVGltZSgpICsgYW5pbWF0aW9u
VGltZXJEZWxheSkpKTsKKyAgICAvLyBUaGUgcmVzdWx0IG9mIGFsbCB0aGlzIGlzIHRoYXQgc2lu
Z2xlIGtleXByZXNzZXMgb3Igd2hlZWwgZmxpY2tzIHdpbGwKKyAgICAvLyBzY3JvbGwgaW4gdGhl
IHNhbWUgdGltZSBwZXJpb2QgYXMgc2luZ2xlIHByZXNzZXMgb2Ygc2Nyb2xsYmFyIGVsZW1lbnRz
OworICAgIC8vIGhvbGRpbmcgdGhlIG1vdXNlIGRvd24gb24gYSBzY3JvbGxiYXIgcGFydCB3aWxs
IHNjcm9sbCBhcyBmYXN0IGFzCisgICAgLy8gcG9zc2libGUgd2l0aG91dCBoaXRjaGluZzsgYW5k
IG90aGVyIHJlcGVhdGVkIHNjcm9sbCBldmVudHMgd2lsbCBhbHNvCisgICAgLy8gc2Nyb2xsIHdp
dGggdGhlIHNhbWUgdGltZSBsYWcgYXMgaG9sZGluZyBkb3duIHRoZSBtb3VzZSBvbiBhIHNjcm9s
bGJhcgorICAgIC8vIHBhcnQuCisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSBhbmltYXRp
b25TdGVwIC8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRl
bGF5KCk7CisKKyAgICAvLyBJZiB3ZSdyZSBub3QgYWxyZWFkeSBzY3JvbGxpbmcsIHN0YXJ0Lgor
ICAgIGlmICghYWxyZWFkeUFuaW1hdGluZykKKyAgICAgICAgYW5pbWF0ZVNjcm9sbChkYXRhKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2V0U2Nyb2xs
UG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBmbG9hdCBwb3MpCit7CisgICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0
YTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKKyAgICAqZGF0YS0+bV9j
dXJyZW50UG9zID0gcG9zOworICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKKyAgICBkYXRh
LT5tX2N1cnJlbnRWZWxvY2l0eSA9IDA7CisgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAw
OworfQorCisvLyBzdGF0aWMKK2RvdWJsZSBTY3JvbGxBbmltYXRvcldpbjo6YWNjZWxlcmF0aW9u
VGltZSgpCit7CisgICAgLy8gV2UgZWxlY3QgdG8gdXNlIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIGFzCisgICAgLy8gdGhlIGxlbmd0aCBvZiB0
aW1lIHdlJ2xsIHRha2UgdG8gYWNjZWxlcmF0ZSBmcm9tIDAgdG8gb3VyIHRhcmdldAorICAgIC8v
IHZlbG9jaXR5LiAgQ2hvb3NpbmcgYSBsYXJnZXIgdmFsdWUgd291bGQgcHJvZHVjZSBhIG1vcmUg
cHJvbm91bmNlZAorICAgIC8vIGFjY2VsZXJhdGlvbiBlZmZlY3QuCisgICAgcmV0dXJuIFNjcm9s
bGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFu
aW1hdG9yV2luPiogdGltZXIpCit7CisgICAgYW5pbWF0ZVNjcm9sbCgodGltZXIgPT0gJm1faG9y
aXpvbnRhbERhdGEubV9hbmltYXRpb25UaW1lcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3Zl
cnRpY2FsRGF0YSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnN0b3BBbmltYXRpb25U
aW1lcklmTmVlZGVkKFBlckF4aXNEYXRhKiBkYXRhKQoreworICAgIGlmIChkYXRhLT5tX2FuaW1h
dGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3Rv
cCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Nyb2xsKFBlckF4aXNE
YXRhKiBkYXRhKQoreworICAgIC8vIE5vdGUgb24gc21vb3RoIHNjcm9sbGluZyBwZXJmIHZlcnN1
cyBub24tc21vb3RoIHNjcm9sbGluZyBwZXJmOgorICAgIC8vIFRoZSB0b3RhbCB0aW1lIHRvIHBl
cmZvcm0gYSBjb21wbGV0ZSBzY3JvbGwgaXMgZ2l2ZW4gYnkKKyAgICAvLyAgIHQgPSB0MCArIDAu
NXRBIC0gdEQgKyB0UworICAgIC8vIFdoZXJlCisgICAgLy8gICB0MCA9IFRoZSB0aW1lIHRvIHBl
cmZvcm0gdGhlIHNjcm9sbCB3aXRob3V0IHNtb290aCBzY3JvbGxpbmcKKyAgICAvLyAgIHRBID0g
VGhlIGFjY2VsZXJhdGlvbiB0aW1lLAorICAgIC8vICAgICAgICBTY3JvbGxiYXJUaGVtZTo6bmF0
aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSAoc2VlIGJlbG93KQorICAgIC8vICAg
dEQgPSB8YW5pbWF0aW9uVGltZXJEZWxheXwKKyAgICAvLyAgIHRTID0gQSB2YWx1ZSBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGVyZm9ybSBhCisgICAgLy8gICAg
ICAgIHNpbmdsZSBzY3JvbGwgaW5jcmVtZW50LCBpLmUuIHRoZSB3b3JrIGRvbmUgZHVlIHRvIGNh
bGxpbmcKKyAgICAvLyAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCgpICh+MCBmb3Igc2lt
cGxlIHBhZ2VzLCBsYXJnZXIgZm9yIGNvbXBsZXgKKyAgICAvLyAgICAgICAgcGFnZXMpLgorICAg
IC8vCisgICAgLy8gQmVjYXVzZSB0QSBhbmQgdEQgYXJlIGZhaXJseSBzbWFsbCwgdGhlIHRvdGFs
IGxhZyAoYXMgdXNlcnMgcGVyY2VpdmUgaXQpCisgICAgLy8gaXMgbmVnbGlnaWJsZSBmb3Igc2lt
cGxlIHBhZ2VzIGFuZCByb3VnaGx5IHRTIGZvciBjb21wbGV4IHBhZ2VzLiAgV2l0aG91dAorICAg
IC8vIGtub3dpbmcgaW4gYWR2YW5jZSBob3cgbGFyZ2UgdFMgaXMgaXQncyBoYXJkIHRvIGRvIGJl
dHRlciB0aGFuIHRoaXMuCisgICAgLy8gUGVyaGFwcyB3ZSBjb3VsZCB0cnkgdG8gcmVtZW1iZXIg
cHJldmlvdXMgdmFsdWVzIGFuZCBmb3J3YXJkLWNvbXBlbnNhdGUuCisKKworICAgIC8vIFdlIHdh
bnQgdG8gdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIHRpbWUgaXQncyBi
ZWVuIHNpbmNlCisgICAgLy8gb3VyIGxhc3QgdXBkYXRlLiAgVGhpcyBtYXkgYmUgbG9uZ2VyIHRo
YW4gb3VyIGlkZWFsIHRpbWUsIGVzcGVjaWFsbHkgaWYKKyAgICAvLyB0aGUgcGFnZSBpcyBjb21w
bGV4IG9yIHRoZSBzeXN0ZW0gaXMgc2xvdy4KKyAgICAvLworICAgIC8vIFRvIGF2b2lkIGZlZWxp
bmcgbGFnZ3ksIGlmIHdlJ3ZlIGp1c3Qgc3RhcnRlZCBzbW9vdGggc2Nyb2xsaW5nIHdlIHByZXRl
bmQKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IGFjY2VsZXJhdGVkIGZvciBvbmUgaWRlYWwgaW50ZXJ2
YWwsIHNvIHRoYXQgd2UnbGwgc2Nyb2xsIGF0CisgICAgLy8gbGVhc3Qgc29tZSBkaXN0YW5jZSBp
bW1lZGlhdGVseS4KKyAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gZGF0YS0+bV9jdXJy
ZW50VmVsb2NpdHkgPyAoV1RGOjpjdXJyZW50VGltZSgpIC0gZGF0YS0+bV9sYXN0QW5pbWF0aW9u
VGltZSkgOiBhbmltYXRpb25UaW1lckRlbGF5OworCisgICAgLy8gRmlndXJlIG91dCBob3cgZmFy
IHdlJ3ZlIGFjdHVhbGx5IHRyYXZlbGVkIGFuZCB1cGRhdGUgb3VyIGN1cnJlbnQKKyAgICAvLyB2
ZWxvY2l0eS4KKyAgICBmbG9hdCBkaXN0YW5jZVRyYXZlbGVkOworICAgIGlmIChkYXRhLT5tX2N1
cnJlbnRWZWxvY2l0eSA8IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgIC8vIFdl
IGFjY2VsZXJhdGUgYXQgYSBjb25zdGFudCByYXRlIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVk
IHZlbG9jaXR5LgorICAgICAgICBmbG9hdCBhY2NlbGVyYXRpb25SYXRlID0gZGF0YS0+bV9kZXNp
cmVkVmVsb2NpdHkgLyBhY2NlbGVyYXRpb25UaW1lKCk7CisKKyAgICAgICAgLy8gRmlndXJlIG91
dCB3aGV0aGVyIGNvbnRhbnQgYWNjZWxlcmF0aW9uIGhhcyBjYXVzZWQgdXMgdG8gcmVhY2ggb3Vy
CisgICAgICAgIC8vIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAgICAgZmxvYXQgcG90ZW50aWFsVmVs
b2NpdHlDaGFuZ2UgPSBhY2NlbGVyYXRpb25SYXRlICogbGFzdFNjcm9sbEludGVydmFsOworICAg
ICAgICBmbG9hdCBwb3RlbnRpYWxOZXdWZWxvY2l0eSA9IGRhdGEtPm1fY3VycmVudFZlbG9jaXR5
ICsgcG90ZW50aWFsVmVsb2NpdHlDaGFuZ2U7CisgICAgICAgIGlmIChwb3RlbnRpYWxOZXdWZWxv
Y2l0eSA+IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5KSB7CisgICAgICAgICAgICAvLyBXZSByZWFj
aGVkIHRoZSB0YXJnZXQgdmVsb2NpdHkgYXQgc29tZSBwb2ludCBiZXR3ZWVuIG91ciBsYXN0Cisg
ICAgICAgICAgICAvLyB1cGRhdGUgYW5kIG5vdy4gIFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBjYW4g
YmUgY2FsY3VsYXRlZCBpbiB0d28KKyAgICAgICAgICAgIC8vIHBpZWNlczogdGhlIGRpc3RhbmNl
IHRyYXZlbGVkIHdoaWxlIGFjY2VsZXJhdGluZywgYW5kIHRoZQorICAgICAgICAgICAgLy8gZGlz
dGFuY2UgdHJhdmVsZWQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHRhcmdldCB2ZWxvY2l0eS4KKyAgICAg
ICAgICAgIGZsb2F0IGFjdHVhbFZlbG9jaXR5Q2hhbmdlID0gZGF0YS0+bV9kZXNpcmVkVmVsb2Np
dHkgLSBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eTsKKyAgICAgICAgICAgIGZsb2F0IGFjY2VsZXJh
dGlvbkludGVydmFsID0gYWN0dWFsVmVsb2NpdHlDaGFuZ2UgLyBhY2NlbGVyYXRpb25SYXRlOwor
ICAgICAgICAgICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIHVuZGVyIGNvbnN0YW50IGFjY2Vs
ZXJhdGlvbiBpcyB0aGUgYXJlYQorICAgICAgICAgICAgLy8gdW5kZXIgYSBsaW5lIHNlZ21lbnQg
d2l0aCBhIGNvbnN0YW50IHJpc2luZyBzbG9wZS4gIEJyZWFrIHRoaXMKKyAgICAgICAgICAgIC8v
IGludG8gYSB0cmlhbmd1bGFyIHBvcnRpb24gYXRvcCBhIHJlY3Rhbmd1bGFyIHBvcnRpb24gYW5k
IHN1bS4KKyAgICAgICAgICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAoKGRhdGEtPm1fY3VycmVudFZl
bG9jaXR5ICsgKGFjdHVhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogYWNjZWxlcmF0aW9uSW50ZXJ2
YWwpOworICAgICAgICAgICAgLy8gVGhlIGRpc3RhbmNlIHRyYXZlbGVkIGF0IHRoZSB0YXJnZXQg
dmVsb2NpdHkgaXMgc2ltcGx5CisgICAgICAgICAgICAvLyAodGFyZ2V0IHZlbG9jaXR5KSAqIChy
ZW1haW5pbmcgdGltZSBhZnRlciBhY2NlbGVyYXRpbmcpLgorICAgICAgICAgICAgZGlzdGFuY2VU
cmF2ZWxlZCArPSAoZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgKiAobGFzdFNjcm9sbEludGVydmFs
IC0gYWNjZWxlcmF0aW9uSW50ZXJ2YWwpKTsKKyAgICAgICAgICAgIGRhdGEtPm1fY3VycmVudFZl
bG9jaXR5ID0gZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBDb25zdGFudCBhY2NlbGVyYXRpb24gdGhyb3VnaCB0aGUgZW50aXJlIHRpbWUg
aW50ZXJ2YWwuCisgICAgICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gKGRhdGEtPm1fY3VycmVu
dFZlbG9jaXR5ICsgKHBvdGVudGlhbFZlbG9jaXR5Q2hhbmdlIC8gMikpICogbGFzdFNjcm9sbElu
dGVydmFsOworICAgICAgICAgICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSBwb3RlbnRpYWxO
ZXdWZWxvY2l0eTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFs
cmVhZHkgcmVhY2hlZCB0aGUgdGFyZ2V0IHZlbG9jaXR5LCBzbyB0aGUgZGlzdGFuY2Ugd2UndmUK
KyAgICAgICAgLy8gdHJhdmVsZWQgaXMgc2ltcGx5IChjdXJyZW50IHZlbG9jaXR5KSAqIChlbGFw
c2VkIHRpbWUpLgorICAgICAgICBkaXN0YW5jZVRyYXZlbGVkID0gZGF0YS0+bV9jdXJyZW50VmVs
b2NpdHkgKiBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgICAgIC8vIElmIG91ciBkZXNpcmVkIHZl
bG9jaXR5IGhhcyBkZWNyZWFzZWQsIGRyb3AgdGhlIGN1cnJlbnQgdmVsb2NpdHkgdG9vLgorICAg
ICAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5Owor
ICAgIH0KKworICAgIC8vIE5vdyB1cGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBiYXNlZCBvbiB0
aGUgZGlzdGFuY2UgdHJhdmVsZWQuCisgICAgaWYgKGRpc3RhbmNlVHJhdmVsZWQgPj0gYWJzKGRh
dGEtPm1fZGVzaXJlZFBvcyAtICpkYXRhLT5tX2N1cnJlbnRQb3MpKSB7CisgICAgICAgIC8vIFdl
J3ZlIHRyYXZlbGVkIGZhciBlbm91Z2ggdG8gcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uICBT
dG9wIHNtb290aAorICAgICAgICAvLyBzY3JvbGxpbmcuCisgICAgICAgICpkYXRhLT5tX2N1cnJl
bnRQb3MgPSBkYXRhLT5tX2Rlc2lyZWRQb3M7CisgICAgICAgIGRhdGEtPm1fY3VycmVudFZlbG9j
aXR5ID0gMDsKKyAgICAgICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIE5vdCB5ZXQgYXQgdGhlIHRhcmdldCBwb3NpdGlvbi4gIFRyYXZlbCB0
b3dhcmRzIGl0IGFuZCBzZXQgdXAgdGhlCisgICAgICAgIC8vIG5leHQgdXBkYXRlLgorICAgICAg
ICBpZiAoKmRhdGEtPm1fY3VycmVudFBvcyA+IGRhdGEtPm1fZGVzaXJlZFBvcykKKyAgICAgICAg
ICAgIGRpc3RhbmNlVHJhdmVsZWQgPSAtZGlzdGFuY2VUcmF2ZWxlZDsKKyAgICAgICAgKmRhdGEt
Pm1fY3VycmVudFBvcyArPSBkaXN0YW5jZVRyYXZlbGVkOworICAgICAgICBkYXRhLT5tX2FuaW1h
dGlvblRpbWVyLnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICAgICAgZGF0
YS0+bV9sYXN0QW5pbWF0aW9uVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICB9CisgICAg
bV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQoKm1faG9yaXpv
bnRhbERhdGEubV9jdXJyZW50UG9zLCAqbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50UG9zKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvcldpbl9oCisj
ZGVmaW5lIFNjcm9sbEFuaW1hdG9yV2luX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3Jv
bGxBbmltYXRvcldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2Ny
b2xsQW5pbWF0b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+U2Nyb2xsQW5p
bWF0b3JXaW4oKTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBmbG9hdCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBlckF4aXNEYXRh
IHsKKyAgICAgICAgUGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JXaW4qIHBhcmVudCwgZmxvYXQq
IGN1cnJlbnRQb3MpOworCisgICAgICAgIGZsb2F0KiBtX2N1cnJlbnRQb3M7CisgICAgICAgIGZs
b2F0IG1fZGVzaXJlZFBvczsKKyAgICAgICAgZmxvYXQgbV9jdXJyZW50VmVsb2NpdHk7CisgICAg
ICAgIGZsb2F0IG1fZGVzaXJlZFZlbG9jaXR5OworICAgICAgICBkb3VibGUgbV9sYXN0QW5pbWF0
aW9uVGltZTsKKyAgICAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JXaW4+IG1fYW5pbWF0aW9uVGlt
ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBkb3VibGUgYWNjZWxlcmF0aW9uVGltZSgpOworICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgYW5pbWF0aW9uVGltZXJEZWxheTsKKworICAgIHZvaWQgYW5p
bWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JvbGxBbmltYXRvcldpbj4qKTsKKyAgICB2b2lkIHN0
b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKFBlckF4aXNEYXRhKik7CisgICAgdm9pZCBhbmltYXRl
U2Nyb2xsKFBlckF4aXNEYXRhKik7CisKKyAgICBQZXJBeGlzRGF0YSBtX2hvcml6b250YWxEYXRh
OworICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOworfTsKKworfQorI2VuZGlmCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsMjAgQEAgSW50UG9pbnQgU2Nyb2xs
Vmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zm
c2V0LndpZHRoKCksIG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCitpbnQgU2Nyb2xsVmll
dzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sK
KyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5n
ZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBz
Y3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5zZXRWYWx1ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cisg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKK30K
Kwogdm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7
CiAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCkBAIC00NDEsNyArNDU1LDcg
QEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0gICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpLCBTY3JvbGxiYXI6Ok5v
dEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2Vk
KQogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRh
dGlvbihmYWxzZSk7IAogICAgIH0gCkBAIC00NjMsNyArNDc3LDcgQEAgdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0CiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7
CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0
LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFs
dWUoc2Nyb2xsLmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFs
dWUoc2Nyb2xsLmhlaWdodCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAg
ICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAgLTY3
Myw3ICs2ODcsMTIgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQog
ICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgIGRlbHRhWSA9IC1kZWx0
YVk7CiAgICAgICAgIH0KLSAgICAgICAgc2Nyb2xsQnkoSW50U2l6ZSgtZGVsdGFYLCAtZGVsdGFZ
KSk7CisKKyAgICAgICAgLy8gU2hvdWxkIHdlIGZhbGwgYmFjayBvbiBzY3JvbGxCeSgpIGlmIHRo
ZXJlIGlzIG5vIHNjcm9sbGJhciBmb3IgYSBub24temVybyBkZWx0YT8KKyAgICAgICAgaWYgKGRl
bHRhWSAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBkZWx0YVkpOworICAgICAgICBp
ZiAoZGVsdGFYICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWCk7
CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gNjY4OTcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsOSBAQCBjbGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCwgcHVibGljCiBwdWJsaWM6
CiAgICAgflNjcm9sbFZpZXcoKTsKIAotICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbi4g
RnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgorICAgIC8vIFNjcm9sbGJhckNsaWVudCBm
dW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCisgICAgdmlydHVhbCBp
bnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIAog
ICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuIFRoZSBTY3JvbGxW
aWV3IHdpbGwgY29tbXVuaWNhdGUgc2Nyb2xscyBhbmQgcmVwYWludHMgdG8gdGhlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDEyICsxMDEsMTIgQEAgU2Nyb2xs
YmFyOjp+U2Nyb2xsYmFyKCkKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMp
OwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUoaW50IHYpCitib29sIFNjcm9sbGJhcjo6
c2V0VmFsdWUoaW50IHYsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCiB7CiAgICAgdiA9IG1heChtaW4o
diwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7CiAgICAgaWYgKHZhbHVlKCkgPT0g
dikKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgot
ICAgIHNldEN1cnJlbnRQb3Modik7CisgICAgc2V0Q3VycmVudFBvcyh2LCBzb3VyY2UpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xNTQsOCArMTU0LDEwIEBAIGJvb2wgU2Nyb2xsYmFyOjpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGQKICAgICB9CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3Jv
bGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKICAgICAgICAgbXVsdGlwbGllciA9IC1t
dWx0aXBsaWVyOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5z
Y3JvbGwobV9vcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogCi0g
ICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11
bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXpl
KSksIDAuMGYpKTsKKyAgICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBv
cyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSAt
IG1fdmlzaWJsZVNpemUpKSwgMC4wZiksIE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKIHZv
aWQgU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYigpCkBAIC0yODcsMTEgKzI4OSwxNCBAQCB2b2lkIFNj
cm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgZWxzZSBpZiAoZGVsdGEgPCAwKQogICAg
ICAgICBkZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKICAgICBpZiAoZGVsdGEpCi0gICAg
ICAgIHNldEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICog
bWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgc2V0Q3VycmVudFBv
cyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJh
Y2tMZW4gLSB0aHVtYkxlbiksIE5vdEZyb21TY3JvbGxBbmltYXRvcik7CiB9CiAKLWJvb2wgU2Ny
b2xsYmFyOjpzZXRDdXJyZW50UG9zKGZsb2F0IHBvcykKK2Jvb2wgU2Nyb2xsYmFyOjpzZXRDdXJy
ZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJjZSkKIHsKKyAgICBpZiAoKHNvdXJj
ZSAhPSBGcm9tU2Nyb2xsQW5pbWF0b3IpICYmIGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7CisK
ICAgICBpZiAocG9zID09IG1fY3VycmVudFBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMzYsNyArMzQxLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZv
cgogewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewogICAgICAgICBpZiAo
dGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAg
ICAgIHNldEN1cnJlbnRQb3MobV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxi
YXIgPyAKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3co
ZXZ0LnBvcygpKS54KCkgOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCShyZXZpc2lvbiA2Njg5NykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDExIEBAIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIAogY2xhc3MgU2Nyb2xsYmFyIDog
cHVibGljIFdpZGdldCB7CiBwdWJsaWM6CisgICAgZW51bSBTY3JvbGxTb3VyY2UgeworICAgICAg
ICBGcm9tU2Nyb2xsQW5pbWF0b3IsCisgICAgICAgIE5vdEZyb21TY3JvbGxBbmltYXRvciwKKyAg
ICB9OworCiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyKCk7CiAKICAgICAvLyBNdXN0IGJlIGltcGxl
bWVudGVkIGJ5IHBsYXRmb3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhlIFNjcm9sbGJhciBi
YXNlIGNsYXNzLiAgUmlnaHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQgaXMgbm90IHVzaW5n
IHRoZSBiYXNlIGNsYXNzIGlzIEdUSy4KQEAgLTc1LDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0KTsKIAogICAgIHZvaWQgc2V0
U3RlcHMoaW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0ZXAsIGludCBwaXhlbHNQZXJTdGVwID0gMSk7
Ci0gICAgYm9vbCBzZXRWYWx1ZShpbnQpOworICAgIGJvb2wgc2V0VmFsdWUoaW50LCBTY3JvbGxT
b3VyY2Ugc291cmNlKTsKICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBp
bnQgdG90YWxTaXplKTsKICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2Vk
UG9zID0gcDsgfQogCkBAIC0xNjcsNyArMTcyLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zKTsKKyAgICBib29sIHNldEN1cnJlbnRQb3Mo
ZmxvYXQgcG9zLCBTY3JvbGxTb3VyY2Ugc291cmNlKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhckNsaWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhckNsaWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorCisjaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JvbGxiYXJD
bGllbnQ6OlNjcm9sbGJhckNsaWVudCgpCisgICAgOiBtX3Njcm9sbEFuaW1hdG9yKFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGUodGhpcykpCit7Cit9CisKK1Njcm9sbGJhckNsaWVudDo6flNjcm9sbGJh
ckNsaWVudCgpCit7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBtX3Njcm9sbEFuaW1h
dG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsK
K30KKwordm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQoreworICAg
IG1fc2Nyb2xsQW5pbWF0b3ItPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihvcmll
bnRhdGlvbiwgcG9zKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJD
bGllbnQuaAkocmV2aXNpb24gNjY4OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMSArMjYsMjggQEAKICNpZm5kZWYgU2Nyb2xs
YmFyQ2xpZW50X2gKICNkZWZpbmUgU2Nyb2xsYmFyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkludFBv
aW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3Jv
bGxBbmltYXRvcjsKKwogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5TY3JvbGxiYXJDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciopID0gMDsKKyAgICBTY3JvbGxiYXJDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5T
Y3JvbGxiYXJDbGllbnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgIGJvb2wgc2Nyb2xsKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CisgICAgdm9pZCBzZXRTY3JvbGxQ
b3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IGZsb2F0IHBvcyk7CiAKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9s
bE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgPSAwOwotICAgIAogICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KQEAgLTUyLDIxICs1OSwy
MSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNv
bnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGJhclJlY3QpOwogICAgIH0KLSAgICAKICAgICB2
aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KHBhcmVudFJlY3QpOwogICAgIH0KLSAgICAKICAgICB2aXJ0dWFsIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhz
Y3JvbGxiYXJQb2ludCk7CiAgICAgfQotICAgIAogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9p
bnQpOwogICAgIH0KKworcHJpdmF0ZToKKyAgICBPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Ny
b2xsQW5pbWF0b3I7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJh
bWVTY3JvbGxiYXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL01h
aW5GcmFtZVNjcm9sbGJhckd0ay5jcHAJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDcgKzEwOCw3IEBAIHZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjp1cGRhdGVUaHVtYlAKIAog
dm9pZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6Omd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50
KiwgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrKiB0aGF0KQogewotICAgIHRoYXQtPnNldFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVu
dC5nZXQoKSkpKTsKKyAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1
c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQuZ2V0KCkpKSwgTm90RnJvbVNjcm9s
bEFuaW1hdG9yKTsKIH0KIAogdm9pZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA2Njg5NykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMSArNzYsMTEgQEAg
Ym9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBsYXRmbwogICAgICAgICBjb25zdCBR
UG9pbnQgcG9zID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2ZW50LnBvcygpKTsKICAg
ICAgICAgbW92ZVRodW1iKGhvcml6b250YWwgPyBwb3MueCgpIDogcG9zLnkoKSk7CiAgICAgfSBl
bHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxUb3ApCi0gICAgICAgIHNldFZhbHVl
KDApOworICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwg
U2Nyb2xsQnlEb2N1bWVudCk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Ny
b2xsQm90dG9tKQotICAgICAgICBzZXRWYWx1ZShtYXhpbXVtKCkpOworICAgICAgICBzY3JvbGwo
aG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7
CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZVVwKQotICAgICAgICBzY3Jv
bGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQ6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOworICAg
ICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlQ
YWdlKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlRG93bikKICAgICAg
ICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
UGFnZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVXApCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDY2ODk3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjY0LDYgKzY2NCwxNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYK
ICAgICAgICAgOjpSZWxlYXNlREMobV9wb3B1cCwgbG9jYWxEQyk7CiB9CiAKK2ludCBQb3B1cE1l
bnVXaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0
Cit7CisgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxsU2Nyb2xsYmFyKSAmJiBt
X3Njcm9sbGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZp
c2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBQb3B1cE1lbnVXaW46OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9zY3Jv
bGxiYXIpCisgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxi
YXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cit9CisKIHZvaWQgUG9wdXBNZW51V2luOjp2YWx1ZUNo
YW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA2Njg5NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw2ICs5MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3Vz
ZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0KIAogICAgIC8vIFNj
cm9sbEJhckNsaWVudAorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRhdGFHcmlkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
YXRhR3JpZC5jcHAJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RGF0YUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDE3IEBAIHZvaWQgUmVu
ZGVyRGF0YUdyaWQ6OnBhaW50Q29sdW1uSGVhZGVyKEQKIH0KIAogLy8gU2Nyb2xsaW5nIGltcGxl
bWVudGF0aW9uIGZ1bmN0aW9ucworaW50IFJlbmRlckRhdGFHcmlkOjpzY3JvbGxTaXplKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVu
dGF0aW9uID09IFZlcnRpY2FsbFNjcm9sbGJhcikgJiYgbV92QmFyKSA/IChtX3ZCYXItPnRvdGFs
U2l6ZSgpIC0gbV92QmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyRGF0
YUdyaWQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNl
dCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55
KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKK30KKwogdm9pZCBSZW5kZXJEYXRh
R3JpZDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAkocmV2aXNpb24gNjY4OTcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgSFRNTERhdGFHcmlkRWxlbWVudCogZ3JpZEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRGF0YUdyaWRFbGVtZW50Kj4obm9k
ZSgpKTsgfQogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYzLDkgKzEzNjMsOSBAQCB2
b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwKIAogICAgIGlmICh1cGRhdGVT
Y3JvbGxiYXJzKSB7CiAgICAgICAgIGlmIChtX2hCYXIpCi0gICAgICAgICAgICBtX2hCYXItPnNl
dFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7CisgICAgICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNj
cm9sbFhPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgICAg
ICBpZiAobV92QmFyKQotICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFkpOwor
ICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFksIFNjcm9sbGJhcjo6Tm90RnJv
bVNjcm9sbEFuaW1hdG9yKTsKICAgICB9CiAKICAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIERP
TSBldmVudC4KQEAgLTE2MTgsNiArMTYxOCwyMCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUo
Y29uc3QgUGxhdGZvcm1NCiAgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQg
YWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50
IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAoraW50IFJlbmRlckxheWVyOjpzY3JvbGxT
aXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFNjcm9s
bGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/
IG1faEJhciA6IG1fdkJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxi
YXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnNldFZhbHVl
KG9mZnNldC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBpZiAobV92
QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJv
bVNjcm9sbEFuaW1hdG9yKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopCiB7CiAgICAgLy8gVXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHNjcm9sbGJh
cnMuCkBAIC0yMDY4LDcgKzIwODIsNyBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0CiAgICAgICAgIC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGlu
ZyB3b3JraW5nIChzZWUgaG93IHNjcm9sbFhPZmZzZXQoKQogICAgICAgICAvLyBkaWZmZXJzIGZy
b20gc2Nyb2xsWU9mZnNldCgpIHRvIGdldCBhbiBpZGVhIG9mIHdoeSB0aGUgaG9yaXpvbnRhbCBh
bmQKICAgICAgICAgLy8gdmVydGljYWwgc2Nyb2xsYmFycyBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlm
ZmVyZW50bHkpLgotICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSk7Cisg
ICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBTY3JvbGxiYXI6Ok5vdEZy
b21TY3JvbGxBbmltYXRvcik7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IGJveC0+Y2xpZW50SGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDYgKzUxOCw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCiAgICAgLy8gU2Nyb2xsQmFyQ2xp
ZW50IGludGVyZmFjZQorICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlz
aW9uIDY2ODk3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRv
UmV2ZWFsRWxlbWVuCiAKICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgIGlmICht
X3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCk7CisgICAgICAg
IG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MjMsNiArNTIzLDE3IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmUKICAgICBlbGVtZW50LT5kaXNw
YXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIAoraW50IFJlbmRlckxpc3RCb3g6OnNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAg
cmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAo
bV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCit2
b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50
UG9pbnQmIG9mZnNldCkKK3sKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnNldFZh
bHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKK30KKwogdm9p
ZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKIHsKICAgICBpbnQgbmV3
T2Zmc2V0ID0gbV92QmFyLT52YWx1ZSgpOwpAQCAtNTc4LDcgKzU4OSw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICAgICAgcmV0dXJuOwogICAgIG1faW5k
ZXhPZmZzZXQgPSBpbmRleDsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZh
bHVlKGluZGV4KTsKKyAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwgU2Nyb2xsYmFyOjpO
b3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDY2ODk3KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2
ICs5Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIC8vIFNjcm9s
bGJhckNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNj
cm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZv
aWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBi
b29sIGlzQWN0aXZlKCkgY29uc3Q7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2ODk3KQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIx
IEBACisyMDEwLTA5LTA3ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KKworICAgICAgICBBZGQgc21vb3RoIHNj
cm9sbGluZyBmcmFtZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAg
ICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOiBQbHVtYiBuZXcgU2Nyb2xsYmFyQ2xpZW50IGZ1
bmN0aW9ucy4gIEFsbG93IHdoZWVsIHNjcm9sbHMgdG8gYmUgYW5pbWF0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxi
YXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbk1v
dXNlV2hlZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOiBQbHVtYiBuZXcg
U2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBzcmMvd2luL1dlYklucHV0RXZl
bnRGYWN0b3J5LmNwcDogVXBkYXRlIGNvbW1lbnRzIG5vdyB0aGF0IHdlIGhhdmUgc21vb3RoIHNj
cm9sbGluZy4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXNlV2hl
ZWxFdmVudCk6CisKIDIwMTAtMDktMDcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjY4ODYuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDY2ODk3
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25z
dAogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKGludCBwb3NpdGlvbikKIHsKLSAg
ICBtX3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRpb24pOworICAgIG1fc2Nyb2xsYmFyLT5zZXRW
YWx1ZShwb3NpdGlvbiwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogfQogCiB2
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShpbnQgc2l6ZSkKQEAgLTIxOCw3
ICsyMTgsNyBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbChjb25zCiAgICAg
ICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgICAgICBkZWx0YSAqPSAt
MTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShtX3Nj
cm9sbGJhci0+dmFsdWUoKSAtIGRlbHRhKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zY3Jv
bGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
V2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwLCBXZWJDb3JlOjpTY3JvbGxC
eVBpeGVsLCBkZWx0YSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBA
IC0yNjIsNiArMjYyLDE2IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0
IFcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxT
aXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAorewor
ICAgIHJldHVybiAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8g
KG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6
IDA7Cit9CisKK3ZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsYmFy
LT5zZXRWYWx1ZSgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5p
bWF0b3IpOworfQorCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3Jl
OjpTY3JvbGxiYXIqKQogewogICAgIG1fY2xpZW50LT52YWx1ZUNoYW5nZWQodGhpcyk7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkocmV2aXNpb24gNjY4OTcpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZl
bnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFyQ2xp
ZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CiAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL3dpbi9XZWJJbnB1dEV2ZW50RmFjdG9y
eS5jcHAJKHJldmlzaW9uIDY2ODk3KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy93aW4vV2ViSW5w
dXRFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDkgQEAgV2Vi
TW91c2VXaGVlbEV2ZW50IFdlYklucHV0RXZlbnRGYWN0b3J5OgogICAgIC8vIHNtb290aCBzY3Jv
bGxpbmcgd2hpbGUgRmlyZWZveCBkb2Vzbid0LCBzbyBpdCBjYW4gZ2V0IGF3YXkgd2l0aCBzb21l
d2hhdAogICAgIC8vIGxhcmdlciBzY3JvbGwgdmFsdWVzIHdpdGhvdXQgZmVlbGluZyBhcyBqZXJr
eS4gIEhlcmUgd2UgdXNlIDEwMCBweCBwZXIKICAgICAvLyB0aHJlZSBsaW5lcyAodGhlIGRlZmF1
bHQgc2Nyb2xsIGFtb3VudCBpcyB0aHJlZSBsaW5lcyBwZXIgd2hlZWwgdGljaykuCisgICAgLy8g
RXZlbiB0aG91Z2ggd2UgaGF2ZSBzbW9vdGggc2Nyb2xsaW5nLCB3ZSBkb24ndCBtYWtlIHRoaXMg
YXMgbGFyZ2UgYXMgSUUKKyAgICAvLyBiZWNhdXNlIHN1YmplY3RpdmVseSBJRSBmZWVscyBsaWtl
IGl0IHNjcm9sbHMgZmFydGhlciB0aGFuIHlvdSB3YW50IHdoaWxlCisgICAgLy8gcmVhZGluZyBh
cnRpY2xlcy4KICAgICBzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9
IDEwMC4wZiAvIDMuMGY7CiAgICAgd2hlZWxEZWx0YSAvPSBXSEVFTF9ERUxUQTsKICAgICBmbG9h
dCBzY3JvbGxEZWx0YSA9IHdoZWVsRGVsdGE7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2ODk3KQorKysgV2Vi
S2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA5
LTA3ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBEYXZpZCBIeWF0dC4KKworICAgICAgICBBZGQgc21vb3RoIHNjcm9sbGluZyBmcmFt
ZXdvcmssIGFuZCBhIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjM1NgorCisgICAgICAgICogQXBpL3F3ZWJm
cmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OnNldFNjcm9sbEJhclZhbHVlKToKKwogMjAx
MC0wOS0wNiAgRGllZ28gR29uemFsZXogIDxkaWVnb2hjZ0B3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lv
biA2Njg5NykKKysrIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTI5LDcgKzkyOSw3IEBAIHZvaWQgUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1ZShRdDo6
T3IKICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzY3Jv
bGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKSkKICAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsQmFy
TWF4aW11bShvcmllbnRhdGlvbik7Ci0gICAgICAgIHNiLT5zZXRWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgIHNiLT5zZXRWYWx1ZSh2YWx1ZSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3Ip
OwogICAgIH0KIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>