<?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>54417</bug_id>
          
          <creation_ts>2011-02-14 15:30:48 -0800</creation_ts>
          <short_desc>[chromium] Add a basic gesture recognizer to the Chromium platform</short_desc>
          <delta_ts>2011-06-07 23:18:54 -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>Other</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>49345</dependson>
          <blocked>61550</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Robert Kroeger">rjkroege</reporter>
          <assigned_to name="Robert Kroeger">rjkroege</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kenneth</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>350935</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-02-14 15:30:48 -0800</bug_when>
    <thetext>The patch (forthcoming) adds a simple gesture recognizer to Chromium. A more complex (and interesting) gesture recognizer will appear in a subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350946</commentid>
    <comment_count>1</comment_count>
      <attachid>82375</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-02-14 15:52:33 -0800</bug_when>
    <thetext>Created attachment 82375
patch1

A simple implementation of a Chromium platform gesture recognizer with unit tests and layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372491</commentid>
    <comment_count>2</comment_count>
      <attachid>82375</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-03-23 15:25:36 -0700</bug_when>
    <thetext>Comment on attachment 82375
patch1

patch is obsolete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400719</commentid>
    <comment_count>3</comment_count>
      <attachid>92841</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-09 13:44:30 -0700</bug_when>
    <thetext>Created attachment 92841
patch2

Hi Adam, Benjamin,

I was wondering if you could take a look at this patch.

Adam: you&apos;ve seen older versions of this and I&apos;d thought you might be interested.
Benjamin: this is the follow-on to https://bugs.webkit.org/show_bug.cgi?id=49345.

Please suggest other reviewers as desirable.

This CL contains a framework for gesture recognition and some simple gestures. More complex gestures will follow in a subsequent CL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400732</commentid>
    <comment_count>4</comment_count>
      <attachid>92841</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-09 14:01:47 -0700</bug_when>
    <thetext>Comment on attachment 92841
patch2

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

I don&apos;t really understand gestures, so the below are just general nits.  Also, none of this code seems to be Chromium specific.  Perhaps it shouldn&apos;t be Chromium specific?  As an example, WebKit has image decodes that are used by some (but not all) platforms.  This seems like a general platform-agnostic implementation that some ports might want to replace with native gesture managers.  As such, it shouldn&apos;t be in Chromium-specific files.

&gt; Source/WebCore/platform/PlatformGestureRecognizer.cpp:39
&gt; +#if !PLATFORM(CHROMIUM)

We probably should exclude this file from the Chromium build instead of adding platform-specific ifdefs to a platform agnostic file.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:40
&gt; +// Edge functions.

I&apos;d remove this comment.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:49
&gt; +// Maximum hold down (s) for a touch to be treated as a click.
&gt; +static const double maxClickDownTime = 0.8;

I&apos;d rename this constant so that the comment is not needed.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:52
&gt; +// Minimum hold down (s) for a touch to be treated as a click.
&gt; +static const double minClickDownTime = 0.01;

ditto

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:56
&gt; +// Maximum manhattan displacement for touch motion to
&gt; +// still be considered as a click.
&gt; +static const int maxManhattanDistance = 20;

ditto

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:66
&gt; +// TODO(rjkroege): write this function

WebKit uses FIXME comments rather than TODO comments.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:173
&gt; +//
&gt; +// Edge functions
&gt; +//

No need for these kinds of comments.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:176
&gt; +    gm-&gt;setState(GestureRecognizerChromium::PendingSyntheticClick);

gm =&gt; gestureRecongizer

WebKit prefers variable names that are made of complete english words.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:180
&gt; +bool reset(GestureRecognizerChromium* gm, const PlatformTouchPoint&amp; p)

Unused parameters should have their names omitted (otherwise they won&apos;t build on PLATFORM(MAC))

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:48
&gt; +// A GestureRecognizerChromium detects gestures occurring in the touch event.
&gt; +// In response to a given touch event, the GestureRecognizerChromium, updates
&gt; +// its internal state and optionally dispatches synthetic events to the
&gt; +// invoking WebViewImpl.

WebKit doesn&apos;t usually have class-level comments.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:52
&gt; +    // The states of the gesture manager state machine.

This comment is useless.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:64
&gt; +    // Adds a new edge function to the GestureRecognizerChromium.

Almost all of these comment don&apos;t add any information and should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401233</commentid>
    <comment_count>5</comment_count>
      <attachid>92841</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-10 08:55:09 -0700</bug_when>
    <thetext>Comment on attachment 92841
patch2

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

&gt;&gt; Source/WebCore/platform/PlatformGestureRecognizer.cpp:39
&gt;&gt; +#if !PLATFORM(CHROMIUM)
&gt; 
&gt; We probably should exclude this file from the Chromium build instead of adding platform-specific ifdefs to a platform agnostic file.

Done in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:40
&gt;&gt; +// Edge functions.
&gt; 
&gt; I&apos;d remove this comment.

excessive comments removed in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:49
&gt;&gt; +static const double maxClickDownTime = 0.8;
&gt; 
&gt; I&apos;d rename this constant so that the comment is not needed.

all fixed in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:66
&gt;&gt; +// TODO(rjkroege): write this function
&gt; 
&gt; WebKit uses FIXME comments rather than TODO comments.

done. the comment was out of date.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:176
&gt;&gt; +    gm-&gt;setState(GestureRecognizerChromium::PendingSyntheticClick);
&gt; 
&gt; gm =&gt; gestureRecongizer
&gt; 
&gt; WebKit prefers variable names that are made of complete english words.

done in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:180
&gt;&gt; +bool reset(GestureRecognizerChromium* gm, const PlatformTouchPoint&amp; p)
&gt; 
&gt; Unused parameters should have their names omitted (otherwise they won&apos;t build on PLATFORM(MAC))

done in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:48
&gt;&gt; +// invoking WebViewImpl.
&gt; 
&gt; WebKit doesn&apos;t usually have class-level comments.

removed in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:52
&gt;&gt; +    // The states of the gesture manager state machine.
&gt; 
&gt; This comment is useless.

removed in patch3

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:64
&gt;&gt; +    // Adds a new edge function to the GestureRecognizerChromium.
&gt; 
&gt; Almost all of these comment don&apos;t add any information and should be removed.

removed in patch3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401236</commentid>
    <comment_count>6</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-10 08:59:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 92841 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92841&amp;action=review
&gt; 
&gt; I don&apos;t really understand gestures, so the below are just general nits.  

nits addressed in patch3.

&gt; Also, none of this code seems to be Chromium specific.  Perhaps it shouldn&apos;t be Chromium specific?  As an example, WebKit has image decodes that are used by some (but not all) platforms.  This seems like a general platform-agnostic implementation that some ports might want to replace with native gesture managers.  As such, it shouldn&apos;t be in Chromium-specific files.

My understanding of review comments from the previous patch in this sequence is that the reviewers were strongly of the opinion that even though this gesture recognizer is platform agnostic, it should remain specific to the Chromium platform until desired by other platforms.

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401253</commentid>
    <comment_count>7</comment_count>
      <attachid>92966</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-10 09:23:24 -0700</bug_when>
    <thetext>Created attachment 92966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401257</commentid>
    <comment_count>8</comment_count>
      <attachid>92966</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-10 09:26:05 -0700</bug_when>
    <thetext>Comment on attachment 92966
Patch

bad patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401273</commentid>
    <comment_count>9</comment_count>
      <attachid>92971</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-10 09:58:39 -0700</bug_when>
    <thetext>Created attachment 92971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401516</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-10 14:46:34 -0700</bug_when>
    <thetext>&gt; My understanding of review comments from the previous patch in this sequence is that the reviewers were strongly of the opinion that even though this gesture recognizer is platform agnostic, it should remain specific to the Chromium platform until desired by other platforms.

I&apos;m happy to defer to folks who are more familiar with this topic than I am.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405792</commentid>
    <comment_count>11</comment_count>
      <attachid>92971</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-18 10:04:30 -0700</bug_when>
    <thetext>Comment on attachment 92971
Patch

A synthetic click usually include the mouse move, which will ensure the mouseover/mouseout.

A quick review, mostly minor stuff.
My main concern is the lack of mouse move for synthetic click, that will break some websites.


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

&gt; Source/WebCore/platform/PlatformGestureRecognizer.h:62
&gt; +    // Clears the GestureRecognizer to its initial state. It&apos;s necessary to call this before each
&gt; +    // layout test to reduce flakiness.

I think part this comment is overkill: &quot;It&apos;s necessary to call this before each layout test to reduce flakiness.&quot;
Make sense to me to reset your gesture manager with each page.

&gt; Source/WebCore/platform/PlatformWheelEvent.h:109
&gt; +        PlatformWheelEvent(IntPoint position,

Please also initialize the MAC attribute to there default values, just for completeness.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:85
&gt; +    int manhattanDistance = abs(point.pos().x() - m_firstTouchPosition.x()) +
&gt; +        abs(point.pos().y() - m_firstTouchPosition.y());

Just style: if you really want to split this line, please align the two abs().

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:96
&gt; +void GestureRecognizerChromium::dispatchSyntheticClick(const PlatformTouchPoint&amp; point)
&gt; +{
&gt; +    PlatformMouseEvent fakeMouseDown(point.pos(), point.screenPos(), LeftButton, MouseEventPressed, 1, false, false, false, false, m_lastTouchTime);
&gt; +    PlatformMouseEvent fakeMouseUp(point.pos(), point.screenPos(), LeftButton, MouseEventReleased, 1, false, false, false, false, m_lastTouchTime);
&gt; +
&gt; +    m_eventHandler-&gt;handleMousePressEvent(fakeMouseDown);
&gt; +    m_eventHandler-&gt;handleMouseReleaseEvent(fakeMouseUp);
&gt; +}

Check this: http://chaos.troll.no/~poulain/touchtesting/click_legacy_events.html
It is the way most touch browser behave (click twice to get the expected results, otherwise the mouseover is in the results).

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:158
&gt; +unsigned int GestureRecognizerChromium::hash(State gestureState, unsigned id, PlatformTouchPoint::State touchType, bool handled)

I wonder why the hash is a member of GestureRecognizerChromium. It does not use any attribute of the object.

It could be a regular function, or a static function of the class.

The name also bother me a little. Because hash() tend to be associated with destructive hash, for which you have have collisions. In this case, a collision would be a bug. So maybe something like &quot;signature()&quot; would be better?

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:160
&gt; +    return 1 + ((touchType &amp; 7) | (handled ? 1 &lt;&lt; 3 : 0) | ((id &amp; 0xfff) &lt;&lt; 4 ) | (gestureState &lt;&lt; 16));

Why the +1?
I would use 0x7, just to make it clear it is a mask.

Also, the id can now be arbitrary in the spec. This means someone could want to hash the id itself to avoid people relying on it. It would be nice to have an assertion to make sure the id is &lt; 0xfff. Otherwise someone might break you code by accident in the future.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:210
&gt; +    gestureRecognizer-&gt;init();

Any reason not to initialize that in the constructor?

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:211
&gt; +    return PassOwnPtr&lt;PlatformGestureRecognizer&gt;(gestureRecognizer);

You should use adoptPtr here.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:219
&gt; +PlatformGestureRecognizer::PlatformGestureRecognizer()
&gt; +{
&gt; +}
&gt; +PlatformGestureRecognizer::~PlatformGestureRecognizer()
&gt; +{
&gt; +}

Wouldn&apos;t it be cleaner to include the original cpp file?

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:42
&gt; +class GestureRecognizerChromium;

You probably don&apos;t need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405793</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-18 10:06:53 -0700</bug_when>
    <thetext>Damn, I messed up the formating.
The line &quot;A synthetic click usually include the mouse move, which will ensure the mouseover/mouseout.&quot; was supposed to be in context of GestureRecognizerChromium::dispatchSyntheticClick()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405989</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-18 13:25:42 -0700</bug_when>
    <thetext>Benjamin, is some of this code reusable by us when we upstream our code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406007</commentid>
    <comment_count>14</comment_count>
      <attachid>92971</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-05-18 13:50:41 -0700</bug_when>
    <thetext>Comment on attachment 92971
Patch

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

A few mini comments when looking thru the patch. Benjamin pointed out the important stuff

&gt; Source/WebCore/platform/PlatformWheelEvent.h:120
&gt; +        PlatformWheelEvent(IntPoint position,
&gt; +                           IntPoint globalPosition,
&gt; +                           float deltaX,
&gt; +                           float deltaY,
&gt; +                           float wheelTicksX,
&gt; +                           float wheelTicksY,
&gt; +                           PlatformWheelEventGranularity granularity,
&gt; +                           bool isAccepted,
&gt; +                           bool shiftKey,
&gt; +                           bool ctrlKey,
&gt; +                           bool altKey,
&gt; +                           bool metaKey)

we normally keep method signatures on one line - that might even be part of our coding style

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:47
&gt; +static const double maximumTouchDownDurationForClick = 0.8;

Seconds?

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:49
&gt; +static const int maximumTouchMoveForClick = 20;

I guess this is pixels? The names can be improved to make this more clear

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:53
&gt; +    , m_state(GestureRecognizerChromium::NoGesture)

I guess NoGesture would be sufficient here?

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:71
&gt; +void GestureRecognizerChromium::addEdgeFunction(State state, unsigned finger, PlatformTouchPoint::State touchType, bool handled, GestureTransitionFunction f)

fingerID ?

I dont like that the method is called addEdgeFunction and has a bool of handled... what is handled? the api could be more clear

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:91
&gt; +    PlatformMouseEvent fakeMouseDown(point.pos(), point.screenPos(), LeftButton, MouseEventPressed, 1, false, false, false, false, m_lastTouchTime);

very difficult seeing what those false means. A bit sad that they are not enums or flags... anyway you could add something like /* immediate */ false etc that is done elsewhere in webkit

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:185
&gt; +static bool clickOrScroll(GestureRecognizerChromium* gestureRecognizer, const PlatformTouchPoint&amp; point)

isClickOrScroll?

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:210
&gt;&gt; +    gestureRecognizer-&gt;init();
&gt; 
&gt; Any reason not to initialize that in the constructor?

WebKit normally uses initialize() instead of init() - at least last I checked

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:217
&gt; +}
&gt; +PlatformGestureRecognizer::~PlatformGestureRecognizer()

Add a newline between these

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:65
&gt; +    void setState(State s) { m_state = s; }

I would use value instead of s

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:67
&gt; +    State state() { return m_state; }
&gt; +protected:

Add newline before protected:

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:68
&gt; +    void updateValues(double touchTime, const PlatformTouchPoint &amp;);

placement of &amp; is wrong

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:70
&gt; +    unsigned int hash(State, unsigned, PlatformTouchPoint::State, bool);
&gt; +    WTF::HashMap&lt;int, GestureTransitionFunction&gt; m_edgeFunctions;

Add a newline before the hashmap

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:72
&gt; +    double m_firstTouchTime;

time_t?

&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:43
&gt; +    InspectableGestureRecognizerChromium() : WebCore::GestureRecognizerChromium() { }

I would add the :... part to the next line

&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:48
&gt; +    int tHash(State gestureState,
&gt; +              unsigned id,
&gt; +              PlatformTouchPoint::State touchType,
&gt; +              bool handled)

one line please

&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:66
&gt; +    virtual void tUpdateValues(double d, const PlatformTouchPoint &amp;p)

I dont understand this t prefix?

&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:80
&gt; +      m_pos.setX(x);
&gt; +      m_screenPos.setX(x);

indentation seems wrong here

&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:95
&gt; +    m_screenPos = IntPoint(0, 0);

I belive that we can do IntPoint::zero()

&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:152
&gt; +
&gt; +

why two newlines here? and above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406057</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-18 15:19:49 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Benjamin, is some of this code reusable by us when we upstream our code?

I am afraid not. But we should try. Let&apos;s see what we can do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410553</commentid>
    <comment_count>16</comment_count>
      <attachid>94995</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-26 10:05:32 -0700</bug_when>
    <thetext>Created attachment 94995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410559</commentid>
    <comment_count>17</comment_count>
      <attachid>92971</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-26 10:08:43 -0700</bug_when>
    <thetext>Comment on attachment 92971
Patch

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

I have attempted to address all the review comments in the most recent patch. Please have another look.

&gt;&gt; Source/WebCore/platform/PlatformGestureRecognizer.h:62
&gt;&gt; +    // layout test to reduce flakiness.
&gt; 
&gt; I think part this comment is overkill: &quot;It&apos;s necessary to call this before each layout test to reduce flakiness.&quot;
&gt; Make sense to me to reset your gesture manager with each page.

done in p5

&gt;&gt; Source/WebCore/platform/PlatformWheelEvent.h:109
&gt;&gt; +        PlatformWheelEvent(IntPoint position,
&gt; 
&gt; Please also initialize the MAC attribute to there default values, just for completeness.

done in p5

&gt;&gt; Source/WebCore/platform/PlatformWheelEvent.h:120
&gt;&gt; +                           bool metaKey)
&gt; 
&gt; we normally keep method signatures on one line - that might even be part of our coding style

Done in p5.  (As far as I can tell, there&apos;s no mention of this in the coding style. If this is the convention, perhaps there should be?)

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:47
&gt;&gt; +static const double maximumTouchDownDurationForClick = 0.8;
&gt; 
&gt; Seconds?

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:49
&gt;&gt; +static const int maximumTouchMoveForClick = 20;
&gt; 
&gt; I guess this is pixels? The names can be improved to make this more clear

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:53
&gt;&gt; +    , m_state(GestureRecognizerChromium::NoGesture)
&gt; 
&gt; I guess NoGesture would be sufficient here?

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:71
&gt;&gt; +void GestureRecognizerChromium::addEdgeFunction(State state, unsigned finger, PlatformTouchPoint::State touchType, bool handled, GestureTransitionFunction f)
&gt; 
&gt; fingerID ?
&gt; 
&gt; I dont like that the method is called addEdgeFunction and has a bool of handled... what is handled? the api could be more clear

finger -&gt; fingerID in p5

I have made a richer name for handled. Would a comment be desirable/permissible?

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:85
&gt;&gt; +        abs(point.pos().y() - m_firstTouchPosition.y());
&gt; 
&gt; Just style: if you really want to split this line, please align the two abs().

line unsplit in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:91
&gt;&gt; +    PlatformMouseEvent fakeMouseDown(point.pos(), point.screenPos(), LeftButton, MouseEventPressed, 1, false, false, false, false, m_lastTouchTime);
&gt; 
&gt; very difficult seeing what those false means. A bit sad that they are not enums or flags... anyway you could add something like /* immediate */ false etc that is done elsewhere in webkit

I&apos;d prefer not to go changing PlatformMouseEvent in this patch. Maybe later. :-)

added comments to the nums and bools in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:96
&gt;&gt; +}
&gt; 
&gt; Check this: http://chaos.troll.no/~poulain/touchtesting/click_legacy_events.html
&gt; It is the way most touch browser behave (click twice to get the expected results, otherwise the mouseover is in the results).

I&apos;ve corrected the code and layout tests to pass this test in p5. Thanks for the pointer.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:158
&gt;&gt; +unsigned int GestureRecognizerChromium::hash(State gestureState, unsigned id, PlatformTouchPoint::State touchType, bool handled)
&gt; 
&gt; I wonder why the hash is a member of GestureRecognizerChromium. It does not use any attribute of the object.
&gt; 
&gt; It could be a regular function, or a static function of the class.
&gt; 
&gt; The name also bother me a little. Because hash() tend to be associated with destructive hash, for which you have have collisions. In this case, a collision would be a bug. So maybe something like &quot;signature()&quot; would be better?

made a static function named &quot;signature()&quot; in p5.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:160
&gt;&gt; +    return 1 + ((touchType &amp; 7) | (handled ? 1 &lt;&lt; 3 : 0) | ((id &amp; 0xfff) &lt;&lt; 4 ) | (gestureState &lt;&lt; 16));
&gt; 
&gt; Why the +1?
&gt; I would use 0x7, just to make it clear it is a mask.
&gt; 
&gt; Also, the id can now be arbitrary in the spec. This means someone could want to hash the id itself to avoid people relying on it. It would be nice to have an assertion to make sure the id is &lt; 0xfff. Otherwise someone might break you code by accident in the future.

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:185
&gt;&gt; +static bool clickOrScroll(GestureRecognizerChromium* gestureRecognizer, const PlatformTouchPoint&amp; point)
&gt; 
&gt; isClickOrScroll?

done in p5.

&gt;&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:210
&gt;&gt;&gt; +    gestureRecognizer-&gt;init();
&gt;&gt; 
&gt;&gt; Any reason not to initialize that in the constructor?
&gt; 
&gt; WebKit normally uses initialize() instead of init() - at least last I checked

init renamed to initialize in p5. My reasoning for splitting the initialize from the constructor was that I wanted initialize to be virtual so it would be easy to subclass this code.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:211
&gt;&gt; +    return PassOwnPtr&lt;PlatformGestureRecognizer&gt;(gestureRecognizer);
&gt; 
&gt; You should use adoptPtr here.

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:217
&gt;&gt; +PlatformGestureRecognizer::~PlatformGestureRecognizer()
&gt; 
&gt; Add a newline between these

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:219
&gt;&gt; +}
&gt; 
&gt; Wouldn&apos;t it be cleaner to include the original cpp file?

Perhaps. But then I&apos;d have to #ifdef out PlatformGestureRecognizer::create there. As it is, PlatformGestureRecogizer.ccp can be #ifdef free. I could split PlatformGestureRecognizer.cpp up to preserve the #ifdef-free property.  What would you recommend?

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:42
&gt;&gt; +class GestureRecognizerChromium;
&gt; 
&gt; You probably don&apos;t need this.

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:65
&gt;&gt; +    void setState(State s) { m_state = s; }
&gt; 
&gt; I would use value instead of s

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:67
&gt;&gt; +protected:
&gt; 
&gt; Add newline before protected:

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:68
&gt;&gt; +    void updateValues(double touchTime, const PlatformTouchPoint &amp;);
&gt; 
&gt; placement of &amp; is wrong

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:70
&gt;&gt; +    WTF::HashMap&lt;int, GestureTransitionFunction&gt; m_edgeFunctions;
&gt; 
&gt; Add a newline before the hashmap

done in p5

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:72
&gt;&gt; +    double m_firstTouchTime;
&gt; 
&gt; time_t?

Why? This doesn&apos;t seem to right to me -- this time comes from the double number of seconds in a PlatformTouchEvent (and as a result can be advanced for the gesture recognizer with DumpRenderTree&apos;s EventSender::leapForward.)

&gt;&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:43
&gt;&gt; +    InspectableGestureRecognizerChromium() : WebCore::GestureRecognizerChromium() { }
&gt; 
&gt; I would add the :... part to the next line

done, p5

&gt;&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:48
&gt;&gt; +              bool handled)
&gt; 
&gt; one line please

done, p5

&gt;&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:66
&gt;&gt; +    virtual void tUpdateValues(double d, const PlatformTouchPoint &amp;p)
&gt; 
&gt; I dont understand this t prefix?

fixed in p5

&gt;&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:80
&gt;&gt; +      m_screenPos.setX(x);
&gt; 
&gt; indentation seems wrong here

fixed in p5

&gt;&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:95
&gt;&gt; +    m_screenPos = IntPoint(0, 0);
&gt; 
&gt; I belive that we can do IntPoint::zero()

fixed in p5

&gt;&gt; Source/WebKit/chromium/tests/GestureRecognizerChromiumTest.cpp:152
&gt;&gt; +
&gt; 
&gt; why two newlines here? and above

fixed in p5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411416</commentid>
    <comment_count>18</comment_count>
      <attachid>94995</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-27 07:15:46 -0700</bug_when>
    <thetext>Comment on attachment 94995
Patch

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

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:55
&gt; +    : m_firstTouchTime(0.0)
&gt; +    , m_state(GestureRecognizerChromium::NoGesture)
&gt; +    , m_lastTouchTime(0.0)
&gt; +    , m_eventHandler(0)

To avoid duplicating this kind of code, you could not initialize anything and just call resetState().
I don&apos;t mind the current code, just do as you prefer for this.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:93
&gt; +    PlatformMouseEvent fakeMouseMove(point.pos(), point.screenPos(), NoButton, MouseEventMoved, /* clickCount */ 1, /* shift */ false, /* ctrl */ false, /* alt */ false, /* meta */ false, m_lastTouchTime);
&gt; +    PlatformMouseEvent fakeMouseDown(point.pos(), point.screenPos(), LeftButton, MouseEventPressed, /* clickCount */ 1, /* shift */ false, /* ctrl */ false, /* alt */ false, /* meta */ false, m_lastTouchTime);
&gt; +    // TODO: add a fake motion here.
&gt; +    PlatformMouseEvent fakeMouseUp(point.pos(), point.screenPos(), LeftButton, MouseEventReleased, /* clickCount */ 1, /* shift */ false, /* ctrl */ false, /* alt */ false, /* meta */ false, m_lastTouchTime);

You actually don&apos;t have to use false for all the modifiers. The PlatformTouchEvent has the value of shift, ctrl, alt, etc.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:152
&gt; +        m_lastTouchTime = touchTime;

You could set this above the if() since it is updated in both cases... just to make things simpler :)

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:163
&gt; +    return 1 + ((touchType &amp; 0x7) | (handled ? 1 &lt;&lt; 3 : 0) | ((id &amp; 0xfff) &lt;&lt; 4 ) | (gestureState &lt;&lt; 16));

The +1 is suspicious as discussed on IRC :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411435</commentid>
    <comment_count>19</comment_count>
      <attachid>94995</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-27 08:05:05 -0700</bug_when>
    <thetext>Comment on attachment 94995
Patch

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

Some more quick comments:

&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:17
&gt; +var div = document.createElement(&quot;div&quot;);
&gt; +div.id = &quot;touchtarget&quot;;
&gt; +div.style.width = &quot;100px&quot;;
&gt; +div.style.height = &quot;100px&quot;;
&gt; +div.style.backgroundColor = &quot;blue&quot;;

This is a bit weird.
I would have this target div in the html, and use document.getElementById() to get the element in runTest().

Currently, the span of code between the definition of div and its use is big, which does not help reading this code.

&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:47
&gt; +    // debug(&apos;have received: &apos; + event.type);

This can probably be removed :)

&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:69
&gt; +

Empty line

&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:71
&gt; +        // debug(&apos;Received: &apos; + touchEventsReceived + &apos; mouse events &apos;);

This can be removed.

&gt; LayoutTests/fast/events/touch/touch-gesture-scroll.html:67
&gt; +var EXPECTED_SCROLLS_TOTAL = 2;

Uppercase with underscore, a bit uncommon.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:129
&gt; +        // The graph is sparse: not all edges have functions.

The place of this comment is a bit weird.
I don&apos;t think the comment is necessary.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:140
&gt; +    PlatformWheelEvent syntheticWheelEvent(touchPoint.pos(), touchPoint.screenPos(), deltaX, deltaY, deltaX / static_cast&lt;float&gt;(120), deltaY / static_cast&lt;float&gt;(120), ScrollByPixelWheelEvent, false, false, false, false, false);

Same remark conerning the event key modifiers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411449</commentid>
    <comment_count>20</comment_count>
      <attachid>94995</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-27 08:30:55 -0700</bug_when>
    <thetext>Comment on attachment 94995
Patch

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

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:93
&gt;&gt; +    PlatformMouseEvent fakeMouseUp(point.pos(), point.screenPos(), LeftButton, MouseEventReleased, /* clickCount */ 1, /* shift */ false, /* ctrl */ false, /* alt */ false, /* meta */ false, m_lastTouchTime);
&gt; 
&gt; You actually don&apos;t have to use false for all the modifiers. The PlatformTouchEvent has the value of shift, ctrl, alt, etc.

True. Done in p6.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:152
&gt;&gt; +        m_lastTouchTime = touchTime;
&gt; 
&gt; You could set this above the if() since it is updated in both cases... just to make things simpler :)

done, p6

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:163
&gt;&gt; +    return 1 + ((touchType &amp; 0x7) | (handled ? 1 &lt;&lt; 3 : 0) | ((id &amp; 0xfff) &lt;&lt; 4 ) | (gestureState &lt;&lt; 16));
&gt; 
&gt; The +1 is suspicious as discussed on IRC :)

done in p6. Great catch. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411480</commentid>
    <comment_count>21</comment_count>
      <attachid>94995</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-27 09:16:00 -0700</bug_when>
    <thetext>Comment on attachment 94995
Patch

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

&gt;&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:17
&gt;&gt; +div.style.backgroundColor = &quot;blue&quot;;
&gt; 
&gt; This is a bit weird.
&gt; I would have this target div in the html, and use document.getElementById() to get the element in runTest().
&gt; 
&gt; Currently, the span of code between the definition of div and its use is big, which does not help reading this code.

done in p6

&gt;&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:47
&gt;&gt; +    // debug(&apos;have received: &apos; + event.type);
&gt; 
&gt; This can probably be removed :)

done in p6.

&gt;&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:69
&gt;&gt; +
&gt; 
&gt; Empty line

done in p6

&gt;&gt; LayoutTests/fast/events/touch/touch-gesture-click.html:71
&gt;&gt; +        // debug(&apos;Received: &apos; + touchEventsReceived + &apos; mouse events &apos;);
&gt; 
&gt; This can be removed.

done in p6

&gt;&gt; LayoutTests/fast/events/touch/touch-gesture-scroll.html:67
&gt;&gt; +var EXPECTED_SCROLLS_TOTAL = 2;
&gt; 
&gt; Uppercase with underscore, a bit uncommon.

I was following along with some of the other tests in the directory. changed in p6

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:55
&gt;&gt; +    , m_eventHandler(0)
&gt; 
&gt; To avoid duplicating this kind of code, you could not initialize anything and just call resetState().
&gt; I don&apos;t mind the current code, just do as you prefer for this.

left as is.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:129
&gt;&gt; +        // The graph is sparse: not all edges have functions.
&gt; 
&gt; The place of this comment is a bit weird.
&gt; I don&apos;t think the comment is necessary.

removed in p6

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:140
&gt;&gt; +    PlatformWheelEvent syntheticWheelEvent(touchPoint.pos(), touchPoint.screenPos(), deltaX, deltaY, deltaX / static_cast&lt;float&gt;(120), deltaY / static_cast&lt;float&gt;(120), ScrollByPixelWheelEvent, false, false, false, false, false);
&gt; 
&gt; Same remark conerning the event key modifiers.

fixed in p6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411483</commentid>
    <comment_count>22</comment_count>
      <attachid>95182</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-05-27 09:17:44 -0700</bug_when>
    <thetext>Created attachment 95182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411525</commentid>
    <comment_count>23</comment_count>
      <attachid>95182</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-27 10:33:16 -0700</bug_when>
    <thetext>Comment on attachment 95182
Patch

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

Just comments so far, I have not found any bug:

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:55
&gt; +    void addEdgeFunction(State, unsigned finger, PlatformTouchPoint::State, bool touchHandledByJavaScript, GestureTransitionFunction);

Looks like this should be private.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:57
&gt; +    virtual void initialize();

I would get rid of this for now.
You are adding some flexibility here without knowing if you will need it. Better do that in the constructor, and add a virtual function later if you ever need it.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:58
&gt; +    virtual void resetState();

Now that I think of it, it is probably better to renate this reset().
Because you have state() and resetState() already, which have a different semantic than this particular resetState().

Would PlatformGestureRecognizer::reset() make sense?

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:60
&gt; +    bool isInClickTimeWindow();
&gt; +    bool isInsideManhattanSquare(const PlatformTouchPoint&amp;);

Those two should probably be private as well. It would be nice if they could be used by the edge function without the need to expose everything from the recognizer.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:64
&gt; +    void setState(State value) { m_state = value; }
&gt; +    State state() { return m_state; }

I can see state() being pretty useful for the class&apos;s clients, but setState() seems like a dangerous API to have.

That function is used by the edge functions to set the state of the recognizer. I wonder if passing m_state by reference to those functions could clean the design.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:80
&gt; +    bool m_ctrlKey;
&gt; +    bool m_altKey;
&gt; +    bool m_shiftKey;
&gt; +    bool m_metaKey;

This is a bit ugly.
Wouldn&apos;t it be better to pass the PlatformTouchEvent to the edge functions? This would probably also simplify the implementation of pinch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413700</commentid>
    <comment_count>24</comment_count>
      <attachid>95672</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-01 15:15:23 -0700</bug_when>
    <thetext>Created attachment 95672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413701</commentid>
    <comment_count>25</comment_count>
      <attachid>95182</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-01 15:17:00 -0700</bug_when>
    <thetext>Comment on attachment 95182
Patch

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

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:55
&gt;&gt; +    void addEdgeFunction(State, unsigned finger, PlatformTouchPoint::State, bool touchHandledByJavaScript, GestureTransitionFunction);
&gt; 
&gt; Looks like this should be private.

done in p7.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:57
&gt;&gt; +    virtual void initialize();
&gt; 
&gt; I would get rid of this for now.
&gt; You are adding some flexibility here without knowing if you will need it. Better do that in the constructor, and add a virtual function later if you ever need it.

Done in p7.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:58
&gt;&gt; +    virtual void resetState();
&gt; 
&gt; Now that I think of it, it is probably better to renate this reset().
&gt; Because you have state() and resetState() already, which have a different semantic than this particular resetState().
&gt; 
&gt; Would PlatformGestureRecognizer::reset() make sense?

done in p7

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:60
&gt;&gt; +    bool isInsideManhattanSquare(const PlatformTouchPoint&amp;);
&gt; 
&gt; Those two should probably be private as well. It would be nice if they could be used by the edge function without the need to expose everything from the recognizer.

done in p7.   All &quot;internal&quot; functions are available only from an InternalGestureRecognizer that cannot be accessed from &quot;outside&quot; and I pass this to the edge functions.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:64
&gt;&gt; +    State state() { return m_state; }
&gt; 
&gt; I can see state() being pretty useful for the class&apos;s clients, but setState() seems like a dangerous API to have.
&gt; 
&gt; That function is used by the edge functions to set the state of the recognizer. I wonder if passing m_state by reference to those functions could clean the design.

I limited access to setState and other semi-internal state methods to only the registered edge functions.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:80
&gt;&gt; +    bool m_metaKey;
&gt; 
&gt; This is a bit ugly.
&gt; Wouldn&apos;t it be better to pass the PlatformTouchEvent to the edge functions? This would probably also simplify the implementation of pinch.

It might be. But shouldn&apos;t we apply the principle you&apos;ve applied above and avoid changes that are *probably* desirable to support future code? This was the simplest implementation of the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413723</commentid>
    <comment_count>26</comment_count>
      <attachid>95681</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-01 15:55:33 -0700</bug_when>
    <thetext>Created attachment 95681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413732</commentid>
    <comment_count>27</comment_count>
      <attachid>95681</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-01 16:01:20 -0700</bug_when>
    <thetext>Comment on attachment 95681
Patch

merge conflict. fixed shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414076</commentid>
    <comment_count>28</comment_count>
      <attachid>95759</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-02 06:43:46 -0700</bug_when>
    <thetext>Created attachment 95759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416596</commentid>
    <comment_count>29</comment_count>
      <attachid>95759</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-06-07 10:12:37 -0700</bug_when>
    <thetext>Comment on attachment 95759
Patch

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

Yep, I like it.
I think the test will evolve a bit (kinetic scrolling, frames, block + overflow) but that is a good start.

Some comments:

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:92
&gt; +void InnerGestureRecognizer::addEdgeFunction(State state, unsigned fingerId, PlatformTouchPoint::State touchType, bool touchHandledByJavaScript, GestureTransitionFunction f)
&gt; +{
&gt; +    m_edgeFunctions.add(signature(state, fingerId, touchType, touchHandledByJavaScript), f);

A full variable name would be nice instead of &quot;f&quot;.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:158
&gt; +// 1 LSB bit for signature &gt;= 1

This is a bit unclear.

&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:48
&gt; +    enum State {
&gt; +      NoGesture,
&gt; +      PendingSyntheticClick,
&gt; +      Scroll
&gt; +    };

Is the indent right here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416607</commentid>
    <comment_count>30</comment_count>
      <attachid>95759</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-06-07 10:23:10 -0700</bug_when>
    <thetext>Comment on attachment 95759
Patch

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

Yep, I like it.
I think the test will evolve a bit (kinetic scrolling, frames, block + overflow) but that is a good start.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:92
&gt;&gt; +void InnerGestureRecognizer::addEdgeFunction(State state, unsigned fingerId, PlatformTouchPoint::State touchType, bool touchHandledByJavaScript, GestureTransitionFunction f)
&gt;&gt; +{
&gt;&gt; +    m_edgeFunctions.add(signature(state, fingerId, touchType, touchHandledByJavaScript), f);
&gt; 
&gt; A full variable name would be nice instead of &quot;f&quot;.

A full variable name would be nice instead of &quot;f&quot;.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:158
&gt;&gt; +// 1 LSB bit for signature &gt;= 1
&gt; 
&gt; This is a bit unclear.

This is a bit unclear.

&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:48
&gt;&gt; +    enum State {
&gt;&gt; +      NoGesture,
&gt;&gt; +      PendingSyntheticClick,
&gt;&gt; +      Scroll
&gt;&gt; +    };
&gt; 
&gt; Is the indent right here?

Is the indent right here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416663</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-07 11:28:05 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 95759:

animations/play-state-suspend.html bug 50959 (authors: cmarrin@apple.com and simon.fraser@apple.com)
java/lc3/JavaObject/JavaObjectToByte-006.html bug 60333 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416665</commentid>
    <comment_count>32</comment_count>
      <attachid>95759</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-06-07 11:30:08 -0700</bug_when>
    <thetext>Comment on attachment 95759
Patch

Rejecting attachment 95759 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-7&apos;, &apos;land-a...&quot; exit_code: 2

Last 500 characters of output:
/usr/local/git/libexec/git-core/git-svn line 576


Failed to run &quot;[u&apos;git&apos;, u&apos;svn&apos;, u&apos;dcommit&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/
Updating OpenSource
From git://git.webkit.org/WebKit
   09ee877..c123e6f  master     -&gt; origin/master
	M	LayoutTests/platform/chromium/test_expectations.txt
	M	LayoutTests/ChangeLog
r88248 = c123e6f9d114ce8dcc990b249b3fa63d746e9fd6 (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.

Full output: http://queues.webkit.org/results/8770714</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416796</commentid>
    <comment_count>33</comment_count>
      <attachid>95759</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-07 14:37:38 -0700</bug_when>
    <thetext>Comment on attachment 95759
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:92
&gt;&gt;&gt; +    m_edgeFunctions.add(signature(state, fingerId, touchType, touchHandledByJavaScript), f);
&gt;&gt; 
&gt;&gt; A full variable name would be nice instead of &quot;f&quot;.
&gt; 
&gt; A full variable name would be nice instead of &quot;f&quot;.

done in merge conflict patch

&gt;&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.cpp:158
&gt;&gt;&gt; +// 1 LSB bit for signature &gt;= 1
&gt;&gt; 
&gt;&gt; This is a bit unclear.
&gt; 
&gt; This is a bit unclear.

done.

&gt;&gt;&gt; Source/WebCore/platform/chromium/GestureRecognizerChromium.h:48
&gt;&gt;&gt; +    };
&gt;&gt; 
&gt;&gt; Is the indent right here?
&gt; 
&gt; Is the indent right here?

no. fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416809</commentid>
    <comment_count>34</comment_count>
      <attachid>96303</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2011-06-07 14:56:47 -0700</bug_when>
    <thetext>Created attachment 96303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416812</commentid>
    <comment_count>35</comment_count>
      <attachid>96303</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-07 15:01:43 -0700</bug_when>
    <thetext>Comment on attachment 96303
Patch

Forwarding benjamin&apos;s r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416991</commentid>
    <comment_count>36</comment_count>
      <attachid>96303</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 18:18:56 -0700</bug_when>
    <thetext>Comment on attachment 96303
Patch

Clearing flags on attachment: 96303

Committed r88307: &lt;http://trac.webkit.org/changeset/88307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416992</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 18:19:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417108</commentid>
    <comment_count>38</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-06-07 23:18:54 -0700</bug_when>
    <thetext>The new tests fail on Qt, and skipped by http://trac.webkit.org/changeset/88327

Here are the diffs if anybody is interested in fixing them:

--- /ramdisk/qt-linux-release/build/layout-test-results/fast/events/touch/touch-gesture-click-expected.txt	2011-06-07 22:38:43.064591025 -0700
+++ /ramdisk/qt-linux-release/build/layout-test-results/fast/events/touch/touch-gesture-click-actual.txt	2011-06-07 22:38:43.064591025 -0700
@@ -3,6 +3,8 @@
 On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
 
 
+have received: 1 touch events
+have received: 2 touch events
 Gesture manager not implemented on this platform.
 PASS successfullyParsed is true
 

--- /ramdisk/qt-linux-release/build/layout-test-results/fast/events/touch/touch-gesture-scroll-expected.txt	2011-06-07 22:38:43.108590977 -0700
+++ /ramdisk/qt-linux-release/build/layout-test-results/fast/events/touch/touch-gesture-scroll-actual.txt	2011-06-07 22:38:43.108590977 -0700
@@ -3,7 +3,12 @@
 On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
 
 
-Gesture manager not implemented on this platform or broken
+first gesture
+PASS movingdiv.scrollTop is 0
+FAIL movingdiv.scrollLeft should be 90. Was 0.
+second gesture
+FAIL movingdiv.scrollTop should be 95. Was 0.
+FAIL movingdiv.scrollLeft should be 90. Was 0.
 PASS successfullyParsed is true
 
 TEST COMPLETE</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>82375</attachid>
            <date>2011-02-14 15:52:33 -0800</date>
            <delta_ts>2011-05-09 13:44:30 -0700</delta_ts>
            <desc>patch1</desc>
            <filename>gm_s2-3_wrt_master.diff</filename>
            <type>text/plain</type>
            <size>40497</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MmQ0MjY1Li41YWMxZjIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDIt
MTQgIFJvYmVydCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworICAgICAgICBBZGQgYSBiYXNpYyBnZXN0dXJlIHJl
Y29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisKKyAgICAgICAgTGF5b3V0IHRlc3Rz
IGFuZCB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgYSBDaHJvbWl1bS1zcGVjaWZpYyBnZXN0dXJlIHJl
Y29nbml6ZXIKKyAgICAgICAgZm9yIHN5bnRoZXRpYyBjbGljayBhbmQgc2Nyb2xsIGV2ZW50cy4K
KworICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LWNsaWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMv
dG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTEtMDIt
MTQgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIENocm9taXVtIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4ZGViYQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgYmFz
aWMgc2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK0dlc3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0
Zm9ybS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LWNsaWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LWNsaWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4ODRhYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtY2xpY2suaHRtbApAQCAtMCwwICsxLDg3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CitkaXYuaWQgPSAidG91Y2h0YXJnZXQiOworZGl2LnN0eWxlLndp
ZHRoID0gIjEwMHB4IjsKK2Rpdi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworZGl2LnN0eWxlLmJh
Y2tncm91bmRDb2xvciA9ICJibHVlIjsKKwordmFyIGNsaWNrRXZlbnRzUmVjZWl2ZWQgPSAwOwor
dmFyIGV4cGVjdGVkTW91c2VFdmVudHMgPSAzOwordmFyIHRvdWNoRXZlbnRzUmVjZWl2ZWQgPSAw
OwordmFyIGV2ZW50VHlwZXMgPSBbICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdjbGljaycgXTsK
KworZnVuY3Rpb24gZ2VzdHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAgaWYgKHdpbmRv
dy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5
cGUnLCBldmVudFR5cGVzW3RvdWNoRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAgc2hvdWxkQmUo
J2V2ZW50LmNsaWVudFgnLCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFkn
LCAnMTInKTsKKyAgICAgICAgdG91Y2hFdmVudHNSZWNlaXZlZCsrOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRlYnVnKGV2ZW50LnR5cGUpOworICAgICAgICBkZWJ1ZyhldmVudC5jbGllbnRYKTsK
KyAgICAgICAgZGVidWcoZXZlbnQuY2xpZW50WSk7CisgICAgfQorfQorCitmdW5jdGlvbiBzaW5n
bGVUb3VjaFNlcXVlbmNlKCkKK3sKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEwLCAx
Mik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gSW5zZXJ0IHNvbWUg
ZGVsYXkuIE5COiB0aGlzIHZhbHVlIGRlcGVuZHMgb24gbWluQ2xpY2tEb3duVGltZSwKKyAgICAv
LyBtYXhDbGlja0Rvd25UaW1lIGZyb20gR2VzdHVyZU1hbmFnZXIuY3BwCisgICAgZXZlbnRTZW5k
ZXIubGVhcEZvcndhcmQoMjApOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQo
MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKK30KKworLy8gRW5kIGJ5IHRpbWVyIHRv
IHJ1biBjb3JyZWN0bHkgb24gbm9uLUNocm9taXVtIHBsYXRmb3Jtcy4KK2Z1bmN0aW9uIGVuZFRl
c3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgdG91Y2hFdmVu
dHNSZWNlaXZlZCA8CisgICAgICAgICAgICBleHBlY3RlZE1vdXNlRXZlbnRzKSB7CisgICAgICAg
IGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0u
Jyk7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGdlc3R1cmVFdmVudENhbGxi
YWNrLCBmYWxzZSk7CitkaXYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBnZXN0dXJlRXZlbnRD
YWxsYmFjaywgZmFsc2UpOworZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBnZXN0dXJl
RXZlbnRDYWxsYmFjaywgZmFsc2UpOworZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUoZGl2LCBk
b2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworaWYgKHdp
bmRvdy5ldmVudFNlbmRlcikgeworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGJhc2ljIHNp
bmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24uIik7CisgICAgaWYgKCEhZXZlbnRTZW5kZXIu
Y2xlYXJUb3VjaFBvaW50cykgeworICAgICAgICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRz
KCk7CisgICAgICAgIHNpbmdsZVRvdWNoU2VxdWVuY2UoKTsKKyAgICAgICAgZW5kVGVzdCgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9Cit9IGVsc2UgeworICAgIGRl
YnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUYXAgb24gdGhlIGJsdWUg
cmVjdCB0byBsb2cuIikKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NGJiYjY2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlz
IHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0b3VjaCBldmVudHMuIFNxdWFy
ZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3Ig
YnJva2VuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMTZj
MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNo
LWdlc3R1cmUtc2Nyb2xsLmh0bWwKQEAgLTAsMCArMSwxNzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgewor
ICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKKyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsK
KyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJl
YWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7Cisg
IGRpc3BsYXk6IGJsb2NrOworfQorCisjZ3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhl
aWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1h
cmdpbjogMHB4OworfQorCisjcmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEw
MHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7
Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFy
Z2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxs
c3BhY2luZz0iMHB4Ij4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+
PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgor
ICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48
L2Rpdj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+Cisg
ICAgICA8L3RyPgorICAgIDwvdGFibGU+CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CisKK3ZhciBtb3ZpbmdkaXY7Cit2YXIgRVhQRUNURURfU0NST0xMU19U
T1RBTCA9IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0g
Wyc5MCcsICc5MCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzAnLCAnOTUnXTsKKworZnVuY3Rp
b24gY2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3Jv
bGxzT2NjdXJyZWRdKTsKKyAgICAgICAgLy8gc2hvdWxkQmUoU3RyaW5nKG1vdmluZ2Rpdi5zY3Jv
bGxUb3ApLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRC
ZSgnbW92aW5nZGl2LnNjcm9sbExlZnQnLCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0p
OworICAgICAgICBzY3JvbGxzT2NjdXJyZWQrKzsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsc09j
Y3VycmVkID09IEVYUEVDVEVEX1NDUk9MTFNfVE9UQUwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUg
Z290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1ZW5j
ZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYgKCF3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2
ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQu
c2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2
aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVi
dWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7
CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg5NSwgMTIpOworICAgIGV2ZW50U2VuZGVy
LnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUgZGl2IHRvIHRoZSBsZWZ0LgorICAg
IGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgNSwgMTIpOworICAgIGV2ZW50U2VuZGVy
LnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7Cisg
ICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAg
ICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1
ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7CisgICAgZXZlbnRTZW5kZXIu
Y2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQoMTIsIDk3
KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIHJl
Y3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIsIDIp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFz
ZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdh
aXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBl
eGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxl
bWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQor
eworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94
Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9u
KCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0b3VjaCBldmVudHMu
ICcgKworICAgICAgICAgICAgJ1NxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzJyk7CisK
KyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMpCisgICAgICAgICAgICBm
aXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJ
Zk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVx
dWlyZXMgRHVtcFJlbmRlclRyZWUuICBUb3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0IHRvIGxvZy4i
KTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmluZ2Vy
VXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxMjljZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTggQEAKK1Ro
aXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXZlbnQudHlwZSBpcyAibW91c2Vkb3duIgor
UEFTUyBldmVudC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNsaWVudFkgaXMgMTIKK1BBU1Mg
ZXZlbnQudHlwZSBpcyAibW91c2V1cCIKK1BBU1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFTUyBl
dmVudC5jbGllbnRZIGlzIDEyCitQQVNTIGV2ZW50LnR5cGUgaXMgImNsaWNrIgorUEFTUyBldmVu
dC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNsaWVudFkgaXMgMTIKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNj
cm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmOThiZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUaGlzIHRlc3RzIHNjcm9sbCBn
ZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBn
cmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitmaXJzdCBnZXN0
dXJlCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgMAorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xs
TGVmdCBpcyA5MAorc2Vjb25kIGdlc3R1cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyA5
NQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsTGVmdCBpcyA5MAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZGY5ZTVhLi5lYTdh
YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDI4ICsxLDM4IEBACisgMjAxMS0wMi0xNCAgUm9iZXJ0IEty
b2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisgCisgICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTQ0MTcKKyAgICAgICAgQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVyIHRv
IHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorIAorICAgICAgICBBZGRlZCBhIENocm9taXVtIHBsYXRm
b3JtIGltcGxlbWVudGF0aW9uIG9mIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVyLgorICAgICAg
ICAKKyAgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bTo6fkdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bTo6YWRkRWRnZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmlzSW5DbGlja1RpbWVXaW5kb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aXNJbnNpZGVNYW5oYXR0YW5T
cXVhcmUpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6ZGlz
cGF0Y2hTeW50aGV0aWNDbGljayk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW06OnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpzY3JvbGxWaWFUb3VjaE1vdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp1cGRhdGVWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjp0b3VjaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6Y2xpY2tPclNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjppblNjcm9sbCk6CisgICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUGxh
dGZvcm1HZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OnNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OnN0YXRlKToKIAogMjAxMS0wMi0xNCAgUHJhdGlrIFNvbGFu
a2kgIDxwc29sYW5raUBhcHBsZS5jb20+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkOTBjZGUyLi4y
YzQ2Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNDkwLDYgKzI0OTAsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXcuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9GcmFtZWxlc3NTY3JvbGxWaWV3LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXdDbGllbnQuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vS2V5Q29kZUNvbnZlcnNpb24u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vS2V5Q29kZUNvbnZlcnNpb25HdGsu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVtLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJl
Y29nbml6ZXIuY3BwCmluZGV4IDJhYTNhZWIuLmVhYTIwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0zNiw2
ICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6
OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIoKSB7IH0KIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6
ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkgeyB9CiAKKyNpZiAhUExBVEZPUk0oQ0hS
T01JVU0pCisKIC8vIFRvIGdldCBhIHVzZWZ1bCBHZXN0dXJlUmVjb2duaXplciwgYSBzcGVjaWZp
YyBwbGF0Zm9ybSBzaG91bGQgcmV0dXJuIHNvbWV0aGluZwogLy8gaGVyZSB0aGF0IG1lZXRzIGl0
cyBuZWVkcy4gRXZlbnRTZW5kZXIgd2lsbCBpZ25vcmUgbnVsbCBHZXN0dXJlUmVjb2duaXplcnMu
CiBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKiBjcmVhdGVQbGF0Zm9ybUdlc3R1cmVSZWNvZ25p
emVyKCkKQEAgLTQzLDQgKzQ1LDYgQEAgUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciogY3JlYXRl
UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcigpCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtV2hlZWxFdmVudC5oCmluZGV4IDI2OThlNmUuLmUwOTkxN2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC0xMDUsNiArMTA1LDMzIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgUGxhdGZv
cm1XaGVlbEV2ZW50KEludFBvaW50IHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBkZWx0YVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZWx0YVksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aGVlbFRpY2tzWCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHdoZWVsVGlja3NZLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlzQWNjZXB0ZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHNoaWZ0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXkpCisgICAgICAgICAgICA6IG1fcG9zaXRp
b24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRp
b24pCisgICAgICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKKyAgICAgICAgICAgICwgbV9kZWx0
YVkoZGVsdGFZKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NYKHdoZWVsVGlja3NYKQorICAg
ICAgICAgICAgLCBtX3doZWVsVGlja3NZKHdoZWVsVGlja3NZKQorICAgICAgICAgICAgLCBtX2dy
YW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICAgICAgICAgLCBtX2lzQWNjZXB0ZWQoaXNBY2Nl
cHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtleSkKKyAgICAgICAgICAgICwg
bV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFsdEtleSkKKyAgICAg
ICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9IC8v
IFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgICBjb25zdCBJbnRQb2ludCYgZ2xv
YmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfSAvLyBTY3JlZW4gY29v
cmRpbmF0ZXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzgxODJiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwCkBAIC0w
LDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
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
REFNQUdFLgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CisgCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEVkZ2UgZnVuY3Rpb25zLgorc3RhdGljIGJv
b2wgY2xpY2soR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSosIGNvbnN0IFBsYXRmb3JtVG91Y2hQ
b2ludCYpOworc3RhdGljIGJvb2wgY2xpY2tPclNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CitzdGF0aWMgYm9vbCBpblNjcm9sbChH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7Citz
dGF0aWMgYm9vbCByZXNldChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50Jik7CitzdGF0aWMgYm9vbCB0b3VjaERvd24oR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bSosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworCisvLyBGSVhNRTogTWFrZSB0
aGVzZSBjb25maWd1cmFibGUgcHJvZ3JhbW1hdGljYWxseS4KKy8vIE1heGltdW0gaG9sZCBkb3du
IChzKSBmb3IgYSB0b3VjaCB0byBiZSB0cmVhdGVkIGFzIGEgY2xpY2suCitzdGF0aWMgY29uc3Qg
ZG91YmxlIG1heENsaWNrRG93blRpbWUgPSAwLjg7CisKKy8vIE1pbmltdW0gaG9sZCBkb3duIChz
KSBmb3IgYSB0b3VjaCB0byBiZSB0cmVhdGVkIGFzIGEgY2xpY2suCitzdGF0aWMgY29uc3QgZG91
YmxlIG1pbkNsaWNrRG93blRpbWUgPSAwLjAxOworCisvLyBNYXhpbXVtIG1hbmhhdHRhbiBkaXNw
bGFjZW1lbnQgZm9yIHRvdWNoIG1vdGlvbiB0bworLy8gc3RpbGwgYmUgY29uc2lkZXJlZCBhcyBh
IGNsaWNrLgorc3RhdGljIGNvbnN0IGludCBtYXhNYW5oYXR0YW5EaXN0YW5jZSA9IDIwOworCitH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKKyAg
ICA6IG1fZmlyc3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9zdGF0ZShHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpOb0dlc3R1cmUpCisgICAgLCBtX2xhc3RUb3VjaFRpbWUoMC4wKQorICAgICwg
bV9ldmVudEhhbmRsZXIoMCkKK3sKK30KKworR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6fkdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQoreworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW06OmFkZEVkZ2VGdW5jdGlvbihTdGF0ZSBzdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwgYm9vbCBoYW5kbGVkLCBHZXN0dXJl
VHJhbnNpdGlvbkZ1bmN0aW9uIGYpCit7CisgICAgbV9lZGdlRnVuY3Rpb25zLmFkZChoYXNoKHN0
YXRlLCBmaW5nZXIsIHRvdWNoVHlwZSwgaGFuZGxlZCksIGYpOworfQorCitib29sIEdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW06OmlzSW5DbGlja1RpbWVXaW5kb3coKQoreworICAgIGRvdWJsZSBk
dXJhdGlvbihtX2xhc3RUb3VjaFRpbWUgLSBtX2ZpcnN0VG91Y2hUaW1lKTsKKyAgICByZXR1cm4g
ZHVyYXRpb24gPj0gbWluQ2xpY2tEb3duVGltZSAmJiBkdXJhdGlvbiA8IG1heENsaWNrRG93blRp
bWU7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aXNJbnNpZGVNYW5oYXR0
YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwKQoreworICAgIGludCBtYW5oYXR0
YW5EaXN0YW5jZSA9IGFicyhwLnBvcygpLngoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLngoKSkg
KworICAgICAgICBhYnMocC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOwor
ICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5jZSA8IG1heE1hbmhhdHRhbkRpc3RhbmNlOworfQor
Cit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmRpc3BhdGNoU3ludGhldGljQ2xpY2so
Y29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwKQoreworICAgIC8vIE5COiBzeW50aGV0aWMgZXZl
bnRzIGFyZSBub3QgZGVsaXZlcmVkIHRvIHBsdWctaW5zLgorICAgIC8vIE5COiB0b3VjaC1iYXNl
ZCBVWCBuZWVkcyBjdXN0b20gcG9wdXAgY29tcG9uZW50cy4KKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgZmFrZU1vdXNlRG93bihwLnBvcygpLCBwLnNjcmVlblBvcygpLCBMZWZ0QnV0dG9uLCBNb3Vz
ZUV2ZW50UHJlc3NlZCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG1fbGFzdFRvdWNo
VGltZSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKHAucG9zKCksIHAuc2Ny
ZWVuUG9zKCksIExlZnRCdXR0b24sIE1vdXNlRXZlbnRSZWxlYXNlZCwgMSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIG1fbGFzdFRvdWNoVGltZSk7CisKKyAgICBtX2V2ZW50SGFuZGxlci0+
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VNb3VzZURvd24pOworICAgIG1fZXZlbnRIYW5kbGVy
LT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChmYWtlTW91c2VVcCk7Cit9CisKK3ZvaWQgR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bTo6aW5pdCgpCit7CisgICAgY29uc3QgdW5zaWduZWQgRmlyc3RG
aW5nZXIgPSAwOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgUmVsZWFzZWQg
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQ7CisgICAgY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50OjpTdGF0ZSBQcmVzc2VkID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNz
ZWQ7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBNb3ZlZCA9IFBsYXRmb3Jt
VG91Y2hQb2ludDo6VG91Y2hNb3ZlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0
YXRlIFN0YXRpb25hcnkgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKKyAg
ICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIENhbmNlbGxlZCA9IFBsYXRmb3JtVG91
Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQ7CisKKyAgICBhZGRFZGdlRnVuY3Rpb24oTm9HZXN0dXJl
LCBGaXJzdEZpbmdlciwgUHJlc3NlZCwgZmFsc2UsIHRvdWNoRG93bik7CisgICAgYWRkRWRnZUZ1
bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIsIENhbmNlbGxlZCwgZmFs
c2UsIHJlc2V0KTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBG
aXJzdEZpbmdlciwgUmVsZWFzZWQsIGZhbHNlLCBjbGljayk7CisgICAgYWRkRWRnZUZ1bmN0aW9u
KFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIsIE1vdmVkLCBmYWxzZSwgY2xpY2tP
clNjcm9sbCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmly
c3RGaW5nZXIsIFN0YXRpb25hcnksIGZhbHNlLCBjbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdl
RnVuY3Rpb24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBpblNjcm9sbCk7Cisg
ICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIFJlbGVhc2VkLCBmYWxzZSwg
cmVzZXQpOworICAgIGFkZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBDYW5jZWxs
ZWQsIGZhbHNlLCByZXNldCk7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6
cHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZl
bnQsIEV2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyLCBib29sIGhhbmRsZWQpCit7CisgICAgbV9l
dmVudEhhbmRsZXIgPSBldmVudEhhbmRsZXI7CisgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtVG91
Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50LnRvdWNoUG9pbnRzKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQmIHAgPSBwb2ludHNbaV07CisgICAgICAgIHVwZGF0ZVZhbHVlcyhldmVudC50
aW1lc3RhbXAoKSwgcCk7CisKKyAgICAgICAgaWYgKEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24g
ZWYgPSBtX2VkZ2VGdW5jdGlvbnMuZ2V0KGhhc2gobV9zdGF0ZSwgcC5pZCgpLCBwLnN0YXRlKCks
IGhhbmRsZWQpKSkKKyAgICAgICAgICAgIGhhbmRsZWQgPSAoKmVmKSh0aGlzLCBwKTsKKyAgICAg
ICAgLy8gVGhlIGdyYXBoIGlzIHNwYXJzZTogbm90IGFsbCBlZGdlcyBoYXZlIGZ1bmN0aW9ucy4K
KyAgICB9CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bTo6c2Nyb2xsVmlhVG91Y2hNb3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0
cCkKK3sKKyAgICBmbG9hdCBkZWx0YVgodHAucG9zKCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRp
b24ueCgpKTsKKyAgICBmbG9hdCBkZWx0YVkodHAucG9zKCkueSgpIC0gbV9maXJzdFRvdWNoUG9z
aXRpb24ueSgpKTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudCBzeW50aGV0aWNXaGVlbEV2ZW50
KHRwLnBvcygpLCB0cC5zY3JlZW5Qb3MoKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWCAvIHN0YXRp
Y19jYXN0PGZsb2F0PigxMjApLCBkZWx0YVkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIwKSwgU2Ny
b2xsQnlQaXhlbFdoZWVsRXZlbnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7
CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVu
dCk7CisgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0cC5wb3MoKTsKK30KKwordm9pZCBHZXN0
dXJlUmVjb2duaXplckNocm9taXVtOjp1cGRhdGVWYWx1ZXMoY29uc3QgZG91YmxlIHRvdWNoVGlt
ZSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0cCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9PSBO
b0dlc3R1cmUpIHsKKyAgICAgICAgbV9maXJzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsKKyAgICAg
ICAgbV9sYXN0VG91Y2hUaW1lID0gdG91Y2hUaW1lOworICAgICAgICBtX2ZpcnN0VG91Y2hQb3Np
dGlvbiA9IHRwLnBvcygpOworICAgIH0gZWxzZQorICAgICAgICBtX2xhc3RUb3VjaFRpbWUgPSB0
b3VjaFRpbWU7Cit9CisKKy8vIEJ1aWxkcyBhIGhhc2guIEhhc2hlcyBhcmUgYXNzZW1ibGVkIGJ5
IGpvaW5pbmcgdG9nZXRoZXIgbXVsdGlwbGUgYml0cy4KKy8vIDMgTFNCIGJpdHMgZm9yIHRoZSB8
dG91Y2hUeXBlfC4KKy8vIDEgYml0IGZvciB8aGFuZGxlZHwKKy8vIDEyIGJpdHMgZm9yIHxpZHwK
Ky8vIDE2IGJpdHMgZm9yIHRoZSB8Z2VzdHVyZVN0YXRlfC4KK3Vuc2lnbmVkIGludCBHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpoYXNoKFN0YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWduZWQgaWQs
IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgdG91Y2hUeXBlLCBib29sIGhhbmRsZWQpCit7Cisg
ICAgcmV0dXJuIDEgKyAoKHRvdWNoVHlwZSAmIDcpIHwgKGhhbmRsZWQgPyAxIDw8IDMgOiAwKSB8
ICgoaWQgJiAweGZmZikgPDwgNCApIHwgKGdlc3R1cmVTdGF0ZSA8PCAxNikpOworfQorCisvLwor
Ly8gRWRnZSBmdW5jdGlvbnMKKy8vCitzdGF0aWMgYm9vbCB0b3VjaERvd24oR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bSogZ20sIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcCkKK3sKKyAgICBn
bS0+c2V0U3RhdGUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0Ns
aWNrKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgcmVzZXQoR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bSogZ20sIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcCkKK3sKKyAgICBnbS0+
c2V0U3RhdGUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGNsaWNrKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0qIGdtLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHApCit7CisgICAgaWYgKGdtLT5pc0lu
Q2xpY2tUaW1lV2luZG93KCkgJiYgZ20tPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKSB7Cisg
ICAgICAgIGdtLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUp
OworICAgICAgICBnbS0+ZGlzcGF0Y2hTeW50aGV0aWNDbGljayhwKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiByZXNldChnbSwgcCk7Cit9CisKK3N0YXRpYyBib29s
IGNsaWNrT3JTY3JvbGwoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSogZ20sIGNvbnN0IFBsYXRm
b3JtVG91Y2hQb2ludCYgcCkKK3sKKyAgICBpZiAoZ20tPmlzSW5DbGlja1RpbWVXaW5kb3coKSAm
JiBnbS0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpIHsKKyAgICAgICAgZ20tPnNldFN0YXRl
KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHAuc3RhdGUoKSA9PSBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQgJiYgIWdtLT5pc0luc2lkZU1hbmhhdHRhblNxdWFy
ZShwKSkgeworICAgICAgICBnbS0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocCk7CisgICAgICAgIGdt
LT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBp
blNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnbSwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JiBwKQoreworICAgIGdtLT5zY3JvbGxWaWFUb3VjaE1vdGlvbihwKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciogY3JlYXRlUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplcigpCit7CisgICAgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSogZ20g
PSBuZXcgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIGdtLT5pbml0KCk7CisgICAg
cmV0dXJuIGdtOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9t
aXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3ZjA3YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
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
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2luY2x1ZGUgIlBsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgor
I2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW07CisKKwor
Ly8gQSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGRldGVjdHMgZ2VzdHVyZXMgb2NjdXJyaW5n
IGluIHRoZSB0b3VjaCBldmVudC4KKy8vIEluIHJlc3BvbnNlIHRvIGEgZ2l2ZW4gdG91Y2ggZXZl
bnQsIHRoZSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtLCB1cGRhdGVzCisvLyBpdHMgaW50ZXJu
YWwgc3RhdGUgYW5kIG9wdGlvbmFsbHkgZGlzcGF0Y2hlcyBzeW50aGV0aWMgZXZlbnRzIHRvIHRo
ZQorLy8gaW52b2tpbmcgV2ViVmlld0ltcGwuCitjbGFzcyBHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgIHsKK3B1YmxpYzoKKyAKKyAg
ICAvLyBUaGUgc3RhdGVzIG9mIHRoZSBnZXN0dXJlIG1hbmFnZXIgc3RhdGUgbWFjaGluZS4KKyAg
ICBlbnVtIFN0YXRlIHsKKyAgICAgIE5vR2VzdHVyZSwKKyAgICAgIFBlbmRpbmdTeW50aGV0aWND
bGljaywKKyAgICAgIFNjcm9sbAorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBib29sICgqR2Vz
dHVyZVRyYW5zaXRpb25GdW5jdGlvbikoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSosIGNvbnN0
IFBsYXRmb3JtVG91Y2hQb2ludCYpOworICAgIAorICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0oKTsKKyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisgIAorICAg
IC8vIEFkZHMgYSBuZXcgZWRnZSBmdW5jdGlvbiB0byB0aGUgR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bS4KKyAgICB2b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlLCBib29sIGhhbmRsZWQsIEdlc3R1cmVUcmFuc2l0aW9u
RnVuY3Rpb24pOworICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggYSBtb3Vz
ZURvd24vbW91c2VVcC9DbGljayBzZXF1ZW5jZS4KKyAgICB2b2lkIGRpc3BhdGNoU3ludGhldGlj
Q2xpY2soY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisgICAgCisgICAgLy8gQ3JlYXRlcyB0
aGUgZ2VzdHVyZSBzdGF0ZSBtYWNoaW5lLgorICAgIHZpcnR1YWwgdm9pZCBpbml0KCk7CisgIAor
ICAgIC8vIFRydWUgaWYgdGhlIHRpbWUgc2luY2UgdG91Y2hEb3duIGlzIGxlc3MgdGhhbiB0aGUg
bWluaW11bSBmb3IgYSBjbGljay4KKyAgICBib29sIGlzSW5DbGlja1RpbWVXaW5kb3coKTsKKyAg
ICAKKyAgICAvLyBUcnVlIGZvciBhIHBvaW50IHAgc3RpbGwgaW5zaWRlIHRoZSB0aHJlc2hvbGRl
ZCBzcXVhcmUuCisgICAgYm9vbCBpc0luc2lkZU1hbmhhdHRhblNxdWFyZShjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQmKTsKKyAgCisgICAgLy8gSW52b2tlZCBmb3IgZWFjaCB0b3VjaCBldmVudCB0
aGF0IGNvdWxkIGNvbnRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgZ2VzdHVyZS4KKyAgICAvLyBUYWtl
cyB0aGUgfGV2ZW50fCBhbmQgdGhlIHxzb3VyY2V8IHRoYXQgb3JpZ2luYXRlZCBpdCBhbmQgd2hp
Y2ggd2lsbCBhbHNvCisgICAgLy8gYmUgdGhlIHRhcmdldCBvZiBhbnkgZ2VuZXJhdGVkIHN5bnRo
ZXRpYyBldmVudC4gRmluYWxseSwgfGhhbmRsZWR8CisgICAgLy8gc3BlY2lmaWVzIGlmIHRoZSB8
ZXZlbnR8IHdhcyBhY3R1YWxseSBoYW5kbGVkIGJ5IHxzb3VyY2V8LgorICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZXZlbnQgcmVzdWx0ZWQgaW4gZmlyaW5nIGEgc3ludGhldGljIGV2ZW50Lgor
ICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZv
cm1Ub3VjaEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVkKTsKKyAgCisgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHNjcm9sbCB0aGUgc2NyZWVuLgorICAgIHZvaWQgc2Nyb2xsVmlh
VG91Y2hNb3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisgICAgCisgICAgdm9pZCBz
ZXRTdGF0ZShTdGF0ZSBzKSB7IG1fc3RhdGUgPSBzOyB9CisgICAgU3RhdGUgc3RhdGUoKSB7IHJl
dHVybiBtX3N0YXRlOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBVcGRhdGUgY29tcHV0ZWQgZ2Vz
dHVyYWwgcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgZ2l2ZW4gZXZlbnQuCisgICAgdm9pZCB1cGRh
dGVWYWx1ZXMoZG91YmxlLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQgJik7CisKKyAgICAvLyBN
YWtlcyBhbiBlZGdlIGlkZW50aWZpZXIgaW50ZWdlci4KKyAgICB1bnNpZ25lZCBpbnQgaGFzaChT
dGF0ZSwgdW5zaWduZWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUsIGJvb2wpOworICAKKyAg
ICAvLyBNYXAgb2YgZWRnZSBmdW5jdGlvbnMKKyAgICBXVEY6Okhhc2hNYXA8aW50LCBHZXN0dXJl
VHJhbnNpdGlvbkZ1bmN0aW9uPiBtX2VkZ2VGdW5jdGlvbnM7CisgICAgCisgICAgLy8gTG9jYXRp
b24gb2YgZmlyc3QgdG91Y2guCisgICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9zaXRpb247Cisg
IAorICAgIC8vIFRpbWUgd2hlbiB0aGUgdG91Y2ggd2VudCBkb3duLgorICAgIGRvdWJsZSBtX2Zp
cnN0VG91Y2hUaW1lOworICAgIAorICAgIC8vIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gc3Rh
dGUuCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgCisgICAgLy8gVGltZSBvZiBtb3N0IHJlY2VudCB0
b3VjaCBldmVudC4KKyAgICBkb3VibGUgbV9sYXN0VG91Y2hUaW1lOworICAKKyAgICAvLyBUaGUg
RXZlbnRIYW5kbGVyIHRoYXQgaW52b2tlZCB0aGUgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSwg
dmFsaWQgb25seQorICAgIC8vIHByb2Nlc3NpbmcgYSBzaW5nbGUgUGxhdGZvcm1Ub3VjaFBvaW50
LgorICAgIEV2ZW50SGFuZGxlciogbV9ldmVudEhhbmRsZXI7ICAKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2ZjZmIwMi4uNThmNWYx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wMi0x
NCAgUm9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0NDE3CisgICAgICAgIEFkZCBhIGJhc2ljIGdlc3R1cmUgcmVj
b2duaXplciB0byB0aGUgQ2hyb21pdW0gcGxhdGZvcm0KKworICAgICAgICBBZGRlZCB1bml0IHRl
c3RzIGZvciBhIGJhc2ljIENocm9taXVtIGdlc3R1cmUgcmVjb2duaXplci4KKworICAgICAgICAq
IFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1U
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnRI
YXNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6Zmlyc3RUb3VjaFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxl
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6c2V0Rmlyc3RUb3VjaFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpmaXJzdFRvdWNo
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW06OnNldExhc3RUb3VjaFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpsYXN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6ZWRnZUZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6
dFVwZGF0ZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNo
UG9pbnQ6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBv
aW50OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2lu
dDo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RH
ZXN0dXJlUmVjb2duaXplcjo6VGVzdEdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dEdlc3R1cmVSZWNvZ25pemVyOjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0Yp
OgorCiAyMDExLTAyLTE0ICBKYXkgU29mZmlhbiAgPGpheXNvZmZpYW5AZ21haWwuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCmluZGV4IDAxNmNmMWEuLmY2OGNhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwog
ICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVz
dHMvRHJhZ0ltYWdlVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0dlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxp
dGllc1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HZXN0dXJlUmVjb2duaXplckNocm9taXVtVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1U
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjE3N2E2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HZXN0dXJlUmVjb2du
aXplckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIDogcHVibGljIFdl
YkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0geworcHVibGljOgorICAgIEluc3BlY3Rh
YmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpIDogV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bSgpIHsgfQorCisgICAgaW50IHRIYXNoKFN0YXRlIGdlc3R1cmVTdGF0ZSwKKyAg
ICAgICAgICAgICAgdW5zaWduZWQgaWQsCisgICAgICAgICAgICAgIFBsYXRmb3JtVG91Y2hQb2lu
dDo6U3RhdGUgdG91Y2hUeXBlLCAKKyAgICAgICAgICAgICAgYm9vbCBoYW5kbGVkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGhhc2goZ2VzdHVyZVN0YXRlLCBpZCwgdG91Y2hUeXBlLCBoYW5kbGVk
KTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgIH07CisgIAorICAgIEludFBvaW50IGZpcnN0
VG91Y2hQb3NpdGlvbigpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFBvc2l0aW9uOyB9OworICAgIAor
ICAgIHZvaWQgc2V0Rmlyc3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9maXJzdFRvdWNoVGltZSA9
IHQ7IH07CisgICAgZG91YmxlIGZpcnN0VG91Y2hUaW1lKCkgeyByZXR1cm4gbV9maXJzdFRvdWNo
VGltZTsgfTsKKyAgICAKKyAgICB2b2lkIHNldExhc3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9s
YXN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBkb3VibGUgbGFzdFRvdWNoVGltZSgpIHsgcmV0dXJu
IG1fbGFzdFRvdWNoVGltZTsgfTsKKyAgICAKKyAgICBHZXN0dXJlUmVjb2duaXplckNocm9taXVt
OjpHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGVkZ2VGdW5jdGlvbihpbnQgaGFzaCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2VkZ2VGdW5jdGlvbnMuZ2V0KGhhc2gpOworICAgIH07CisgIAor
ICAgIHZpcnR1YWwgdm9pZCB0VXBkYXRlVmFsdWVzKGRvdWJsZSBkLCBjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQgJnApCisgICAgeworICAgICAgICB1cGRhdGVWYWx1ZXMoZCwgcCk7CisgICAgfTsK
K307CisKK2NsYXNzIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCA6IHB1YmxpYyBXZWJDb3Jl
OjpQbGF0Zm9ybVRvdWNoUG9pbnQgeworcHVibGljOgorICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91
Y2hQb2ludCgpOworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludChpbnQgeCwgaW50IHkp
OworICAgIAorICAgIHZvaWQgc2V0WChpbnQgeCkKKyAgICB7CisgICAgICBtX3Bvcy5zZXRYKHgp
OworICAgICAgbV9zY3JlZW5Qb3Muc2V0WCh4KTsKKyAgICB9OworICAgIAorICAgIHZvaWQgc2V0
WShpbnQgeSkKKyAgICB7CisgICAgICBtX3Bvcy5zZXRZKHkpOworICAgICAgbV9zY3JlZW5Qb3Mu
c2V0WSh5KTsKKyAgICB9OworfTsKKworQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWls
ZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQoKQoreworICAgIG1faWQgPSAwOworICAgIG1fc3RhdGUg
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKKyAgICBtX3BvcyA9IEludFBv
aW50KDAsIDApOworICAgIG1fc2NyZWVuUG9zID0gSW50UG9pbnQoMCwgMCk7Cit9OworCitCdWls
ZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludChpbnQg
eCwgaW50IHkpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRmb3JtVG91Y2hQ
b2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQoeCwgeSk7CisgICAg
bV9zY3JlZW5Qb3MgPSBJbnRQb2ludCh4LCB5KTsKK307CisKKworY2xhc3MgVGVzdEdlc3R1cmVS
ZWNvZ25pemVyIDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFRlc3RHZXN0
dXJlUmVjb2duaXplcigpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVw
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeyB9Cit9OworCitURVNUX0YoVGVz
dEdlc3R1cmVSZWNvZ25pemVyLCBoYXNoKQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bSB0ZXN0R207CisgICAgY29uc3QgdW5zaWduZWQgRmlyc3RGaW5nZXIgPSAw
OworICAgIGNvbnN0IHVuc2lnbmVkIFNlY29uZEZpbmdlciA9IDE7CisKKyAgICBBU1NFUlRfRVEo
MSArIDAsIHRlc3RHbS50SGFzaChHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUs
CisgICAgICAgIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQs
IGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICg4IHwgMSksIHRlc3RHbS50SGFzaChHZXN0
dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUsCisgICAgICAgIEZpcnN0RmluZ2VyLCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgdHJ1ZSkpOworCisgICAgQVNTRVJUX0VR
KDEgKyAoMHgxMDAwMCB8IDIpLCB0ZXN0R20udEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrLAorICAgICAgICBGaXJzdEZpbmdlciwgUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaE1vdmVkLCBmYWxzZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAweDIw
MDAwLCB0ZXN0R20udEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLAorICAg
ICAgICBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCBmYWxz
ZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoMHgyMDAwMCB8IDEpLCB0ZXN0R20udEhhc2goR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLAorICAgICAgICBGaXJzdEZpbmdlciwgUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEo
MSArICgweDIwMDAwIHwgMHgxMCB8IDggfCAxKSwKKyAgICAgICAgdGVzdEdtLnRIYXNoKEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OlNjcm9sbCwgU2Vjb25kRmluZ2VyIHwgMHgxMDAwLCAKKyAg
ICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsKK30KKworCitU
RVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBzdGF0ZSkKK3sKKyAgICBJbnNwZWN0YWJsZUdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gdGVzdEdtOworCisgICAgQVNTRVJUX0VRKDAsIHRlc3RH
bS5zdGF0ZSgpKTsKKyAgICB0ZXN0R20uc2V0U3RhdGUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICBBU1NFUlRfRVEoR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrLCB0ZXN0R20uc3RhdGUoKSk7Cit9CisK
KworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUp
Cit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdtOworICAgIEJ1
aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwOworCisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmly
c3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNo
UG9zaXRpb24oKS55KCkpOworICAKKyAgICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoMTkuOTk5
KTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisgICAg
CisgICAgcC5zZXRYKDE5Ljk5OSk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX1RSVUUo
Z20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDIwLjApOworICAg
IHAuc2V0WSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFy
ZShwKSk7CisgICAgCisgICAgcC5zZXRYKDAuMCk7CisgICAgcC5zZXRZKDIwLjApOworICAgIEFT
U0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisgICAgCisgICAgcC5z
ZXRYKC0yMC4wKTsKKyAgICBwLnNldFkoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbnNp
ZGVNYW5oYXR0YW5TcXVhcmUocCkpOworICAgIAorICAgIHAuc2V0WCgwLjApOworICAgIHAuc2V0
WSgtMjAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHAp
KTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbkNsaWNrVGltZVdpbmRv
dykKK3sKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisgICAg
CisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91Y2hUaW1l
KDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisgICAg
CisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91Y2hUaW1l
KDAuMDEwMDAxKTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luQ2xpY2tUaW1lV2luZG93KCkpOwor
ICAgIAorICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNo
VGltZSgwLjggLSAuMDAwMDAwMDEpOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5DbGlja1RpbWVX
aW5kb3coKSk7CisgICAgCisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5z
ZXRMYXN0VG91Y2hUaW1lKDAuODAwMDEpOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luQ2xpY2tU
aW1lV2luZG93KCkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBhZGRFZGdl
RnVuY3Rpb24pCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdt
OworICAgIGdtLmFkZEVkZ2VGdW5jdGlvbihHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3Jv
bGwsIDAsCisgICAgICAgIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgdHJ1ZSwK
KyAgICAgICAgKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVUcmFuc2l0aW9uRnVu
Y3Rpb24pNDA5Nik7CisgICAgCisgICAgQVNTRVJUX0VRKChHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uKTQwOTYsCisgICAgICAgIGdtLmVkZ2VGdW5j
dGlvbihnbS50SGFzaChHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwsCisgICAgICAg
ICAwLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQsIHRydWUpKSk7Cit9CisKK1RF
U1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIHVwZGF0ZVZhbHVlcykKK3sKKyAgICBJbnNwZWN0
YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisKKyAgICBBU1NFUlRfRVEoMC4wLCBn
bS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5sYXN0VG91Y2hUaW1l
KCkpOworICAgIEFTU0VSVF9FUShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUs
IGdtLnN0YXRlKCkpOworCisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHAxKDEwLCAx
MSk7CisgICAgZ20udFVwZGF0ZVZhbHVlcygxLjEsIHAxKTsKKyAgICAKKyAgICBBU1NFUlRfRVEo
MTAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLngoKSk7CisgICAgQVNTRVJUX0VRKDExLCBnbS5m
aXJzdFRvdWNoUG9zaXRpb24oKS55KCkpOworICAgIEFTU0VSVF9FUSgxLjEsIGdtLmZpcnN0VG91
Y2hUaW1lKCkpOworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZp
cnN0VG91Y2hUaW1lKCkpOworCisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHAyKDEz
LCAxNCk7CisgICAgZ20uc2V0U3RhdGUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6UGVuZGlu
Z1N5bnRoZXRpY0NsaWNrKTsKKyAgICBnbS50VXBkYXRlVmFsdWVzKDIuMCwgcDIpOworICAgICAg
ICAgICAgICAgIAorICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgp
KTsKKyAgICBBU1NFUlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAg
QVNTRVJUX0VRKDEuMSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDIuMCAt
IDEuMSwgZ20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBC
dWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDMoMjMsIDM0KTsKKyAgICBnbS5zZXRTdGF0ZShH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUpOworICAgIGdtLnRVcGRhdGVWYWx1
ZXMoMy4wLCBwMyk7CisgICAgICAgICAgICAgICAgCisgICAgQVNTRVJUX0VRKDIzLCBnbS5maXJz
dFRvdWNoUG9zaXRpb24oKS54KCkpOworICAgIEFTU0VSVF9FUSgzNCwgZ20uZmlyc3RUb3VjaFBv
c2l0aW9uKCkueSgpKTsKKyAgICBBU1NFUlRfRVEoMy4wLCBnbS5maXJzdFRvdWNoVGltZSgpKTsK
KyAgICBBU1NFUlRfRVEoMC4wLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGlt
ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>
<flag name="review"
          id="74031"
          type_id="1"
          status="-"
          setter="rjkroege"
    />
    <flag name="commit-queue"
          id="79022"
          type_id="3"
          status="-"
          setter="rjkroege"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92841</attachid>
            <date>2011-05-09 13:44:30 -0700</date>
            <delta_ts>2011-05-10 09:23:17 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>gms3_1.diff</filename>
            <type>text/plain</type>
            <size>44825</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzZjI3Mzk1Li4xNWI0YmEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDUt
MDkgIFJvYmVydCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFz
aWMgZ2VzdHVyZSByZWNvZ25pemVyIHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBT
aG93cyB0aGF0IHRoZSBiYXNpYyBDaHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3Rs
eSBjb252ZXJ0IGEgdG91Y2ggZXZlbnQgc2VxdWVuY2UKKyAgICAgICAgaW50byBhIHNlcXVlbmNl
IG9mIHN5bnRoZXRpYyBtb3VzZSBldmVudHMuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3Vj
aC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorCiAyMDExLTA1LTA5ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4ZGViYQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUt
Y2xpY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2lu
Z2xlIHRvdWNoIGdlc3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK0dlc3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmOWJkYQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUt
Y2xpY2suaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitkaXYuaWQgPSAidG91Y2h0YXJnZXQi
OworZGl2LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2Rpdi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgi
OworZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJibHVlIjsKKwordmFyIGNsaWNrRXZlbnRz
UmVjZWl2ZWQgPSAwOwordmFyIGV4cGVjdGVkTW91c2VFdmVudHMgPSAzOwordmFyIHRvdWNoRXZl
bnRzUmVjZWl2ZWQgPSAwOwordmFyIG1vdXNlRXZlbnRzUmVjZWl2ZWQgPSAwOwordmFyIGV2ZW50
VHlwZXMgPSBbICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdjbGljaycgXTsKKworZnVuY3Rpb24g
Z2VzdHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRl
cikgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCBldmVudFR5
cGVzW21vdXNlRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVu
dFgnLCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFknLCAnMTInKTsKKyAg
ICAgICAgbW91c2VFdmVudHNSZWNlaXZlZCsrOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVn
KGV2ZW50LnR5cGUpOworICAgICAgICBkZWJ1ZyhldmVudC5jbGllbnRYKTsKKyAgICAgICAgZGVi
dWcoZXZlbnQuY2xpZW50WSk7CisgICAgfQorfQorCisvLyBCZWNhdXNlIHdlIG1heSBub3QgaGF2
ZSBhIGdlc3R1cmUgcmVjb2duaXplciwgd2Ugc2VuZCBhIGtleSBwcmVzcworLy8gZXZlbnQgdG8g
ZW5kIHRoZSB0ZXN0IHdpdGhvdXQgdGVtcG9yYWwgZmxha2luZXNzLgorZnVuY3Rpb24gcXVpdEtl
eVRvRW5kVGVzdChldmVudCkgeworICAgIGVuZFRlc3QoKTsKK30KKworLy8gTG9nIHRoYXQgd2Ug
c3RpbGwgZ290IHRoZSB0b3VjaCBldmVudHMuCitmdW5jdGlvbiB0b3VjaEV2ZW50Q2FsbGJhY2so
ZXZlbnQpIHsKKyAgICAvLyBkZWJ1ZygnaGF2ZSByZWNlaXZlZDogJyArIGV2ZW50LnR5cGUpOwor
ICAgIHRvdWNoRXZlbnRzUmVjZWl2ZWQrKzsKKyAgICBkZWJ1ZygnaGF2ZSByZWNlaXZlZDogJyAr
IHRvdWNoRXZlbnRzUmVjZWl2ZWQgKyAnIHRvdWNoIGV2ZW50cycpOworICAgIHJldHVybiB0cnVl
OworfQorCitmdW5jdGlvbiBzaW5nbGVUb3VjaFNlcXVlbmNlKCkKK3sKKyAgICBldmVudFNlbmRl
ci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMCwg
MTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIEluc2VydCBzb21l
IGRlbGF5LiBOQjogdGhpcyB2YWx1ZSBkZXBlbmRzIG9uIG1pbkNsaWNrRG93blRpbWUsCisgICAg
Ly8gbWF4Q2xpY2tEb3duVGltZSBmcm9tIEdlc3R1cmVNYW5hZ2VyLmNwcAorICAgIGV2ZW50U2Vu
ZGVyLmxlYXBGb3J3YXJkKDIwKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50
KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3Qo
KQoreworCisgICAgaWYgKG1vdXNlRXZlbnRzUmVjZWl2ZWQgPCBleHBlY3RlZE1vdXNlRXZlbnRz
KSB7CisgICAgICAgIC8vIGRlYnVnKCdSZWNlaXZlZDogJyArIHRvdWNoRXZlbnRzUmVjZWl2ZWQg
KyAnIG1vdXNlIGV2ZW50cyAnKTsKKyAgICAgICAgZGVidWcoJ0dlc3R1cmUgbWFuYWdlciBub3Qg
aW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4nKTsKKyAgICB9CisgICAgLy8gQmFpbC4KKyAg
ICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBnZXN0dXJl
RXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIo
Im1vdXNldXAiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBxdWl0S2V5VG9FbmRUZXN0LCBmYWxzZSk7CisgICAg
ZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZh
bHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hFdmVudENh
bGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgdG91
Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9y
ZShkaXYsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0
aW9uKCJUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24uIik7
CisgICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKSB7CisgICAgICAgICAg
ICBzaW5nbGVUb3VjaFNlcXVlbmNlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5sZWFwRm9y
d2FyZCgxMCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCcgJyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAgVGFw
IG9uIHRoZSBibHVlIHJlY3QgdG8gbG9nLiIpCisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3Vj
aC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90
b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNGJiYjY2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0
b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9u
IHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDhiMTZjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKQEAgLTAsMCArMSwxNzAgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+
CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKKyNtb3Zpbmdib3gg
eworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBvdmVy
Zmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisjZ3JlZW5ib3ggeworICB3
aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBw
YWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisjcmVkYm94IHsKKyAgd2lkdGg6IDEw
MHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBw
eDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4K
KzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5nYm94Ij4KKyAgICA8dGFi
bGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4Ij4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRk
PjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVu
Ym94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxk
aXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5i
b3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGFibGU+CisgIDwvZGl2PgorPC9k
aXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBtb3ZpbmdkaXY7Cit2YXIg
RVhQRUNURURfU0NST0xMU19UT1RBTCA9IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3Zh
ciBzY3JvbGxBbW91bnRYID0gWyc5MCcsICc5MCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzAn
LCAnOTUnXTsKKworZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmluZ2Rp
diA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywg
c2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgLy8gc2hvdWxkQmUoU3Ry
aW5nKG1vdmluZ2Rpdi5zY3JvbGxUb3ApLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNPY2N1cnJlZF0p
OworICAgICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNjcm9sbExlZnQnLCBzY3JvbGxBbW91bnRY
W3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzY3JvbGxzT2NjdXJyZWQrKzsKKyAgICB9CisK
KyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IEVYUEVDVEVEX1NDUk9MTFNfVE9UQUwpIHsKKyAg
ICAgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNv
bmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZl
bnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRl
YnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2
ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50
IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1
ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5j
bGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg5NSwgMTIp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUgZGl2
IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgNSwgMTIp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFz
ZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdh
aXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBz
ZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7
CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFk
ZFRvdWNoUG9pbnQoMTIsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAg
ICAvLyBTY3JvbGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRv
dWNoUG9pbnQoMCwgMTIsIDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAg
ZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hF
bmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgp
OworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0dXJl
IG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7Cisg
ICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgp
OworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24g
ZnJvbSB0b3VjaCBldmVudHMuICcgKworICAgICAgICAgICAgJ1NxdWFyZSBpcyAobW9zdGx5KSBn
cmVlbiBvbiBwYXNzJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2lu
dHMpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRl
YnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUb3VjaCBzY3JvbGwgdGhl
IHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIo
J3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisK
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2Vz
dHVyZS1jbGljay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODlmOTZhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjAgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2Vu
ZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2hhdmUgcmVjZWl2ZWQ6
IDEgdG91Y2ggZXZlbnRzCitoYXZlIHJlY2VpdmVkOiAyIHRvdWNoIGV2ZW50cworUEFTUyBldmVu
dC50eXBlIGlzICJtb3VzZWRvd24iCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZl
bnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC50eXBlIGlzICJtb3VzZXVwIgorUEFTUyBldmVu
dC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNsaWVudFkgaXMgMTIKK1BBU1MgZXZlbnQudHlw
ZSBpcyAiY2xpY2siCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50
WSBpcyAxMgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRz
L3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWY5OGJkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUg
QEAKK1RoaXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50
cy4gU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAw
CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBt
b3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDk1CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkw
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDk4YmFjNmQuLmNhNmRkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAor
MjAxMS0wNS0wOSAgUm9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBB
ZGQgYSBiYXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisg
ICAgICAgIEFkZHMgYSBiYXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBs
YXRmb3JtLiBBZGRzIGFuIGVudHJ5IHBvaW50IHRvIHRoZQorICAgICAgICBHZXN0dXJlUmVjb2du
aXplciB0byByZXNldCBhbnkgaW50ZXJuYWwgc3RhdGUgb24gYSBwYWdlIHJlc2V0LiBSZXNldHRp
bmcgdGhlIGdlc3R1cmUKKyAgICAgICAgZ2VzdHVyZSByZWNvZ25pemVyIG9uIHBhZ2UgbG9hZCBp
cyBuZWNlc2FyeSBmb3IgcmVsaWFibGUgbGF5b3V0IHRlc3QgZXhlY3V0aW9uLgorCisgICAgICAg
IEFkZGVkIGFuIGFkZGl0aW9uYWwgY29uc3RydWN0b3IgdG8gcGVybWl0IGJ1aWxkaW5nIGEgc3lu
dGhldGljIFBsYXRmb3JtV2hlZWxFdmVudAorCisgICAgICAgIFNtYWxsIG1vZGlmaWNhdGlvbnMg
dG8gdGhlIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgYXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50
IHRoZQorICAgICAgICBzaW1wbGUgQ2hyb21pdW0gcGxhdGZvcm0gZ2VzdHVyZSByZWNvZ25pemVy
LgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Ny
b2xsLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnJlc2V0R2VzdHVy
ZVJlY29nbml6ZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6
CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIHBs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1X
aGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVzZXRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp+R2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjphZGRFZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6aXNJbkNsaWNrVGltZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjppc0luc2lkZU1hbmhhdHRhblNxdWFyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpkaXNwYXRjaFN5bnRo
ZXRpY0NsaWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cHJv
Y2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OnNjcm9sbFZpYVRvdWNoTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyk6CisgICAgICAgIChXZWJD
b3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvdWNoRG93bik6CisgICAgICAgIChXZWJDb3JlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpjbGljayk6CisgICAgICAgIChXZWJDb3JlOjpjbGlja09yU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OmluU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVJlY29n
bml6ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OnNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OnN0YXRlKToKKwogMjAxMS0wNS0wOSAgUm9iaW4gRHVubiAgPHJvYmluQGFs
bGR1bm4uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDZhN2E4ZmIuLjJmY2ZkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM3NjQs
NiArMzc2NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Ny
b2xsVmlldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Nj
cm9sbFZpZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Ny
b2xsVmlld0NsaWVudC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJl
UmVjb2duaXplckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9LZXlDb2RlQ29udmVyc2lvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9LZXlDb2RlQ29udmVyc2lvbkd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0tleWJvYXJkQ29kZXMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5k
ZXggYTcxMmI3Yy4uMzkwZDBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtMzE5OSw2ICszMTk5LDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50
KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAKICAgICByZXR1cm4gZGVmYXVsdFBy
ZXZlbnRlZDsKIH0KKworI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCit2b2lkIEV2ZW50
SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcigpCit7CisgICAgaWYgKG1fZ2VzdHVyZVJl
Y29nbml6ZXIpCisgICAgICAgIG1fZ2VzdHVyZVJlY29nbml6ZXItPnJlc2V0U3RhdGUoKTsKK30K
KyNlbmRpZgorCisKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRl
eCAyYmVmYWYzLi4wNjFkMjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE2
Niw2ICsxNjYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0
IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX1JF
Q09HTklaRVIpCisgICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25pemVyKCk7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVu
dEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGJhMGM2ODcuLjZkZmFm
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTIzMiw2ICsyMzIsMTAgQEAgdm9p
ZCBGcmFtZVZpZXc6OnJlc2V0KCkKICAgICBtX2lzVmlzdWFsbHlOb25FbXB0eSA9IGZhbHNlOwog
ICAgIG1fZmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2tQZW5kaW5nID0gdHJ1ZTsK
ICAgICBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNob3IgPSAwOworCisjaWYgRU5BQkxFKEdF
U1RVUkVfUkVDT0dOSVpFUikKKyAgICBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+cmVzZXRHZXN0
dXJlUmVjb2duaXplcigpOworI2VuZGlmCiB9CiAKIGJvb2wgRnJhbWVWaWV3Ojppc0ZyYW1lVmll
dygpIGNvbnN0IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA5ZWJlYTE1Li42YTI5M2VjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmNwcApA
QCAtMzYsNiArMzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBQbGF0Zm9ybUdlc3R1cmVSZWNv
Z25pemVyOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkgeyB9CiBQbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyOjp+UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcigpIHsgfQogCisjaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQorCiAvLyBUbyBnZXQgYSB1c2VmdWwgR2VzdHVyZVJlY29nbml6ZXIsIGEg
c3BlY2lmaWMgcGxhdGZvcm0gc2hvdWxkIHJldHVybiBzb21ldGhpbmcKIC8vIGhlcmUgdGhhdCBt
ZWV0cyBpdHMgbmVlZHMuIEV2ZW50SGFuZGxlciB3aWxsIGlnbm9yZSBudWxsIEdlc3R1cmVSZWNv
Z25pemVycy4KIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcj4gUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplcjo6Y3JlYXRlKCkKQEAgLTQzLDQgKzQ1LDYgQEAgUGFzc093blB0cjxQ
bGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyPiBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpjcmVh
dGUoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0
dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJl
UmVjb2duaXplci5oCmluZGV4IDgwMjU4M2YuLmJlYjA4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTU3LDYgKzU3
LDEwIEBAIHB1YmxpYzoKICAgICAvLyBzcGVjaWZpZXMgaWYgdGhlIHxldmVudHwgd2FzIGFjdHVh
bGx5IGhhbmRsZWQgYnkgfHNvdXJjZXwgKGJ5IHRoZSBKYXZhU2NyaXB0KQogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZXZlbnQgcmVzdWx0ZWQgaW4gZmlyaW5nIGEgc3ludGhldGljIGV2ZW50
LgogICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVkKSA9IDA7CisKKyAg
ICAvLyBDbGVhcnMgdGhlIEdlc3R1cmVSZWNvZ25pemVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLiBJ
dCdzIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgYmVmb3JlIGVhY2gKKyAgICAvLyBsYXlvdXQgdGVz
dCB0byByZWR1Y2UgZmxha2luZXNzLgorICAgIHZpcnR1YWwgdm9pZCByZXNldFN0YXRlKCkgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAzNzY1NTUzLi43NmZhYjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaApAQCAtMTA2LDYgKzEwNiwz
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudChJbnRQb2ludCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludFBvaW50IGdsb2JhbFBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgZGVsdGFYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVs
dGFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2hlZWxUaWNrc1gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aGVlbFRpY2tzWSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0FjY2VwdGVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY3RybEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5KQorICAgICAgICAgICAgOiBt
X3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2Jh
bFBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2RlbHRhWChkZWx0YVgpCisgICAgICAgICAgICAs
IG1fZGVsdGFZKGRlbHRhWSkKKyAgICAgICAgICAgICwgbV93aGVlbFRpY2tzWCh3aGVlbFRpY2tz
WCkKKyAgICAgICAgICAgICwgbV93aGVlbFRpY2tzWSh3aGVlbFRpY2tzWSkKKyAgICAgICAgICAg
ICwgbV9ncmFudWxhcml0eShncmFudWxhcml0eSkKKyAgICAgICAgICAgICwgbV9pc0FjY2VwdGVk
KGlzQWNjZXB0ZWQpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hpZnRLZXkpCisgICAgICAg
ICAgICAsIG1fY3RybEtleShjdHJsS2V5KQorICAgICAgICAgICAgLCBtX2FsdEtleShhbHRLZXkp
CisgICAgICAgICAgICAsIG1fbWV0YUtleShtZXRhS2V5KQorICAgICAgICB7CisgICAgICAgIH0K
KwogICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfSAvLyBQbGF0Zm9ybVdpbmRvdyBjb29yZGluYXRlcy4KICAgICAgICAgY29uc3QgSW50UG9p
bnQmIGdsb2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0gLy8gU2Ny
ZWVuIGNvb3JkaW5hdGVzLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2FmOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNw
cApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRWRnZSBmdW5jdGlvbnMuCitzdGF0aWMg
Ym9vbCBjbGljayhHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50Jik7CitzdGF0aWMgYm9vbCBjbGlja09yU2Nyb2xsKEdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIGluU2Nyb2xs
KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsK
K3N0YXRpYyBib29sIHJlc2V0KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0
Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIHRvdWNoRG93bihHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtl
IHRoZXNlIGNvbmZpZ3VyYWJsZSBwcm9ncmFtbWF0aWNhbGx5LgorLy8gTWF4aW11bSBob2xkIGRv
d24gKHMpIGZvciBhIHRvdWNoIHRvIGJlIHRyZWF0ZWQgYXMgYSBjbGljay4KK3N0YXRpYyBjb25z
dCBkb3VibGUgbWF4Q2xpY2tEb3duVGltZSA9IDAuODsKKworLy8gTWluaW11bSBob2xkIGRvd24g
KHMpIGZvciBhIHRvdWNoIHRvIGJlIHRyZWF0ZWQgYXMgYSBjbGljay4KK3N0YXRpYyBjb25zdCBk
b3VibGUgbWluQ2xpY2tEb3duVGltZSA9IDAuMDE7CisKKy8vIE1heGltdW0gbWFuaGF0dGFuIGRp
c3BsYWNlbWVudCBmb3IgdG91Y2ggbW90aW9uIHRvCisvLyBzdGlsbCBiZSBjb25zaWRlcmVkIGFz
IGEgY2xpY2suCitzdGF0aWMgY29uc3QgaW50IG1heE1hbmhhdHRhbkRpc3RhbmNlID0gMjA7CisK
K0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQor
ICAgIDogbV9maXJzdFRvdWNoVGltZSgwLjApCisgICAgLCBtX3N0YXRlKEdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06Ok5vR2VzdHVyZSkKKyAgICAsIG1fbGFzdFRvdWNoVGltZSgwLjApCisgICAg
LCBtX2V2ZW50SGFuZGxlcigwKQoreworfQorCisvLyBUT0RPKHJqa3JvZWdlKTogd3JpdGUgdGhp
cyBmdW5jdGlvbgordm9pZCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpyZXNldFN0YXRlKCkK
K3sKKyAgICBtX2ZpcnN0VG91Y2hUaW1lID0gMC4wOworICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpOb0dlc3R1cmU7CisgICAgbV9sYXN0VG91Y2hUaW1lID0gMC4wOwor
ICAgIG1fZXZlbnRIYW5kbGVyID0gMDsKK30KKworR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6
fkdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQoreworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OmFkZEVkZ2VGdW5jdGlvbihTdGF0ZSBzdGF0ZSwgdW5zaWduZWQgZmluZ2Vy
LCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwgYm9vbCBoYW5kbGVkLCBHZXN0
dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGYpCit7CisgICAgbV9lZGdlRnVuY3Rpb25zLmFkZChoYXNo
KHN0YXRlLCBmaW5nZXIsIHRvdWNoVHlwZSwgaGFuZGxlZCksIGYpOworfQorCitib29sIEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OmlzSW5DbGlja1RpbWVXaW5kb3coKQoreworICAgIGRvdWJs
ZSBkdXJhdGlvbihtX2xhc3RUb3VjaFRpbWUgLSBtX2ZpcnN0VG91Y2hUaW1lKTsKKyAgICByZXR1
cm4gZHVyYXRpb24gPj0gbWluQ2xpY2tEb3duVGltZSAmJiBkdXJhdGlvbiA8IG1heENsaWNrRG93
blRpbWU7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aXNJbnNpZGVNYW5o
YXR0YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwKQoreworICAgIGludCBtYW5o
YXR0YW5EaXN0YW5jZSA9IGFicyhwLnBvcygpLngoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLngo
KSkgKworICAgICAgICBhYnMocC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkp
OworICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5jZSA8IG1heE1hbmhhdHRhbkRpc3RhbmNlOwor
fQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmRpc3BhdGNoU3ludGhldGljQ2xp
Y2soY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwKQoreworICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBmYWtlTW91c2VEb3duKHAucG9zKCksIHAuc2NyZWVuUG9zKCksIExlZnRCdXR0b24sIE1vdXNl
RXZlbnRQcmVzc2VkLCAxLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgbV9sYXN0VG91Y2hU
aW1lKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAocC5wb3MoKSwgcC5zY3Jl
ZW5Qb3MoKSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFJlbGVhc2VkLCAxLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgbV9sYXN0VG91Y2hUaW1lKTsKKworICAgIG1fZXZlbnRIYW5kbGVyLT5o
YW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CisgICAgbV9ldmVudEhhbmRsZXIt
PmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKK30KKwordm9pZCBHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjppbml0KCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBGaXJzdEZp
bmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBSZWxlYXNlZCA9
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3Nl
ZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIE1vdmVkID0gUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3Rh
dGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAg
IGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgQ2FuY2VsbGVkID0gUGxhdGZvcm1Ub3Vj
aFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKworICAgIGFkZEVkZ2VGdW5jdGlvbihOb0dlc3R1cmUs
IEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxzZSwgdG91Y2hEb3duKTsKKyAgICBhZGRFZGdlRnVu
Y3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgQ2FuY2VsbGVkLCBmYWxz
ZSwgcmVzZXQpOworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhldGljQ2xpY2ssIEZp
cnN0RmluZ2VyLCBSZWxlYXNlZCwgZmFsc2UsIGNsaWNrKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24o
UGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBjbGlja09y
U2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJz
dEZpbmdlciwgU3RhdGlvbmFyeSwgZmFsc2UsIGNsaWNrT3JTY3JvbGwpOworICAgIGFkZEVkZ2VG
dW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBNb3ZlZCwgZmFsc2UsIGluU2Nyb2xsKTsKKyAg
ICBhZGRFZGdlRnVuY3Rpb24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgUmVsZWFzZWQsIGZhbHNlLCBy
ZXNldCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIENhbmNlbGxl
ZCwgZmFsc2UsIHJlc2V0KTsKK30KKworYm9vbCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpw
cm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVu
dCwgRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxlZCkKK3sKKyAgICBtX2V2
ZW50SGFuZGxlciA9IGV2ZW50SGFuZGxlcjsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1Ub3Vj
aFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91Y2hQb2ludHMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcG9pbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFBsYXRmb3Jt
VG91Y2hQb2ludCYgcCA9IHBvaW50c1tpXTsKKyAgICAgICAgdXBkYXRlVmFsdWVzKGV2ZW50LnRp
bWVzdGFtcCgpLCBwKTsKKworICAgICAgICBpZiAoR2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbiBl
ZiA9IG1fZWRnZUZ1bmN0aW9ucy5nZXQoaGFzaChtX3N0YXRlLCBwLmlkKCksIHAuc3RhdGUoKSwg
aGFuZGxlZCkpKQorICAgICAgICAgICAgaGFuZGxlZCA9ICgqZWYpKHRoaXMsIHApOworICAgICAg
ICAvLyBUaGUgZ3JhcGggaXMgc3BhcnNlOiBub3QgYWxsIGVkZ2VzIGhhdmUgZnVuY3Rpb25zLgor
ICAgIH0KKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjpzY3JvbGxWaWFUb3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHRw
KQoreworICAgIGZsb2F0IGRlbHRhWCh0cC5wb3MoKS54KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlv
bi54KCkpOworICAgIGZsb2F0IGRlbHRhWSh0cC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3Np
dGlvbi55KCkpOworCisgICAgLy8gRklYTUU6IENvbnZlcnQgdG8gZ2VzdHVyZSBldmVudHMgd2hl
biB0aGV5IGhhbmRsZSBzdWJmcmFtZXMuCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRp
Y1doZWVsRXZlbnQodHAucG9zKCksIHRwLnNjcmVlblBvcygpLCBkZWx0YVgsIGRlbHRhWSwgZGVs
dGFYIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDEyMCksIGRlbHRhWSAvIHN0YXRpY19jYXN0PGZsb2F0
PigxMjApLCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICBtX2V2ZW50SGFuZGxlci0+aGFuZGxlV2hlZWxFdmVudChzeW50aGV0
aWNXaGVlbEV2ZW50KTsKKyAgICBtX2ZpcnN0VG91Y2hQb3NpdGlvbiA9IHRwLnBvcygpOworfQor
Cit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyhjb25zdCBkb3Vi
bGUgdG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHRwKQoreworICAgIGlmIChz
dGF0ZSgpID09IE5vR2VzdHVyZSkgeworICAgICAgICBtX2ZpcnN0VG91Y2hUaW1lID0gdG91Y2hU
aW1lOworICAgICAgICBtX2xhc3RUb3VjaFRpbWUgPSB0b3VjaFRpbWU7CisgICAgICAgIG1fZmly
c3RUb3VjaFBvc2l0aW9uID0gdHAucG9zKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbGFzdFRv
dWNoVGltZSA9IHRvdWNoVGltZTsKK30KKworLy8gQnVpbGRzIGEgaGFzaC4gSGFzaGVzIGFyZSBh
c3NlbWJsZWQgYnkgam9pbmluZyB0b2dldGhlciBtdWx0aXBsZSBiaXRzLgorLy8gMyBMU0IgYml0
cyBmb3IgdGhlIHx0b3VjaFR5cGV8LgorLy8gMSBiaXQgZm9yIHxoYW5kbGVkfAorLy8gMTIgYml0
cyBmb3IgfGlkfAorLy8gMTYgYml0cyBmb3IgdGhlIHxnZXN0dXJlU3RhdGV8LgordW5zaWduZWQg
aW50IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Omhhc2goU3RhdGUgZ2VzdHVyZVN0YXRlLCB1
bnNpZ25lZCBpZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUsIGJvb2wgaGFu
ZGxlZCkKK3sKKyAgICByZXR1cm4gMSArICgodG91Y2hUeXBlICYgNykgfCAoaGFuZGxlZCA/IDEg
PDwgMyA6IDApIHwgKChpZCAmIDB4ZmZmKSA8PCA0ICkgfCAoZ2VzdHVyZVN0YXRlIDw8IDE2KSk7
Cit9CisKKy8vCisvLyBFZGdlIGZ1bmN0aW9ucworLy8KK3N0YXRpYyBib29sIHRvdWNoRG93bihH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnbSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBw
KQoreworICAgIGdtLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQZW5kaW5n
U3ludGhldGljQ2xpY2spOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCByZXNldChHZXN0
dXJlUmVjb2duaXplckNocm9taXVtKiBnbSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwKQor
eworICAgIGdtLT5yZXNldFN0YXRlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
Ym9vbCBjbGljayhHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnbSwgY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50JiBwKQoreworICAgIGlmIChnbS0+aXNJbkNsaWNrVGltZVdpbmRvdygpICYmIGdt
LT5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSkgeworICAgICAgICBnbS0+c2V0U3RhdGUoR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlKTsKKyAgICAgICAgZ20tPmRpc3BhdGNo
U3ludGhldGljQ2xpY2socCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gcmVzZXQoZ20sIHApOworfQorCitzdGF0aWMgYm9vbCBjbGlja09yU2Nyb2xsKEdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW0qIGdtLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHApCit7Cisg
ICAgaWYgKGdtLT5pc0luQ2xpY2tUaW1lV2luZG93KCkgJiYgZ20tPmlzSW5zaWRlTWFuaGF0dGFu
U3F1YXJlKHApKSB7CisgICAgICAgIGdtLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHAuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQg
JiYgIWdtLT5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSkgeworICAgICAgICBnbS0+c2Nyb2xs
VmlhVG91Y2hNb3Rpb24ocCk7CisgICAgICAgIGdtLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpTY3JvbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpblNjcm9sbChHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtKiBnbSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwKQoreworICAgIGdtLT5zY3Jv
bGxWaWFUb3VjaE1vdGlvbihwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc093blB0cjxQ
bGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyPiBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpjcmVh
dGUoKQoreworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qIGdtOworICAgIGdtID0gbmV3
IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKTsKKyAgICBnbS0+aW5pdCgpOworICAgIHJldHVy
biBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI+KGdtKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjRkZjIwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgKQEAgLTAs
MCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKKyNkZWZpbmUg
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKKyNpbmNsdWRl
ICJUb3VjaEV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOworCisKKy8vIEEgR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bSBkZXRlY3RzIGdlc3R1cmVzIG9jY3VycmluZyBpbiB0aGUg
dG91Y2ggZXZlbnQuCisvLyBJbiByZXNwb25zZSB0byBhIGdpdmVuIHRvdWNoIGV2ZW50LCB0aGUg
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSwgdXBkYXRlcworLy8gaXRzIGludGVybmFsIHN0YXRl
IGFuZCBvcHRpb25hbGx5IGRpc3BhdGNoZXMgc3ludGhldGljIGV2ZW50cyB0byB0aGUKKy8vIGlu
dm9raW5nIFdlYlZpZXdJbXBsLgorY2xhc3MgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSA6IHB1
YmxpYyBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyICB7CitwdWJsaWM6CisKKyAgICAvLyBUaGUg
c3RhdGVzIG9mIHRoZSBnZXN0dXJlIG1hbmFnZXIgc3RhdGUgbWFjaGluZS4KKyAgICBlbnVtIFN0
YXRlIHsKKyAgICAgIE5vR2VzdHVyZSwKKyAgICAgIFBlbmRpbmdTeW50aGV0aWNDbGljaywKKyAg
ICAgIFNjcm9sbAorICAgIH07CisKKyAgICB0eXBlZGVmIGJvb2wgKCpHZXN0dXJlVHJhbnNpdGlv
bkZ1bmN0aW9uKShHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50Jik7CisKKyAgICBHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisgICAgdmlydHVh
bCB+R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworCisgICAgLy8gQWRkcyBhIG5ldyBlZGdl
IGZ1bmN0aW9uIHRvIHRoZSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtLgorICAgIHZvaWQgYWRk
RWRnZUZ1bmN0aW9uKFN0YXRlLCB1bnNpZ25lZCBmaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6
U3RhdGUsIGJvb2wgaGFuZGxlZCwgR2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik7CisKKyAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggYSBtb3VzZURvd24vbW91c2VVcC9DbGljayBz
ZXF1ZW5jZS4KKyAgICB2b2lkIGRpc3BhdGNoU3ludGhldGljQ2xpY2soY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50Jik7CisKKyAgICAvLyBTZXN0cyB1cCBhIGdlc3R1cmUgc3RhdGUgbWFjaGluZS4K
KyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworCisgICAgLy8gUmVzZXRzIGEgZ2VzdHVyZSBzdGF0
ZSBtYWNoaW5lLgorICAgIHZpcnR1YWwgdm9pZCByZXNldFN0YXRlKCk7CisKKyAgICAvLyBUcnVl
IGlmIHRoZSB0aW1lIHNpbmNlIHRvdWNoRG93biBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gZm9y
IGEgY2xpY2suCisgICAgYm9vbCBpc0luQ2xpY2tUaW1lV2luZG93KCk7CisKKyAgICAvLyBUcnVl
IGZvciBhIHBvaW50IHAgc3RpbGwgaW5zaWRlIHRoZSB0aHJlc2hvbGRlZCBzcXVhcmUuCisgICAg
Ym9vbCBpc0luc2lkZU1hbmhhdHRhblNxdWFyZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsK
KworICAgIC8vIEludm9rZWQgZm9yIGVhY2ggdG91Y2ggZXZlbnQgdGhhdCBjb3VsZCBjb250cmli
dXRlIHRvIHRoZSBjdXJyZW50IGdlc3R1cmUuCisgICAgLy8gVGFrZXMgdGhlIHxldmVudHwgYW5k
IHRoZSB8c291cmNlfCB0aGF0IG9yaWdpbmF0ZWQgaXQgYW5kIHdoaWNoIHdpbGwgYWxzbworICAg
IC8vIGJlIHRoZSB0YXJnZXQgb2YgYW55IGdlbmVyYXRlZCBzeW50aGV0aWMgZXZlbnQuIEZpbmFs
bHksIHxoYW5kbGVkfAorICAgIC8vIHNwZWNpZmllcyBpZiB0aGUgfGV2ZW50fCB3YXMgYWN0dWFs
bHkgaGFuZGxlZCBieSB8c291cmNlfC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV2ZW50
IHJlc3VsdGVkIGluIGZpcmluZyBhIHN5bnRoZXRpYyBldmVudC4KKyAgICB2aXJ0dWFsIGJvb2wg
cHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYsIEV2
ZW50SGFuZGxlciosIGJvb2wgaGFuZGxlZCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
c2Nyb2xsIHRoZSBzY3JlZW4uCisgICAgdm9pZCBzY3JvbGxWaWFUb3VjaE1vdGlvbihjb25zdCBQ
bGF0Zm9ybVRvdWNoUG9pbnQmKTsKKworICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUgcykgeyBtX3N0
YXRlID0gczsgfQorICAgIFN0YXRlIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgLy8gVXBkYXRlIGNvbXB1dGVkIGdlc3R1cmFsIHBhcmFtZXRlcnMgYmFzZWQg
b24gdGhlIGdpdmVuIGV2ZW50LgorICAgIHZvaWQgdXBkYXRlVmFsdWVzKGRvdWJsZSB0b3VjaFRp
bWUsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCAmKTsKKworICAgIC8vIE1ha2VzIGFuIGVkZ2Ug
aWRlbnRpZmllciBpbnRlZ2VyLgorICAgIHVuc2lnbmVkIGludCBoYXNoKFN0YXRlLCB1bnNpZ25l
ZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSwgYm9vbCk7CisKKyAgICAvLyBNYXAgb2YgZWRn
ZSBmdW5jdGlvbnMKKyAgICBXVEY6Okhhc2hNYXA8aW50LCBHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0
aW9uPiBtX2VkZ2VGdW5jdGlvbnM7CisKKyAgICAvLyBMb2NhdGlvbiBvZiBmaXJzdCB0b3VjaC4K
KyAgICBJbnRQb2ludCBtX2ZpcnN0VG91Y2hQb3NpdGlvbjsKKworICAgIC8vIFRpbWUgd2hlbiB0
aGUgdG91Y2ggd2VudCBkb3duLgorICAgIGRvdWJsZSBtX2ZpcnN0VG91Y2hUaW1lOworCisgICAg
Ly8gR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSBzdGF0ZS4KKyAgICBTdGF0ZSBtX3N0YXRlOwor
CisgICAgLy8gVGltZSBvZiBtb3N0IHJlY2VudCB0b3VjaCBldmVudC4KKyAgICBkb3VibGUgbV9s
YXN0VG91Y2hUaW1lOworCisgICAgLy8gVGhlIEV2ZW50SGFuZGxlciB0aGF0IGludm9rZWQgdGhl
IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0sIHZhbGlkIG9ubHkKKyAgICAvLyBwcm9jZXNzaW5n
IGEgc2luZ2xlIFBsYXRmb3JtVG91Y2hQb2ludC4KKyAgICBFdmVudEhhbmRsZXIqIG1fZXZlbnRI
YW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDU5ZWEw
NzYuLmNkZDAwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDUtMDkgIFJvYmVydCBLcm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVyIHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKwor
ICAgICAgICBBZGRlZCB1bml0IHRlc3RzIGZvciB0aGUgYmFzaWMgY2hyb21pdW0gcGxhdGZvcm0g
Z2VzdHVyZSByZWNvZ25pemVyLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICog
dGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6SW5zcGVjdGFi
bGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rh
YmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6dEhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpmaXJzdFRvdWNoUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVt
OjpzZXRGaXJzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OmZpcnN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6c2V0TGFzdFRvdWNoVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
Omxhc3RUb3VjaFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjplZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp0VXBkYXRlVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludDo6c2V0WCk6CisgICAgICAgIChX
ZWJDb3JlOjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OnNldFkpOgorICAgICAgICAoV2Vi
Q29yZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNo
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEdlc3R1cmVSZWNvZ25pemVyOjpUZXN0R2Vz
dHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEdlc3R1cmVSZWNvZ25pemVy
OjpTZXRVcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlRlYXJE
b3duKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisKIDIwMTEtMDUtMDkgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IEdlbnRp
bGNvcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCAwNTY3ZmFkLi43Yzg4Mzhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTUzLDYgKzUzLDcgQEAKICAgICAg
ICAgXSwKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICd0
ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0dlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNr
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzNlMDYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uaCIKKworI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgeworCitjbGFzcyBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gOiBwdWJs
aWMgV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgSW5z
cGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkgOiBXZWJDb3JlOjpHZXN0dXJlUmVj
b2duaXplckNocm9taXVtKCkgeyB9CisKKyAgICBpbnQgdEhhc2goU3RhdGUgZ2VzdHVyZVN0YXRl
LAorICAgICAgICAgICAgICB1bnNpZ25lZCBpZCwKKyAgICAgICAgICAgICAgUGxhdGZvcm1Ub3Vj
aFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUsCisgICAgICAgICAgICAgIGJvb2wgaGFuZGxlZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBoYXNoKGdlc3R1cmVTdGF0ZSwgaWQsIHRvdWNoVHlwZSwgaGFu
ZGxlZCk7CisgICAgfTsKKworICAgIEludFBvaW50IGZpcnN0VG91Y2hQb3NpdGlvbigpIHsgcmV0
dXJuIG1fZmlyc3RUb3VjaFBvc2l0aW9uOyB9OworCisgICAgdm9pZCBzZXRGaXJzdFRvdWNoVGlt
ZShkb3VibGUgdCkgeyBtX2ZpcnN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBkb3VibGUgZmlyc3RU
b3VjaFRpbWUoKSB7IHJldHVybiBtX2ZpcnN0VG91Y2hUaW1lOyB9OworCisgICAgdm9pZCBzZXRM
YXN0VG91Y2hUaW1lKGRvdWJsZSB0KSB7IG1fbGFzdFRvdWNoVGltZSA9IHQ7IH07CisgICAgZG91
YmxlIGxhc3RUb3VjaFRpbWUoKSB7IHJldHVybiBtX2xhc3RUb3VjaFRpbWU7IH07CisKKyAgICBH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGVkZ2VG
dW5jdGlvbihpbnQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2VGdW5jdGlvbnMu
Z2V0KGhhc2gpOworICAgIH07CisKKyAgICB2aXJ0dWFsIHZvaWQgdFVwZGF0ZVZhbHVlcyhkb3Vi
bGUgZCwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50ICZwKQorICAgIHsKKyAgICAgICAgdXBkYXRl
VmFsdWVzKGQsIHApOworICAgIH07Cit9OworCitjbGFzcyBCdWlsZGFibGVQbGF0Zm9ybVRvdWNo
UG9pbnQgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaFBvaW50IHsKK3B1YmxpYzoKKyAg
ICBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQoKTsKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRv
dWNoUG9pbnQoaW50IHgsIGludCB5KTsKKworICAgIHZvaWQgc2V0WChpbnQgeCkKKyAgICB7Cisg
ICAgICBtX3Bvcy5zZXRYKHgpOworICAgICAgbV9zY3JlZW5Qb3Muc2V0WCh4KTsKKyAgICB9Owor
CisgICAgdm9pZCBzZXRZKGludCB5KQorICAgIHsKKyAgICAgIG1fcG9zLnNldFkoeSk7CisgICAg
ICBtX3NjcmVlblBvcy5zZXRZKHkpOworICAgIH07Cit9OworCitCdWlsZGFibGVQbGF0Zm9ybVRv
dWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCgpCit7CisgICAgbV9pZCA9IDA7
CisgICAgbV9zdGF0ZSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAg
IG1fcG9zID0gSW50UG9pbnQoMCwgMCk7CisgICAgbV9zY3JlZW5Qb3MgPSBJbnRQb2ludCgwLCAw
KTsKK307CisKK0J1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludDo6QnVpbGRhYmxlUGxhdGZvcm1U
b3VjaFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICBtX2lkID0gMDsKKyAgICBtX3N0YXRlID0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk7CisgICAgbV9wb3MgPSBJbnRQb2lu
dCh4LCB5KTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50KHgsIHkpOworfTsKKworCitjbGFz
cyBUZXN0R2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6
CisgICAgVGVzdEdlc3R1cmVSZWNvZ25pemVyKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgU2V0VXAoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7IH0KK307
CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGhhc2gpCit7CisgICAgSW5zcGVjdGFi
bGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIHRlc3RHbTsKKyAgICBjb25zdCB1bnNpZ25lZCBG
aXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgU2Vjb25kRmluZ2VyID0gMTsKKwor
ICAgIEFTU0VSVF9FUSgxICsgMCwgdGVzdEdtLnRIYXNoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW06Ok5vR2VzdHVyZSwKKyAgICAgICAgRmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hSZWxlYXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9FUSgxICsgKDggfCAxKSwgdGVz
dEdtLnRIYXNoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Ok5vR2VzdHVyZSwKKyAgICAgICAg
Rmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCB0cnVlKSk7CisK
KyAgICBBU1NFUlRfRVEoMSArICgweDEwMDAwIHwgMiksIHRlc3RHbS50SGFzaChHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpQZW5kaW5nU3ludGhldGljQ2xpY2ssCisgICAgICAgIEZpcnN0Rmlu
Z2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQsIGZhbHNlKSk7CisKKyAgICBBU1NF
UlRfRVEoMSArIDB4MjAwMDAsIHRlc3RHbS50SGFzaChHZXN0dXJlUmVjb2duaXplckNocm9taXVt
OjpTY3JvbGwsCisgICAgICAgIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
UmVsZWFzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgweDIwMDAwIHwgMSksIHRl
c3RHbS50SGFzaChHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwsCisgICAgICAgIEZp
cnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgZmFsc2UpKTsKKwor
ICAgIEFTU0VSVF9FUSgxICsgKDB4MjAwMDAgfCAweDEwIHwgOCB8IDEpLAorICAgICAgICB0ZXN0
R20udEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLCBTZWNvbmRGaW5nZXIg
fCAweDEwMDAsCisgICAgICAgIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCB0cnVl
KSk7Cit9CisKKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgc3RhdGUpCit7CisgICAg
SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIHRlc3RHbTsKKworICAgIEFTU0VS
VF9FUSgwLCB0ZXN0R20uc3RhdGUoKSk7CisgICAgdGVzdEdtLnNldFN0YXRlKEdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAgQVNTRVJUX0VRKEdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljaywgdGVzdEdtLnN0
YXRlKCkpOworfQorCisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGlzSW5zaWRlTWFu
aGF0dGFuU3F1YXJlKQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bSBnbTsKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDsKKworICAgIEFTU0VSVF9F
USgwLjAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLngoKSk7CisgICAgQVNTRVJUX0VRKDAuMCwg
Z20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgpKTsKKworICAgIHAuc2V0WCgwLjApOworICAgIHAu
c2V0WSgxOS45OTkpOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJl
KHApKTsKKworICAgIHAuc2V0WCgxOS45OTkpOworICAgIHAuc2V0WSgwLjApOworICAgIEFTU0VS
VF9UUlVFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgyMC4w
KTsKKyAgICBwLnNldFkoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbnNpZGVNYW5oYXR0
YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAgcC5zZXRZKDIwLjApOworICAg
IEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNl
dFgoLTIwLjApOworICAgIHAuc2V0WSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lk
ZU1hbmhhdHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoLTIw
LjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7Cit9
CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGlzSW5DbGlja1RpbWVXaW5kb3cpCit7
CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdtOworCisgICAgZ20u
c2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91Y2hUaW1lKDAuMCk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisKKyAgICBnbS5zZXRG
aXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC4wMTAwMDEpOwor
ICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisKKyAgICBnbS5zZXRG
aXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC44IC0gLjAwMDAw
MDAxKTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luQ2xpY2tUaW1lV2luZG93KCkpOworCisgICAg
Z20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91Y2hUaW1lKDAuODAw
MDEpOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luQ2xpY2tUaW1lV2luZG93KCkpOworfQorCitU
RVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBhZGRFZGdlRnVuY3Rpb24pCit7CisgICAgSW5z
cGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdtOworICAgIGdtLmFkZEVkZ2VGdW5j
dGlvbihHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwsIDAsCisgICAgICAgIFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgdHJ1ZSwKKyAgICAgICAgKEdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pNDA5Nik7CisKKyAgICBB
U1NFUlRfRVEoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVUcmFuc2l0aW9uRnVu
Y3Rpb24pNDA5NiwKKyAgICAgICAgZ20uZWRnZUZ1bmN0aW9uKGdtLnRIYXNoKEdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OlNjcm9sbCwKKyAgICAgICAgIDAsIFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hSZWxlYXNlZCwgdHJ1ZSkpKTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXpl
ciwgdXBkYXRlVmFsdWVzKQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bSBnbTsKKworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmZpcnN0VG91Y2hUaW1lKCkpOworICAg
IEFTU0VSVF9FUSgwLjAsIGdtLmxhc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06Ok5vR2VzdHVyZSwgZ20uc3RhdGUoKSk7CisKKyAgICBCdWls
ZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDEoMTAsIDExKTsKKyAgICBnbS50VXBkYXRlVmFsdWVz
KDEuMSwgcDEpOworCisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS54
KCkpOworICAgIEFTU0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgpKTsKKyAg
ICBBU1NFUlRfRVEoMS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoMC4w
LCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgpKTsKKworICAgIEJ1aWxk
YWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMigxMywgMTQpOworICAgIGdtLnNldFN0YXRlKEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAgZ20udFVw
ZGF0ZVZhbHVlcygyLjAsIHAyKTsKKworICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBv
c2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigp
LnkoKSk7CisgICAgQVNTRVJUX0VRKDEuMSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNT
RVJUX0VRKDIuMCAtIDEuMSwgZ20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUo
KSk7CisKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDMoMjMsIDM0KTsKKyAgICBn
bS5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUpOworICAgIGdt
LnRVcGRhdGVWYWx1ZXMoMy4wLCBwMyk7CisKKyAgICBBU1NFUlRfRVEoMjMsIGdtLmZpcnN0VG91
Y2hQb3NpdGlvbigpLngoKSk7CisgICAgQVNTRVJUX0VRKDM0LCBnbS5maXJzdFRvdWNoUG9zaXRp
b24oKS55KCkpOworICAgIEFTU0VSVF9FUSgzLjAsIGdtLmZpcnN0VG91Y2hUaW1lKCkpOworICAg
IEFTU0VSVF9FUSgwLjAsIGdtLmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZpcnN0VG91Y2hUaW1lKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92966</attachid>
            <date>2011-05-10 09:23:24 -0700</date>
            <delta_ts>2011-05-10 09:26:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110510122221.patch</filename>
            <type>text/plain</type>
            <size>45169</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYwNzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzZjI3Mzk1MTFhZjc1N2M3NjA4NTE1
ZWZiZDU5YmVkMDg5NzU0NTkyLi4xNWI0YmEyMDhjMzFmYWYzYWQ4Y2NhMmY1N2Q1ZDkwOThlMzI5
NGIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDUtMDkgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBTaG93cyB0aGF0IHRoZSBiYXNpYyBD
aHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3RseSBjb252ZXJ0IGEgdG91Y2ggZXZl
bnQgc2VxdWVuY2UKKyAgICAgICAgaW50byBhIHNlcXVlbmNlIG9mIHN5bnRoZXRpYyBtb3VzZSBl
dmVudHMuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gt
Z2VzdHVyZS1jbGljay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2st
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAy
MDExLTA1LTA5ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y4
ZGViYWI5NGYxODkwYzhkN2JhOWY3MDU0ZTM2MjFmYjU4ZjQwYQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdl
c3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0dlc3R1
cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTlmOWJkYTlhNjczNmE2MDBjMjM2OGVjYjFmOTA0OGRiNGFiNTAzZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xp
Y2suaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitkaXYuaWQgPSAidG91Y2h0YXJnZXQiOwor
ZGl2LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2Rpdi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOwor
ZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJibHVlIjsKKwordmFyIGNsaWNrRXZlbnRzUmVj
ZWl2ZWQgPSAwOwordmFyIGV4cGVjdGVkTW91c2VFdmVudHMgPSAzOwordmFyIHRvdWNoRXZlbnRz
UmVjZWl2ZWQgPSAwOwordmFyIG1vdXNlRXZlbnRzUmVjZWl2ZWQgPSAwOwordmFyIGV2ZW50VHlw
ZXMgPSBbICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdjbGljaycgXTsKKworZnVuY3Rpb24gZ2Vz
dHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCBldmVudFR5cGVz
W21vdXNlRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFgn
LCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFknLCAnMTInKTsKKyAgICAg
ICAgbW91c2VFdmVudHNSZWNlaXZlZCsrOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKGV2
ZW50LnR5cGUpOworICAgICAgICBkZWJ1ZyhldmVudC5jbGllbnRYKTsKKyAgICAgICAgZGVidWco
ZXZlbnQuY2xpZW50WSk7CisgICAgfQorfQorCisvLyBCZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBh
IGdlc3R1cmUgcmVjb2duaXplciwgd2Ugc2VuZCBhIGtleSBwcmVzcworLy8gZXZlbnQgdG8gZW5k
IHRoZSB0ZXN0IHdpdGhvdXQgdGVtcG9yYWwgZmxha2luZXNzLgorZnVuY3Rpb24gcXVpdEtleVRv
RW5kVGVzdChldmVudCkgeworICAgIGVuZFRlc3QoKTsKK30KKworLy8gTG9nIHRoYXQgd2Ugc3Rp
bGwgZ290IHRoZSB0b3VjaCBldmVudHMuCitmdW5jdGlvbiB0b3VjaEV2ZW50Q2FsbGJhY2soZXZl
bnQpIHsKKyAgICAvLyBkZWJ1ZygnaGF2ZSByZWNlaXZlZDogJyArIGV2ZW50LnR5cGUpOworICAg
IHRvdWNoRXZlbnRzUmVjZWl2ZWQrKzsKKyAgICBkZWJ1ZygnaGF2ZSByZWNlaXZlZDogJyArIHRv
dWNoRXZlbnRzUmVjZWl2ZWQgKyAnIHRvdWNoIGV2ZW50cycpOworICAgIHJldHVybiB0cnVlOwor
fQorCitmdW5jdGlvbiBzaW5nbGVUb3VjaFNlcXVlbmNlKCkKK3sKKyAgICBldmVudFNlbmRlci5j
bGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMCwgMTIp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIEluc2VydCBzb21lIGRl
bGF5LiBOQjogdGhpcyB2YWx1ZSBkZXBlbmRzIG9uIG1pbkNsaWNrRG93blRpbWUsCisgICAgLy8g
bWF4Q2xpY2tEb3duVGltZSBmcm9tIEdlc3R1cmVNYW5hZ2VyLmNwcAorICAgIGV2ZW50U2VuZGVy
LmxlYXBGb3J3YXJkKDIwKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDAp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQor
eworCisgICAgaWYgKG1vdXNlRXZlbnRzUmVjZWl2ZWQgPCBleHBlY3RlZE1vdXNlRXZlbnRzKSB7
CisgICAgICAgIC8vIGRlYnVnKCdSZWNlaXZlZDogJyArIHRvdWNoRXZlbnRzUmVjZWl2ZWQgKyAn
IG1vdXNlIGV2ZW50cyAnKTsKKyAgICAgICAgZGVidWcoJ0dlc3R1cmUgbWFuYWdlciBub3QgaW1w
bGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4nKTsKKyAgICB9CisgICAgLy8gQmFpbC4KKyAgICBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBnZXN0dXJlRXZl
bnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGdl
c3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNldXAiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImtleWRvd24iLCBxdWl0S2V5VG9FbmRUZXN0LCBmYWxzZSk7CisgICAgZGl2
LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNl
KTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hFdmVudENhbGxi
YWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgdG91Y2hF
dmVudENhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShk
aXYsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9u
KCJUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24uIik7Cisg
ICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKSB7CisgICAgICAgICAgICBz
aW5nbGVUb3VjaFNlcXVlbmNlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5sZWFwRm9yd2Fy
ZCgxMCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCcgJyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAgVGFwIG9u
IHRoZSBibHVlIHJlY3QgdG8gbG9nLiIpCisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1n
ZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJiYjY2YTVl
MTA4MGE5YjBjYWJjZjEzYjlhZjQzNGFkMmQ4OGIxNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24g
ZnJvbSB0b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVu
dGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhiMTZj
MmJiN2NhNzZjYmU5MWI0NTQzZDg5OWIxYTNhZTU4MmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKQEAg
LTAsMCArMSwxNzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdo
dDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9
CisKKyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTog
c2Nyb2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisj
Z3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91
bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisjcmVkYm94
IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7
CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzog
MHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2Fk
PSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5n
Ym94Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4Ij4KKyAgICAgIDx0
cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRk
PjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4K
KyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgICA8dGQ+
PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGFibGU+
CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBt
b3ZpbmdkaXY7Cit2YXIgRVhQRUNURURfU0NST0xMU19UT1RBTCA9IDI7Cit2YXIgc2Nyb2xsc09j
Y3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc5MCcsICc5MCddOwordmFyIHNjcm9s
bEFtb3VudFkgPSBbJzAnLCAnOTUnXTsKKworZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZzZXQoKQor
eworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsK
KyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlKCdtb3Zpbmdk
aXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAg
Ly8gc2hvdWxkQmUoU3RyaW5nKG1vdmluZ2Rpdi5zY3JvbGxUb3ApLCBzY3JvbGxBbW91bnRZW3Nj
cm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNjcm9sbExlZnQn
LCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzY3JvbGxzT2NjdXJy
ZWQrKzsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IEVYUEVDVEVEX1NDUk9M
TFNfVE9UQUwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4K
KyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVs
bHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rp
b24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xs
VG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJu
IHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmly
c3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAg
ICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91
Y2hQb2ludCg5NSwgMTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8v
IFNjcm9sbCB0aGUgZGl2IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNo
UG9pbnQoMCwgNSwgMTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZl
bnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQo
KTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOwor
fQorCitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNl
Y29uZCBnZXN0dXJlIik7CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAg
IGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQoMTIsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3Vj
aFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50
U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIsIDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNo
TW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZl
bnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVj
a1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAg
IGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0g
b3IgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2
ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0
dXJlIGdlbmVyYXRpb24gZnJvbSB0b3VjaCBldmVudHMuICcgKworICAgICAgICAgICAgJ1NxdWFy
ZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVy
LmNsZWFyVG91Y2hQb2ludHMpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBU
b3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFk
ZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8
L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2st
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMv
dG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODlmOTZh
NjU4Y2ViZTQ1MzVmNzRjMTgzYjQ5MDJmMDM3YTMxNmRjOQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgdGVzdHMgYmFzaWMg
c2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2hhdmUgcmVjZWl2ZWQ6IDEgdG91Y2ggZXZlbnRzCitoYXZlIHJlY2VpdmVkOiAy
IHRvdWNoIGV2ZW50cworUEFTUyBldmVudC50eXBlIGlzICJtb3VzZWRvd24iCitQQVNTIGV2ZW50
LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC50eXBl
IGlzICJtb3VzZXVwIgorUEFTUyBldmVudC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNsaWVu
dFkgaXMgMTIKK1BBU1MgZXZlbnQudHlwZSBpcyAiY2xpY2siCitQQVNTIGV2ZW50LmNsaWVudFgg
aXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWY5OGJkYjBi
NWRlN2EyMjI5MTg2ZGZkZWM4NjA2YWYwZjU3ODQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgc2Nyb2xsIGdl
c3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJlIGlzIChtb3N0bHkpIGdy
ZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1
cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxM
ZWZ0IGlzIDkwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDk1
CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk4YmFjNmQ4YTcyYWVj
ZDc2YjYzYzQ3NWQ5MTlkMWY5M2JmYTA2MjIuLmNhNmRkNDdjNDE0ZTExOTBkMzIwZjYzZjg5NDJj
ZjU4YWNjY2ZkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMS0wNS0wOSAgUm9i
ZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBnZXN0
dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZHMgYSBi
YXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtLiBBZGRzIGFu
IGVudHJ5IHBvaW50IHRvIHRoZQorICAgICAgICBHZXN0dXJlUmVjb2duaXplciB0byByZXNldCBh
bnkgaW50ZXJuYWwgc3RhdGUgb24gYSBwYWdlIHJlc2V0LiBSZXNldHRpbmcgdGhlIGdlc3R1cmUK
KyAgICAgICAgZ2VzdHVyZSByZWNvZ25pemVyIG9uIHBhZ2UgbG9hZCBpcyBuZWNlc2FyeSBmb3Ig
cmVsaWFibGUgbGF5b3V0IHRlc3QgZXhlY3V0aW9uLgorCisgICAgICAgIEFkZGVkIGFuIGFkZGl0
aW9uYWwgY29uc3RydWN0b3IgdG8gcGVybWl0IGJ1aWxkaW5nIGEgc3ludGhldGljIFBsYXRmb3Jt
V2hlZWxFdmVudAorCisgICAgICAgIFNtYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFBsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIgYXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZQorICAgICAgICBz
aW1wbGUgQ2hyb21pdW0gcGxhdGZvcm0gZ2VzdHVyZSByZWNvZ25pemVyLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwKKyAgICAgICAg
ICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnJlc2V0R2VzdHVyZVJlY29nbml6ZXIpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgICogcGxh
dGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3Jt
V2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0
Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp+R2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjphZGRF
ZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bTo6aXNJbkNsaWNrVGltZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjppc0luc2lkZU1hbmhhdHRhblNxdWFyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cHJvY2Vzc1RvdWNoRXZlbnRG
b3JHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OnNjcm9sbFZpYVRvdWNoTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OnRvdWNoRG93bik6Cisg
ICAgICAgIChXZWJDb3JlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpjbGljayk6CisgICAg
ICAgIChXZWJDb3JlOjpjbGlja09yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OmluU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNl
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnN0
YXRlKToKKwogMjAxMS0wNS0wOSAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1bm4uY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZh
N2E4ZmI2ZGIwZDIyNGYzYWFiOTg5NTA1ZDkzZDUzZjJjNzhhMTUuLjVlYjk2MWY4ZGNhNjQyNGI0
ZmY5YTIyOWFjZDZjODk2YTFlOGM4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTc2MSw3ICs3NjEs
NiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vTm90SW1wbGVtZW50ZWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
UGxhdGZvcm1HZXN0dXJlRXZlbnQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9u
LmgnLApAQCAtMzc2NCw2ICszNzYzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9GcmFtZWxlc3NTY3JvbGxWaWV3LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9GcmFtZWxlc3NTY3JvbGxWaWV3Q2xpZW50LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0tleUNvZGVDb252ZXJzaW9uLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2Nocm9taXVtL0tleUNvZGVDb252ZXJzaW9uR3RrLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vS2V5Ym9hcmRDb2Rlcy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCBhNzEyYjdjNjgxNTBkOGU4MmY5ZDYwMjM2YmM4ZjU2ZjQ2YTE1MDRm
Li4zOTBkMGE0YzI4NTliZjE5YTk4YjkxMzhjYTgzY2NhNjc1MWU4NzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMTk5LDYgKzMxOTksMTYgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkK
IAogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOwogfQorCisjaWYgRU5BQkxFKEdFU1RVUkVf
UkVDT0dOSVpFUikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpyZXNldEdlc3R1cmVSZWNvZ25pemVyKCkK
K3sKKyAgICBpZiAobV9nZXN0dXJlUmVjb2duaXplcikKKyAgICAgICAgbV9nZXN0dXJlUmVjb2du
aXplci0+cmVzZXRTdGF0ZSgpOworfQorI2VuZGlmCisKKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDJiZWZhZjM1NTg0YzUwNTM0NmY0MjgyYWVjMDQ2NTJi
MjAzNjIxMmEuLjA2MWQyMTg2NDQyYmJiZTdjOWZhMWZlOGRlZWVlMjdiODBhZDQ2NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2NiwxMCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKKyAgICB2b2lkIHJlc2V0
R2VzdHVyZVJlY29nbml6ZXIoKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKaW5kZXggYmEwYzY4NzkwZmI5ZGQ0MDljNWViMTFiNDBkMWQ4ZTIzNDZmZjQx
ZS4uNmRmYWY5NTNhMDJjOTY1N2M1MzZmZTY5NTk2OTVmNTk4ZjIwMzNiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcApAQCAtMjMyLDYgKzIzMiwxMCBAQCB2b2lkIEZyYW1lVmlldzo6cmVz
ZXQoKQogICAgIG1faXNWaXN1YWxseU5vbkVtcHR5ID0gZmFsc2U7CiAgICAgbV9maXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRDYWxsYmFja1BlbmRpbmcgPSB0cnVlOwogICAgIG1fbWFpbnRhaW5T
Y3JvbGxQb3NpdGlvbkFuY2hvciA9IDA7CisKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVS
KQorICAgIGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5yZXNldEdlc3R1cmVSZWNvZ25pemVyKCk7
CisjZW5kaWYKIH0KIAogYm9vbCBGcmFtZVZpZXc6OmlzRnJhbWVWaWV3KCkgY29uc3QgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIu
Y3BwCmluZGV4IDllYmVhMTViYTA3ZjI0Mzk4ZDhiMjI1MTkyNmE3NDA1M2U4MjgwMzkuLmYxY2Ix
MzY4ZmY0OTFjMzZmNWI5NjYzZTA4MjNlNDlkN2QxYTc2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0zNiw2
ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6
OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIoKSB7IH0KIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6
ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkgeyB9CiAKKyNlcnJvcgogLy8gVG8gZ2V0
IGEgdXNlZnVsIEdlc3R1cmVSZWNvZ25pemVyLCBhIHNwZWNpZmljIHBsYXRmb3JtIHNob3VsZCBy
ZXR1cm4gc29tZXRoaW5nCiAvLyBoZXJlIHRoYXQgbWVldHMgaXRzIG5lZWRzLiBFdmVudEhhbmRs
ZXIgd2lsbCBpZ25vcmUgbnVsbCBHZXN0dXJlUmVjb2duaXplcnMuCiBQYXNzT3duUHRyPFBsYXRm
b3JtR2VzdHVyZVJlY29nbml6ZXI+IFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNv
Z25pemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25p
emVyLmgKaW5kZXggODAyNTgzZjJhMDU1M2JiN2NhNzNjNzg1ZWRmNWFmOGFjMDFiMGE1MC4uYmVi
MDg4MGEwOTVmN2I0MjIzYzZjN2JkNTcwNTI4NTJhOTFhMTc5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtNTcsNiAr
NTcsMTAgQEAgcHVibGljOgogICAgIC8vIHNwZWNpZmllcyBpZiB0aGUgfGV2ZW50fCB3YXMgYWN0
dWFsbHkgaGFuZGxlZCBieSB8c291cmNlfCAoYnkgdGhlIEphdmFTY3JpcHQpCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBldmVudCByZXN1bHRlZCBpbiBmaXJpbmcgYSBzeW50aGV0aWMgZXZl
bnQuCiAgICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmLCBFdmVudEhhbmRsZXIqLCBib29sIGhhbmRsZWQpID0gMDsKKwor
ICAgIC8vIENsZWFycyB0aGUgR2VzdHVyZVJlY29nbml6ZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUu
IEl0J3MgbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBiZWZvcmUgZWFjaAorICAgIC8vIGxheW91dCB0
ZXN0IHRvIHJlZHVjZSBmbGFraW5lc3MuCisgICAgdmlydHVhbCB2b2lkIHJlc2V0U3RhdGUoKSA9
IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDM3NjU1NTMzYmQ0OGUzMWY1NTFjZWQyZDMz
MDQ0YTliZTg4N2UwMGMuLjc2ZmFiN2FmOTMyMTg3NTE4Yjg4MGIwN2M1Nzc5MTZkZDcyMWU1MGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC0x
MDYsNiArMTA2LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICB9
CiAKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEludFBvaW50IHBvc2l0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBkZWx0YVgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBkZWx0YVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aGVlbFRp
Y2tzWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdoZWVsVGlja3NZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQWNjZXB0ZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjdHJsS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbHRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXkpCisgICAg
ICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9z
aXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKKyAg
ICAgICAgICAgICwgbV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NY
KHdoZWVsVGlja3NYKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NZKHdoZWVsVGlja3NZKQor
ICAgICAgICAgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICAgICAgICAgLCBt
X2lzQWNjZXB0ZWQoaXNBY2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtl
eSkKKyAgICAgICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0
S2V5KGFsdEtleSkKKyAgICAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisgICAgICAgIHsK
KyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9IC8vIFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgICBj
b25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlv
bjsgfSAvLyBTY3JlZW4gY29vcmRpbmF0ZXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWU4YWZiMDBhOGViMmEzMjNjNTdmNmVmMTJjYTJlYjIyN2I1Yzc1ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJF
dmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Ym9vbCBjbGljayhHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50Jik7CitzdGF0aWMgYm9vbCBjbGlja09yU2Nyb2xsKEdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIGluU2Nyb2xs
KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsK
K3N0YXRpYyBib29sIHJlc2V0KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0
Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIHRvdWNoRG93bihHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtl
IHRoZXNlIGNvbmZpZ3VyYWJsZSBwcm9ncmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBtYXhpbXVtVG91Y2hEb3duRHVyYXRpb25Gb3JDbGljayA9IDAuODsKK3N0YXRpYyBjb25zdCBk
b3VibGUgbWluaW11bVRvdWNoRG93bkR1cmF0aW9uRm9yQ2xpY2sgPSAwLjAxOworc3RhdGljIGNv
bnN0IGludCBtYXhpbXVtVG91Y2hNb3ZlRm9yQ2xpY2sgPSAyMDsKKworR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpCisgICAgOiBtX2ZpcnN0VG91
Y2hUaW1lKDAuMCkKKyAgICAsIG1fc3RhdGUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9H
ZXN0dXJlKQorICAgICwgbV9sYXN0VG91Y2hUaW1lKDAuMCkKKyAgICAsIG1fZXZlbnRIYW5kbGVy
KDApCit7Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVzZXRTdGF0ZSgp
Cit7CisgICAgbV9maXJzdFRvdWNoVGltZSA9IDAuMDsKKyAgICBtX3N0YXRlID0gR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlOworICAgIG1fbGFzdFRvdWNoVGltZSA9IDAuMDsK
KyAgICBtX2V2ZW50SGFuZGxlciA9IDA7Cit9CisKK0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
On5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKK3sKK30KKwordm9pZCBHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjphZGRFZGdlRnVuY3Rpb24oU3RhdGUgc3RhdGUsIHVuc2lnbmVkIGZpbmdl
ciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUsIGJvb2wgaGFuZGxlZCwgR2Vz
dHVyZVRyYW5zaXRpb25GdW5jdGlvbiBmKQoreworICAgIG1fZWRnZUZ1bmN0aW9ucy5hZGQoaGFz
aChzdGF0ZSwgZmluZ2VyLCB0b3VjaFR5cGUsIGhhbmRsZWQpLCBmKTsKK30KKworYm9vbCBHZXN0
dXJlUmVjb2duaXplckNocm9taXVtOjppc0luQ2xpY2tUaW1lV2luZG93KCkKK3sKKyAgICBkb3Vi
bGUgZHVyYXRpb24obV9sYXN0VG91Y2hUaW1lIC0gbV9maXJzdFRvdWNoVGltZSk7CisgICAgcmV0
dXJuIGR1cmF0aW9uID49IG1pbmltdW1Ub3VjaERvd25EdXJhdGlvbkZvckNsaWNrICYmIGR1cmF0
aW9uIDwgbWF4aW11bVRvdWNoRG93bkR1cmF0aW9uRm9yQ2xpY2s7Cit9CisKK2Jvb2wgR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bTo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUoY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpbnQgbWFuaGF0dGFuRGlzdGFuY2UgPSBhYnMo
cG9pbnQucG9zKCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKSArCisgICAgICAgIGFi
cyhwb2ludC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworICAgIHJldHVy
biBtYW5oYXR0YW5EaXN0YW5jZSA8IG1heGltdW1Ub3VjaE1vdmVGb3JDbGljazsKK30KKwordm9p
ZCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0
IFBsYXRmb3JtVG91Y2hQb2ludCYgcG9pbnQpCit7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZh
a2VNb3VzZURvd24ocG9pbnQucG9zKCksIHBvaW50LnNjcmVlblBvcygpLCBMZWZ0QnV0dG9uLCBN
b3VzZUV2ZW50UHJlc3NlZCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG1fbGFzdFRv
dWNoVGltZSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKHBvaW50LnBvcygp
LCBwb2ludC5zY3JlZW5Qb3MoKSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFJlbGVhc2VkLCAxLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgbV9sYXN0VG91Y2hUaW1lKTsKKworICAgIG1fZXZl
bnRIYW5kbGVyLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CisgICAgbV9l
dmVudEhhbmRsZXItPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKK30KKwor
dm9pZCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjppbml0KCkKK3sKKyAgICBjb25zdCB1bnNp
Z25lZCBGaXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0
ZSBSZWxlYXNlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDsKKyAgICBjb25z
dCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlRvdWNoUHJlc3NlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIE1vdmVk
ID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAgIGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludDo6U3RhdGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0
aW9uYXJ5OworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgQ2FuY2VsbGVkID0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKworICAgIGFkZEVkZ2VGdW5jdGlv
bihOb0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxzZSwgdG91Y2hEb3duKTsKKyAg
ICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgQ2Fu
Y2VsbGVkLCBmYWxzZSwgcmVzZXQpOworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhl
dGljQ2xpY2ssIEZpcnN0RmluZ2VyLCBSZWxlYXNlZCwgZmFsc2UsIGNsaWNrKTsKKyAgICBhZGRF
ZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZh
bHNlLCBjbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRp
Y0NsaWNrLCBGaXJzdEZpbmdlciwgU3RhdGlvbmFyeSwgZmFsc2UsIGNsaWNrT3JTY3JvbGwpOwor
ICAgIGFkZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBNb3ZlZCwgZmFsc2UsIGlu
U2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgUmVsZWFz
ZWQsIGZhbHNlLCByZXNldCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5n
ZXIsIENhbmNlbGxlZCwgZmFsc2UsIHJlc2V0KTsKK30KKworYm9vbCBHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JiBldmVudCwgRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxlZCkK
K3sKKyAgICBtX2V2ZW50SGFuZGxlciA9IGV2ZW50SGFuZGxlcjsKKyAgICBjb25zdCBWZWN0b3I8
UGxhdGZvcm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91Y2hQb2ludHMoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNv
bnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcCA9IHBvaW50c1tpXTsKKyAgICAgICAgdXBkYXRlVmFs
dWVzKGV2ZW50LnRpbWVzdGFtcCgpLCBwKTsKKworICAgICAgICBpZiAoR2VzdHVyZVRyYW5zaXRp
b25GdW5jdGlvbiBlZiA9IG1fZWRnZUZ1bmN0aW9ucy5nZXQoaGFzaChtX3N0YXRlLCBwLmlkKCks
IHAuc3RhdGUoKSwgaGFuZGxlZCkpKQorICAgICAgICAgICAgaGFuZGxlZCA9ICgqZWYpKHRoaXMs
IHApOworICAgICAgICAvLyBUaGUgZ3JhcGggaXMgc3BhcnNlOiBub3QgYWxsIGVkZ2VzIGhhdmUg
ZnVuY3Rpb25zLgorICAgIH0KKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwordm9pZCBHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpzY3JvbGxWaWFUb3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQmIHRvdWNoUG9pbnQpCit7CisgICAgZmxvYXQgZGVsdGFYKHRvdWNoUG9pbnQucG9z
KCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKTsKKyAgICBmbG9hdCBkZWx0YVkodG91
Y2hQb2ludC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworCisgICAgLy8g
RklYTUU6IENvbnZlcnQgdG8gZ2VzdHVyZSBldmVudHMgd2hlbiB0aGV5IGhhbmRsZSBzdWJmcmFt
ZXMuCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQodG91Y2hQb2lu
dC5wb3MoKSwgdG91Y2hQb2ludC5zY3JlZW5Qb3MoKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWCAv
IHN0YXRpY19jYXN0PGZsb2F0PigxMjApLCBkZWx0YVkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIw
KSwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSk7CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hl
ZWxFdmVudCk7CisgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOwor
fQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyhjb25zdCBk
b3VibGUgdG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHRvdWNoUG9pbnQpCit7
CisgICAgaWYgKHN0YXRlKCkgPT0gTm9HZXN0dXJlKSB7CisgICAgICAgIG1fZmlyc3RUb3VjaFRp
bWUgPSB0b3VjaFRpbWU7CisgICAgICAgIG1fbGFzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsKKyAg
ICAgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworICAgIH0gZWxz
ZQorICAgICAgICBtX2xhc3RUb3VjaFRpbWUgPSB0b3VjaFRpbWU7Cit9CisKKy8vIEJ1aWxkcyBh
IGhhc2guIEhhc2hlcyBhcmUgYXNzZW1ibGVkIGJ5IGpvaW5pbmcgdG9nZXRoZXIgbXVsdGlwbGUg
Yml0cy4KKy8vIDMgTFNCIGJpdHMgZm9yIHRoZSB8dG91Y2hUeXBlfC4KKy8vIDEgYml0IGZvciB8
aGFuZGxlZHwKKy8vIDEyIGJpdHMgZm9yIHxpZHwKKy8vIDE2IGJpdHMgZm9yIHRoZSB8Z2VzdHVy
ZVN0YXRlfC4KK3Vuc2lnbmVkIGludCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpoYXNoKFN0
YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWduZWQgaWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUg
dG91Y2hUeXBlLCBib29sIGhhbmRsZWQpCit7CisgICAgcmV0dXJuIDEgKyAoKHRvdWNoVHlwZSAm
IDcpIHwgKGhhbmRsZWQgPyAxIDw8IDMgOiAwKSB8ICgoaWQgJiAweGZmZikgPDwgNCApIHwgKGdl
c3R1cmVTdGF0ZSA8PCAxNikpOworfQorCitzdGF0aWMgYm9vbCB0b3VjaERvd24oR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQ
b2ludCYpCit7CisgICAgZ2VzdHVyZVJlY29nbml6ZXItPnNldFN0YXRlKEdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIHJlc2V0KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qIGdlc3R1cmVSZWNvZ25p
emVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAgIGdlc3R1cmVSZWNvZ25pemVy
LT5yZXNldFN0YXRlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjbGlj
ayhHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlz
SW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0
YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUpOworICAgICAgICBnZXN0dXJlUmVj
b2duaXplci0+ZGlzcGF0Y2hTeW50aGV0aWNDbGljayhwb2ludCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gcmVzZXQoZ2VzdHVyZVJlY29nbml6ZXIsIHBvaW50KTsK
K30KKworc3RhdGljIGJvb2wgY2xpY2tPclNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVt
KiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sK
KyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0
dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQ
ZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkICYm
ICFnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7Cisg
ICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zY3JvbGxWaWFUb3VjaE1vdGlvbihwb2ludCk7Cisg
ICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpTY3JvbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgYm9vbCBpblNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVt
KiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sK
KyAgICBnZXN0dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocG9pbnQpOworICAg
IHJldHVybiB0cnVlOworfQorCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI+
IFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgpCit7CisgICAgR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXI7CisgICAgZ2VzdHVyZVJlY29nbml6ZXIg
PSBuZXcgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIGdlc3R1cmVSZWNvZ25pemVy
LT5pbml0KCk7CisgICAgcmV0dXJuIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlUmVjb2duaXpl
cj4oZ2VzdHVyZVJlY29nbml6ZXIpOworfQorCitQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpQ
bGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KK1BsYXRmb3JtR2VzdHVyZVJlY29nbml6
ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkOTJhYzZhZDdlODYx
Zjc0ZGE3Y2FjM2U0NTRhNmE2MzQ3ZWQzODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1faAorI2RlZmluZSBH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZVJl
Y29nbml6ZXIuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgorI2luY2x1ZGUg
IlRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW07CisKK2NsYXNzIEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW0gOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciAg
eworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgTm9HZXN0dXJlLAorICAgICAgUGVu
ZGluZ1N5bnRoZXRpY0NsaWNrLAorICAgICAgU2Nyb2xsCisgICAgfTsKKworICAgIHR5cGVkZWYg
Ym9vbCAoKkdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKworICAgIEdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW0oKTsKKyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisK
KyAgICB2b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlN0YXRlLCBib29sIGhhbmRsZWQsIEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rp
b24pOworICAgIHZvaWQgZGlzcGF0Y2hTeW50aGV0aWNDbGljayhjb25zdCBQbGF0Zm9ybVRvdWNo
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgdm9pZCByZXNl
dFN0YXRlKCk7CisgICAgYm9vbCBpc0luQ2xpY2tUaW1lV2luZG93KCk7CisgICAgYm9vbCBpc0lu
c2lkZU1hbmhhdHRhblNxdWFyZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYsIEV2ZW50SGFuZGxlciosIGJvb2wgaGFuZGxlZCk7CisgICAgdm9pZCBzY3JvbGxWaWFU
b3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIHNldFN0YXRl
KFN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KKyAgICBTdGF0ZSBzdGF0ZSgpIHsgcmV0dXJuIG1f
c3RhdGU7IH0KK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVZhbHVlcyhkb3VibGUgdG91Y2hU
aW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQgJik7CisgICAgdW5zaWduZWQgaW50IGhhc2go
U3RhdGUsIHVuc2lnbmVkLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlLCBib29sKTsKKyAgICBX
VEY6Okhhc2hNYXA8aW50LCBHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uPiBtX2VkZ2VGdW5jdGlv
bnM7CisgICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9zaXRpb247CisgICAgZG91YmxlIG1fZmly
c3RUb3VjaFRpbWU7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBkb3VibGUgbV9sYXN0VG91Y2hU
aW1lOworICAgIEV2ZW50SGFuZGxlciogbV9ldmVudEhhbmRsZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTllYTA3NjEyMDJjYWQ3OWY2MTRiZGUyMDk3ZDRh
MzQzZDhhN2M4MC4uY2RkMDBlZjdjNzc2ODI4MWU2NDQ1NjQ3NWNhZjlhNjZlYTcyOTBlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNS0wOSAgUm9i
ZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBnZXN0
dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZGVkIHVu
aXQgdGVzdHMgZm9yIHRoZSBiYXNpYyBjaHJvbWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJlY29nbml6
ZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9HZXN0dXJlUmVj
b2duaXplckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjp0SGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OmZpcnN0VG91Y2hQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNldEZpcnN0VG91Y2hU
aW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6Zmlyc3RUb3VjaFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0
dXJlUmVjb2duaXplckNocm9taXVtOjpzZXRMYXN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6bGFzdFRvdWNoVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OmVkZ2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OnRVcGRhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnVpbGRh
YmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1aWxkYWJs
ZVBsYXRmb3JtVG91Y2hQb2ludDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpCdWlsZGFibGVQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlRlc3RHZXN0dXJlUmVjb2duaXplcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlNldFVwKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6VGVhckRvd24pOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMS0wNS0wOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgR2VudGlsY29yZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCmluZGV4IDA1NjdmYWQ0YjRjY2I0MTZhN2JmNDRkOGJiMWNmMDE1
YjM4MDIwNWMuLjdjODgzOGQ0ZTAwOTJhN2YwYzU3OGE4ZDIzMjJkOTEyOTE2ZWYxN2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICBdLAog
ICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0Fy
ZW5hVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HZXN0dXJlUmVjb2duaXplckNocm9taXVtVGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGQ3M2UwNjg2Nzc0OWJmYTM2NDYxYmQyZGRlNTY1ZGUwMTA4ZDNk
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSB7CisKK2NsYXNzIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSA6IHB1
YmxpYyBXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBJ
bnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKSA6IFdlYkNvcmU6Okdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW0oKSB7IH0KKworICAgIGludCB0SGFzaChTdGF0ZSBnZXN0dXJlU3Rh
dGUsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGlkLAorICAgICAgICAgICAgICBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwKKyAgICAgICAgICAgICAgYm9vbCBoYW5kbGVkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2goZ2VzdHVyZVN0YXRlLCBpZCwgdG91Y2hUeXBlLCBo
YW5kbGVkKTsKKyAgICB9OworCisgICAgSW50UG9pbnQgZmlyc3RUb3VjaFBvc2l0aW9uKCkgeyBy
ZXR1cm4gbV9maXJzdFRvdWNoUG9zaXRpb247IH07CisKKyAgICB2b2lkIHNldEZpcnN0VG91Y2hU
aW1lKGRvdWJsZSB0KSB7IG1fZmlyc3RUb3VjaFRpbWUgPSB0OyB9OworICAgIGRvdWJsZSBmaXJz
dFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFRpbWU7IH07CisKKyAgICB2b2lkIHNl
dExhc3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBk
b3VibGUgbGFzdFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fbGFzdFRvdWNoVGltZTsgfTsKKworICAg
IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZWRn
ZUZ1bmN0aW9uKGludCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZUZ1bmN0aW9u
cy5nZXQoaGFzaCk7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCB0VXBkYXRlVmFsdWVzKGRv
dWJsZSBkLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQgJnApCisgICAgeworICAgICAgICB1cGRh
dGVWYWx1ZXMoZCwgcCk7CisgICAgfTsKK307CisKK2NsYXNzIEJ1aWxkYWJsZVBsYXRmb3JtVG91
Y2hQb2ludCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoUG9pbnQgeworcHVibGljOgor
ICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCgpOworICAgIEJ1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludChpbnQgeCwgaW50IHkpOworCisgICAgdm9pZCBzZXRYKGludCB4KQorICAgIHsK
KyAgICAgIG1fcG9zLnNldFgoeCk7CisgICAgICBtX3NjcmVlblBvcy5zZXRYKHgpOworICAgIH07
CisKKyAgICB2b2lkIHNldFkoaW50IHkpCisgICAgeworICAgICAgbV9wb3Muc2V0WSh5KTsKKyAg
ICAgIG1fc2NyZWVuUG9zLnNldFkoeSk7CisgICAgfTsKK307CisKK0J1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludDo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KCkKK3sKKyAgICBtX2lkID0g
MDsKKyAgICBtX3N0YXRlID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk7Cisg
ICAgbV9wb3MgPSBJbnRQb2ludCgwLCAwKTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50KDAs
IDApOworfTsKKworQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFibGVQbGF0Zm9y
bVRvdWNoUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG1faWQgPSAwOworICAgIG1fc3RhdGUg
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKKyAgICBtX3BvcyA9IEludFBv
aW50KHgsIHkpOworICAgIG1fc2NyZWVuUG9zID0gSW50UG9pbnQoeCwgeSk7Cit9OworCisKK2Ns
YXNzIFRlc3RHZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1Ymxp
YzoKKyAgICBUZXN0R2VzdHVyZVJlY29nbml6ZXIoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBTZXRVcCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIHsgfQor
fTsKKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaGFzaCkKK3sKKyAgICBJbnNwZWN0
YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gdGVzdEdtOworICAgIGNvbnN0IHVuc2lnbmVk
IEZpcnN0RmluZ2VyID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBTZWNvbmRGaW5nZXIgPSAxOwor
CisgICAgQVNTRVJUX0VRKDEgKyAwLCB0ZXN0R20udEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6Tm9HZXN0dXJlLAorICAgICAgICBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFJlbGVhc2VkLCBmYWxzZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoOCB8IDEpLCB0
ZXN0R20udEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlLAorICAgICAg
ICBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsK
KworICAgIEFTU0VSVF9FUSgxICsgKDB4MTAwMDAgfCAyKSwgdGVzdEdtLnRIYXNoKEdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljaywKKyAgICAgICAgRmlyc3RG
aW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCwgZmFsc2UpKTsKKworICAgIEFT
U0VSVF9FUSgxICsgMHgyMDAwMCwgdGVzdEdtLnRIYXNoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW06OlNjcm9sbCwKKyAgICAgICAgRmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91
Y2hSZWxlYXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9FUSgxICsgKDB4MjAwMDAgfCAxKSwg
dGVzdEdtLnRIYXNoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNjcm9sbCwKKyAgICAgICAg
Rmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCBmYWxzZSkpOwor
CisgICAgQVNTRVJUX0VRKDEgKyAoMHgyMDAwMCB8IDB4MTAgfCA4IHwgMSksCisgICAgICAgIHRl
c3RHbS50SGFzaChHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwsIFNlY29uZEZpbmdl
ciB8IDB4MTAwMCwKKyAgICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIHRy
dWUpKTsKK30KKworCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBzdGF0ZSkKK3sKKyAg
ICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gdGVzdEdtOworCisgICAgQVNT
RVJUX0VRKDAsIHRlc3RHbS5zdGF0ZSgpKTsKKyAgICB0ZXN0R20uc2V0U3RhdGUoR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICBBU1NFUlRfRVEo
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrLCB0ZXN0R20u
c3RhdGUoKSk7Cit9CisKKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbnNpZGVN
YW5oYXR0YW5TcXVhcmUpCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtIGdtOworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwOworCisgICAgQVNTRVJU
X0VRKDAuMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMC4w
LCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS55KCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAg
cC5zZXRZKDE5Ljk5OSk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVh
cmUocCkpOworCisgICAgcC5zZXRYKDE5Ljk5OSk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNT
RVJUX1RSVUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDIw
LjApOworICAgIHAuc2V0WSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhh
dHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoMjAuMCk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAu
c2V0WCgtMjAuMCk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5z
aWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgwLjApOworICAgIHAuc2V0WSgt
MjAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsK
K30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbkNsaWNrVGltZVdpbmRvdykK
K3sKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisKKyAgICBn
bS5zZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC4wKTsK
KyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNl
dEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjAxMDAwMSk7
CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNl
dEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjggLSAuMDAw
MDAwMDEpOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisKKyAg
ICBnbS5zZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC44
MDAwMSk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7Cit9CisK
K1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGFkZEVkZ2VGdW5jdGlvbikKK3sKKyAgICBJ
bnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisgICAgZ20uYWRkRWRnZUZ1
bmN0aW9uKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNjcm9sbCwgMCwKKyAgICAgICAgUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCB0cnVlLAorICAgICAgICAoR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik0MDk2KTsKKworICAg
IEFTU0VSVF9FUSgoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6R2VzdHVyZVRyYW5zaXRpb25G
dW5jdGlvbik0MDk2LAorICAgICAgICBnbS5lZGdlRnVuY3Rpb24oZ20udEhhc2goR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLAorICAgICAgICAgMCwgUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFJlbGVhc2VkLCB0cnVlKSkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25p
emVyLCB1cGRhdGVWYWx1ZXMpCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtIGdtOworCisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7Cisg
ICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlLCBnbS5zdGF0ZSgpKTsKKworICAgIEJ1
aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMSgxMCwgMTEpOworICAgIGdtLnRVcGRhdGVWYWx1
ZXMoMS4xLCBwMSk7CisKKyAgICBBU1NFUlRfRVEoMTAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigp
LngoKSk7CisgICAgQVNTRVJUX0VRKDExLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS55KCkpOwor
ICAgIEFTU0VSVF9FUSgxLjEsIGdtLmZpcnN0VG91Y2hUaW1lKCkpOworICAgIEFTU0VSVF9FUSgw
LjAsIGdtLmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZpcnN0VG91Y2hUaW1lKCkpOworCisgICAgQnVp
bGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHAyKDEzLCAxNCk7CisgICAgZ20uc2V0U3RhdGUoR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICBnbS50
VXBkYXRlVmFsdWVzKDIuMCwgcDIpOworCisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRvdWNo
UG9zaXRpb24oKS54KCkpOworICAgIEFTU0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0aW9u
KCkueSgpKTsKKyAgICBBU1NFUlRfRVEoMS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBB
U1NFUlRfRVEoMi4wIC0gMS4xLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGlt
ZSgpKTsKKworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMygyMywgMzQpOworICAg
IGdtLnNldFN0YXRlKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Ok5vR2VzdHVyZSk7CisgICAg
Z20udFVwZGF0ZVZhbHVlcygzLjAsIHAzKTsKKworICAgIEFTU0VSVF9FUSgyMywgZ20uZmlyc3RU
b3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMzQsIGdtLmZpcnN0VG91Y2hQb3Np
dGlvbigpLnkoKSk7CisgICAgQVNTRVJUX0VRKDMuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7Cisg
ICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92971</attachid>
            <date>2011-05-10 09:58:39 -0700</date>
            <delta_ts>2011-05-26 10:08:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110510125735.patch</filename>
            <type>text/plain</type>
            <size>44422</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYwNzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzZjI3Mzk1MTFhZjc1N2M3NjA4NTE1
ZWZiZDU5YmVkMDg5NzU0NTkyLi4xNWI0YmEyMDhjMzFmYWYzYWQ4Y2NhMmY1N2Q1ZDkwOThlMzI5
NGIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDUtMDkgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBTaG93cyB0aGF0IHRoZSBiYXNpYyBD
aHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3RseSBjb252ZXJ0IGEgdG91Y2ggZXZl
bnQgc2VxdWVuY2UKKyAgICAgICAgaW50byBhIHNlcXVlbmNlIG9mIHN5bnRoZXRpYyBtb3VzZSBl
dmVudHMuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gt
Z2VzdHVyZS1jbGljay5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2st
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAy
MDExLTA1LTA5ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y4
ZGViYWI5NGYxODkwYzhkN2JhOWY3MDU0ZTM2MjFmYjU4ZjQwYQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdl
c3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0dlc3R1
cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTlmOWJkYTlhNjczNmE2MDBjMjM2OGVjYjFmOTA0OGRiNGFiNTAzZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xp
Y2suaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitkaXYuaWQgPSAidG91Y2h0YXJnZXQiOwor
ZGl2LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2Rpdi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOwor
ZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJibHVlIjsKKwordmFyIGNsaWNrRXZlbnRzUmVj
ZWl2ZWQgPSAwOwordmFyIGV4cGVjdGVkTW91c2VFdmVudHMgPSAzOwordmFyIHRvdWNoRXZlbnRz
UmVjZWl2ZWQgPSAwOwordmFyIG1vdXNlRXZlbnRzUmVjZWl2ZWQgPSAwOwordmFyIGV2ZW50VHlw
ZXMgPSBbICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdjbGljaycgXTsKKworZnVuY3Rpb24gZ2Vz
dHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCBldmVudFR5cGVz
W21vdXNlRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFgn
LCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFknLCAnMTInKTsKKyAgICAg
ICAgbW91c2VFdmVudHNSZWNlaXZlZCsrOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKGV2
ZW50LnR5cGUpOworICAgICAgICBkZWJ1ZyhldmVudC5jbGllbnRYKTsKKyAgICAgICAgZGVidWco
ZXZlbnQuY2xpZW50WSk7CisgICAgfQorfQorCisvLyBCZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBh
IGdlc3R1cmUgcmVjb2duaXplciwgd2Ugc2VuZCBhIGtleSBwcmVzcworLy8gZXZlbnQgdG8gZW5k
IHRoZSB0ZXN0IHdpdGhvdXQgdGVtcG9yYWwgZmxha2luZXNzLgorZnVuY3Rpb24gcXVpdEtleVRv
RW5kVGVzdChldmVudCkgeworICAgIGVuZFRlc3QoKTsKK30KKworLy8gTG9nIHRoYXQgd2Ugc3Rp
bGwgZ290IHRoZSB0b3VjaCBldmVudHMuCitmdW5jdGlvbiB0b3VjaEV2ZW50Q2FsbGJhY2soZXZl
bnQpIHsKKyAgICAvLyBkZWJ1ZygnaGF2ZSByZWNlaXZlZDogJyArIGV2ZW50LnR5cGUpOworICAg
IHRvdWNoRXZlbnRzUmVjZWl2ZWQrKzsKKyAgICBkZWJ1ZygnaGF2ZSByZWNlaXZlZDogJyArIHRv
dWNoRXZlbnRzUmVjZWl2ZWQgKyAnIHRvdWNoIGV2ZW50cycpOworICAgIHJldHVybiB0cnVlOwor
fQorCitmdW5jdGlvbiBzaW5nbGVUb3VjaFNlcXVlbmNlKCkKK3sKKyAgICBldmVudFNlbmRlci5j
bGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMCwgMTIp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIEluc2VydCBzb21lIGRl
bGF5LiBOQjogdGhpcyB2YWx1ZSBkZXBlbmRzIG9uIG1pbkNsaWNrRG93blRpbWUsCisgICAgLy8g
bWF4Q2xpY2tEb3duVGltZSBmcm9tIEdlc3R1cmVNYW5hZ2VyLmNwcAorICAgIGV2ZW50U2VuZGVy
LmxlYXBGb3J3YXJkKDIwKTsKKworICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDAp
OworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQor
eworCisgICAgaWYgKG1vdXNlRXZlbnRzUmVjZWl2ZWQgPCBleHBlY3RlZE1vdXNlRXZlbnRzKSB7
CisgICAgICAgIC8vIGRlYnVnKCdSZWNlaXZlZDogJyArIHRvdWNoRXZlbnRzUmVjZWl2ZWQgKyAn
IG1vdXNlIGV2ZW50cyAnKTsKKyAgICAgICAgZGVidWcoJ0dlc3R1cmUgbWFuYWdlciBub3QgaW1w
bGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4nKTsKKyAgICB9CisgICAgLy8gQmFpbC4KKyAgICBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBnZXN0dXJlRXZl
bnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGdl
c3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNldXAiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImtleWRvd24iLCBxdWl0S2V5VG9FbmRUZXN0LCBmYWxzZSk7CisgICAgZGl2
LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNl
KTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hFdmVudENhbGxi
YWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIiwgdG91Y2hF
dmVudENhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShk
aXYsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9u
KCJUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24uIik7Cisg
ICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKSB7CisgICAgICAgICAgICBz
aW5nbGVUb3VjaFNlcXVlbmNlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5sZWFwRm9yd2Fy
ZCgxMCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCcgJyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAgVGFwIG9u
IHRoZSBibHVlIHJlY3QgdG8gbG9nLiIpCisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1n
ZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJiYjY2YTVl
MTA4MGE5YjBjYWJjZjEzYjlhZjQzNGFkMmQ4OGIxNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24g
ZnJvbSB0b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVu
dGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhiMTZj
MmJiN2NhNzZjYmU5MWI0NTQzZDg5OWIxYTNhZTU4MmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKQEAg
LTAsMCArMSwxNzAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdo
dDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9
CisKKyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZsb3cteTog
c2Nyb2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisj
Z3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91
bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisjcmVkYm94
IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5kOiByZWQ7
CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFkZGluZzog
MHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIgb25sb2Fk
PSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0ibW92aW5n
Ym94Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4Ij4KKyAgICAgIDx0
cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4KKyAgICAgICAgPHRk
PjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICAgIDx0cj4K
KyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgICA8dGQ+
PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgIDwvdGFibGU+
CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBt
b3ZpbmdkaXY7Cit2YXIgRVhQRUNURURfU0NST0xMU19UT1RBTCA9IDI7Cit2YXIgc2Nyb2xsc09j
Y3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc5MCcsICc5MCddOwordmFyIHNjcm9s
bEFtb3VudFkgPSBbJzAnLCAnOTUnXTsKKworZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZzZXQoKQor
eworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsK
KyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlKCdtb3Zpbmdk
aXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAg
Ly8gc2hvdWxkQmUoU3RyaW5nKG1vdmluZ2Rpdi5zY3JvbGxUb3ApLCBzY3JvbGxBbW91bnRZW3Nj
cm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzaG91bGRCZSgnbW92aW5nZGl2LnNjcm9sbExlZnQn
LCBzY3JvbGxBbW91bnRYW3Njcm9sbHNPY2N1cnJlZF0pOworICAgICAgICBzY3JvbGxzT2NjdXJy
ZWQrKzsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsc09jY3VycmVkID09IEVYUEVDVEVEX1NDUk9M
TFNfVE9UQUwpIHsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4K
KyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVs
bHlQYXJzZWQoKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rp
b24gZmluZ2VyVXAoZXZlbnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xs
VG9wICsgJywgJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJu
IHRydWU7ICAvLyBXYW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmly
c3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAg
ICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91
Y2hQb2ludCg5NSwgMTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8v
IFNjcm9sbCB0aGUgZGl2IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNo
UG9pbnQoMCwgNSwgMTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZl
bnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQo
KTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOwor
fQorCitmdW5jdGlvbiBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNl
Y29uZCBnZXN0dXJlIik7CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAg
IGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQoMTIsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3Vj
aFN0YXJ0KCk7CisKKyAgICAvLyBTY3JvbGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50
U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMTIsIDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNo
TW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZl
bnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVj
a1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAg
IGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0g
b3IgYnJva2VuJyk7CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2
ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0
dXJlIGdlbmVyYXRpb24gZnJvbSB0b3VjaCBldmVudHMuICcgKworICAgICAgICAgICAgJ1NxdWFy
ZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNzJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVy
LmNsZWFyVG91Y2hQb2ludHMpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBU
b3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFk
ZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8
L3NjcmlwdD4KKworCisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2st
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMv
dG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODlmOTZh
NjU4Y2ViZTQ1MzVmNzRjMTgzYjQ5MDJmMDM3YTMxNmRjOQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgdGVzdHMgYmFzaWMg
c2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK2hhdmUgcmVjZWl2ZWQ6IDEgdG91Y2ggZXZlbnRzCitoYXZlIHJlY2VpdmVkOiAy
IHRvdWNoIGV2ZW50cworUEFTUyBldmVudC50eXBlIGlzICJtb3VzZWRvd24iCitQQVNTIGV2ZW50
LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC50eXBl
IGlzICJtb3VzZXVwIgorUEFTUyBldmVudC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNsaWVu
dFkgaXMgMTIKK1BBU1MgZXZlbnQudHlwZSBpcyAiY2xpY2siCitQQVNTIGV2ZW50LmNsaWVudFgg
aXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWY5OGJkYjBi
NWRlN2EyMjI5MTg2ZGZkZWM4NjA2YWYwZjU3ODQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1z
Y3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgc2Nyb2xsIGdl
c3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJlIGlzIChtb3N0bHkpIGdy
ZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdlc3R1
cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxM
ZWZ0IGlzIDkwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDk1
CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk4YmFjNmQ4YTcyYWVj
ZDc2YjYzYzQ3NWQ5MTlkMWY5M2JmYTA2MjIuLmNhNmRkNDdjNDE0ZTExOTBkMzIwZjYzZjg5NDJj
ZjU4YWNjY2ZkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMS0wNS0wOSAgUm9i
ZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBnZXN0
dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZHMgYSBi
YXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtLiBBZGRzIGFu
IGVudHJ5IHBvaW50IHRvIHRoZQorICAgICAgICBHZXN0dXJlUmVjb2duaXplciB0byByZXNldCBh
bnkgaW50ZXJuYWwgc3RhdGUgb24gYSBwYWdlIHJlc2V0LiBSZXNldHRpbmcgdGhlIGdlc3R1cmUK
KyAgICAgICAgZ2VzdHVyZSByZWNvZ25pemVyIG9uIHBhZ2UgbG9hZCBpcyBuZWNlc2FyeSBmb3Ig
cmVsaWFibGUgbGF5b3V0IHRlc3QgZXhlY3V0aW9uLgorCisgICAgICAgIEFkZGVkIGFuIGFkZGl0
aW9uYWwgY29uc3RydWN0b3IgdG8gcGVybWl0IGJ1aWxkaW5nIGEgc3ludGhldGljIFBsYXRmb3Jt
V2hlZWxFdmVudAorCisgICAgICAgIFNtYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFBsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIgYXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHRoZQorICAgICAgICBz
aW1wbGUgQ2hyb21pdW0gcGxhdGZvcm0gZ2VzdHVyZSByZWNvZ25pemVyLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwKKyAgICAgICAg
ICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnJlc2V0R2VzdHVyZVJlY29nbml6ZXIpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgICogcGxh
dGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3Jt
V2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0
Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp+R2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjphZGRF
ZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bTo6aXNJbkNsaWNrVGltZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjppc0luc2lkZU1hbmhhdHRhblNxdWFyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cHJvY2Vzc1RvdWNoRXZlbnRG
b3JHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OnNjcm9sbFZpYVRvdWNoTW90aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OnRvdWNoRG93bik6Cisg
ICAgICAgIChXZWJDb3JlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpjbGljayk6CisgICAg
ICAgIChXZWJDb3JlOjpjbGlja09yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OmluU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNl
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnN0
YXRlKToKKwogMjAxMS0wNS0wOSAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1bm4uY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZh
N2E4ZmI2ZGIwZDIyNGYzYWFiOTg5NTA1ZDkzZDUzZjJjNzhhMTUuLjVlYjk2MWY4ZGNhNjQyNGI0
ZmY5YTIyOWFjZDZjODk2YTFlOGM4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTc2MSw3ICs3NjEs
NiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vTm90SW1wbGVtZW50ZWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
UGxhdGZvcm1HZXN0dXJlRXZlbnQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9u
LmgnLApAQCAtMzc2NCw2ICszNzYzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9GcmFtZWxlc3NTY3JvbGxWaWV3LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9GcmFtZWxlc3NTY3JvbGxWaWV3Q2xpZW50LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0tleUNvZGVDb252ZXJzaW9uLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2Nocm9taXVtL0tleUNvZGVDb252ZXJzaW9uR3RrLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vS2V5Ym9hcmRDb2Rlcy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCBhNzEyYjdjNjgxNTBkOGU4MmY5ZDYwMjM2YmM4ZjU2ZjQ2YTE1MDRm
Li4zOTBkMGE0YzI4NTliZjE5YTk4YjkxMzhjYTgzY2NhNjc1MWU4NzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMTk5LDYgKzMxOTksMTYgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkK
IAogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOwogfQorCisjaWYgRU5BQkxFKEdFU1RVUkVf
UkVDT0dOSVpFUikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpyZXNldEdlc3R1cmVSZWNvZ25pemVyKCkK
K3sKKyAgICBpZiAobV9nZXN0dXJlUmVjb2duaXplcikKKyAgICAgICAgbV9nZXN0dXJlUmVjb2du
aXplci0+cmVzZXRTdGF0ZSgpOworfQorI2VuZGlmCisKKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDJiZWZhZjM1NTg0YzUwNTM0NmY0MjgyYWVjMDQ2NTJi
MjAzNjIxMmEuLjA2MWQyMTg2NDQyYmJiZTdjOWZhMWZlOGRlZWVlMjdiODBhZDQ2NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY2LDYgKzE2NiwxMCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKKyAgICB2b2lkIHJlc2V0
R2VzdHVyZVJlY29nbml6ZXIoKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKaW5kZXggYmEwYzY4NzkwZmI5ZGQ0MDljNWViMTFiNDBkMWQ4ZTIzNDZmZjQx
ZS4uNmRmYWY5NTNhMDJjOTY1N2M1MzZmZTY5NTk2OTVmNTk4ZjIwMzNiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcApAQCAtMjMyLDYgKzIzMiwxMCBAQCB2b2lkIEZyYW1lVmlldzo6cmVz
ZXQoKQogICAgIG1faXNWaXN1YWxseU5vbkVtcHR5ID0gZmFsc2U7CiAgICAgbV9maXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRDYWxsYmFja1BlbmRpbmcgPSB0cnVlOwogICAgIG1fbWFpbnRhaW5T
Y3JvbGxQb3NpdGlvbkFuY2hvciA9IDA7CisKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVS
KQorICAgIGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5yZXNldEdlc3R1cmVSZWNvZ25pemVyKCk7
CisjZW5kaWYKIH0KIAogYm9vbCBGcmFtZVZpZXc6OmlzRnJhbWVWaWV3KCkgY29uc3QgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgK
aW5kZXggODAyNTgzZjJhMDU1M2JiN2NhNzNjNzg1ZWRmNWFmOGFjMDFiMGE1MC4uYmViMDg4MGEw
OTVmN2I0MjIzYzZjN2JkNTcwNTI4NTJhOTFhMTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtNTcsNiArNTcsMTAg
QEAgcHVibGljOgogICAgIC8vIHNwZWNpZmllcyBpZiB0aGUgfGV2ZW50fCB3YXMgYWN0dWFsbHkg
aGFuZGxlZCBieSB8c291cmNlfCAoYnkgdGhlIEphdmFTY3JpcHQpCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBldmVudCByZXN1bHRlZCBpbiBmaXJpbmcgYSBzeW50aGV0aWMgZXZlbnQuCiAg
ICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmLCBFdmVudEhhbmRsZXIqLCBib29sIGhhbmRsZWQpID0gMDsKKworICAgIC8v
IENsZWFycyB0aGUgR2VzdHVyZVJlY29nbml6ZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuIEl0J3Mg
bmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBiZWZvcmUgZWFjaAorICAgIC8vIGxheW91dCB0ZXN0IHRv
IHJlZHVjZSBmbGFraW5lc3MuCisgICAgdmlydHVhbCB2b2lkIHJlc2V0U3RhdGUoKSA9IDA7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDM3NjU1NTMzYmQ0OGUzMWY1NTFjZWQyZDMzMDQ0YTli
ZTg4N2UwMGMuLjc2ZmFiN2FmOTMyMTg3NTE4Yjg4MGIwN2M1Nzc5MTZkZDcyMWU1MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC0xMDYsNiAr
MTA2LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAg
ICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEludFBvaW50IHBvc2l0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBkZWx0YVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCBkZWx0YVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aGVlbFRpY2tzWCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdoZWVsVGlja3NZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzQWNjZXB0ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRL
ZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXkpCisgICAgICAgICAg
ICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
Z2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKKyAgICAgICAg
ICAgICwgbV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NYKHdoZWVs
VGlja3NYKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NZKHdoZWVsVGlja3NZKQorICAgICAg
ICAgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICAgICAgICAgLCBtX2lzQWNj
ZXB0ZWQoaXNBY2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtleSkKKyAg
ICAgICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFs
dEtleSkKKyAgICAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9IC8vIFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgICBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfSAv
LyBTY3JlZW4gY29vcmRpbmF0ZXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWU4YWZiMDBhOGViMmEzMjNjNTdmNmVmMTJjYTJlYjIyN2I1Yzc1ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBj
bGljayhHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50
Jik7CitzdGF0aWMgYm9vbCBjbGlja09yU2Nyb2xsKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0q
LCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIGluU2Nyb2xsKEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRp
YyBib29sIHJlc2V0KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIHRvdWNoRG93bihHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtlIHRoZXNl
IGNvbmZpZ3VyYWJsZSBwcm9ncmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhp
bXVtVG91Y2hEb3duRHVyYXRpb25Gb3JDbGljayA9IDAuODsKK3N0YXRpYyBjb25zdCBkb3VibGUg
bWluaW11bVRvdWNoRG93bkR1cmF0aW9uRm9yQ2xpY2sgPSAwLjAxOworc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtVG91Y2hNb3ZlRm9yQ2xpY2sgPSAyMDsKKworR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpCisgICAgOiBtX2ZpcnN0VG91Y2hUaW1l
KDAuMCkKKyAgICAsIG1fc3RhdGUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJl
KQorICAgICwgbV9sYXN0VG91Y2hUaW1lKDAuMCkKKyAgICAsIG1fZXZlbnRIYW5kbGVyKDApCit7
Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVzZXRTdGF0ZSgpCit7Cisg
ICAgbV9maXJzdFRvdWNoVGltZSA9IDAuMDsKKyAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlOworICAgIG1fbGFzdFRvdWNoVGltZSA9IDAuMDsKKyAgICBt
X2V2ZW50SGFuZGxlciA9IDA7Cit9CisKK0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06On5HZXN0
dXJlUmVjb2duaXplckNocm9taXVtKCkKK3sKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjphZGRFZGdlRnVuY3Rpb24oU3RhdGUgc3RhdGUsIHVuc2lnbmVkIGZpbmdlciwgUGxh
dGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUsIGJvb2wgaGFuZGxlZCwgR2VzdHVyZVRy
YW5zaXRpb25GdW5jdGlvbiBmKQoreworICAgIG1fZWRnZUZ1bmN0aW9ucy5hZGQoaGFzaChzdGF0
ZSwgZmluZ2VyLCB0b3VjaFR5cGUsIGhhbmRsZWQpLCBmKTsKK30KKworYm9vbCBHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjppc0luQ2xpY2tUaW1lV2luZG93KCkKK3sKKyAgICBkb3VibGUgZHVy
YXRpb24obV9sYXN0VG91Y2hUaW1lIC0gbV9maXJzdFRvdWNoVGltZSk7CisgICAgcmV0dXJuIGR1
cmF0aW9uID49IG1pbmltdW1Ub3VjaERvd25EdXJhdGlvbkZvckNsaWNrICYmIGR1cmF0aW9uIDwg
bWF4aW11bVRvdWNoRG93bkR1cmF0aW9uRm9yQ2xpY2s7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bTo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JiBwb2ludCkKK3sKKyAgICBpbnQgbWFuaGF0dGFuRGlzdGFuY2UgPSBhYnMocG9pbnQu
cG9zKCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKSArCisgICAgICAgIGFicyhwb2lu
dC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworICAgIHJldHVybiBtYW5o
YXR0YW5EaXN0YW5jZSA8IG1heGltdW1Ub3VjaE1vdmVGb3JDbGljazsKK30KKwordm9pZCBHZXN0
dXJlUmVjb2duaXplckNocm9taXVtOjpkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0IFBsYXRm
b3JtVG91Y2hQb2ludCYgcG9pbnQpCit7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3Vz
ZURvd24ocG9pbnQucG9zKCksIHBvaW50LnNjcmVlblBvcygpLCBMZWZ0QnV0dG9uLCBNb3VzZUV2
ZW50UHJlc3NlZCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIG1fbGFzdFRvdWNoVGlt
ZSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKHBvaW50LnBvcygpLCBwb2lu
dC5zY3JlZW5Qb3MoKSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFJlbGVhc2VkLCAxLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgbV9sYXN0VG91Y2hUaW1lKTsKKworICAgIG1fZXZlbnRIYW5k
bGVyLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CisgICAgbV9ldmVudEhh
bmRsZXItPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKK30KKwordm9pZCBH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjppbml0KCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBG
aXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBSZWxl
YXNlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDsKKyAgICBjb25zdCBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
UHJlc3NlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIE1vdmVkID0gUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2lu
dDo6U3RhdGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5
OworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgQ2FuY2VsbGVkID0gUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKworICAgIGFkZEVkZ2VGdW5jdGlvbihOb0dl
c3R1cmUsIEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxzZSwgdG91Y2hEb3duKTsKKyAgICBhZGRF
ZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgQ2FuY2VsbGVk
LCBmYWxzZSwgcmVzZXQpOworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhldGljQ2xp
Y2ssIEZpcnN0RmluZ2VyLCBSZWxlYXNlZCwgZmFsc2UsIGNsaWNrKTsKKyAgICBhZGRFZGdlRnVu
Y3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBj
bGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNr
LCBGaXJzdEZpbmdlciwgU3RhdGlvbmFyeSwgZmFsc2UsIGNsaWNrT3JTY3JvbGwpOworICAgIGFk
ZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBNb3ZlZCwgZmFsc2UsIGluU2Nyb2xs
KTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgUmVsZWFzZWQsIGZh
bHNlLCByZXNldCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIENh
bmNlbGxlZCwgZmFsc2UsIHJlc2V0KTsKK30KKworYm9vbCBHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
JiBldmVudCwgRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxlZCkKK3sKKyAg
ICBtX2V2ZW50SGFuZGxlciA9IGV2ZW50SGFuZGxlcjsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZv
cm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91Y2hQb2ludHMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcG9pbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFBs
YXRmb3JtVG91Y2hQb2ludCYgcCA9IHBvaW50c1tpXTsKKyAgICAgICAgdXBkYXRlVmFsdWVzKGV2
ZW50LnRpbWVzdGFtcCgpLCBwKTsKKworICAgICAgICBpZiAoR2VzdHVyZVRyYW5zaXRpb25GdW5j
dGlvbiBlZiA9IG1fZWRnZUZ1bmN0aW9ucy5nZXQoaGFzaChtX3N0YXRlLCBwLmlkKCksIHAuc3Rh
dGUoKSwgaGFuZGxlZCkpKQorICAgICAgICAgICAgaGFuZGxlZCA9ICgqZWYpKHRoaXMsIHApOwor
ICAgICAgICAvLyBUaGUgZ3JhcGggaXMgc3BhcnNlOiBub3QgYWxsIGVkZ2VzIGhhdmUgZnVuY3Rp
b25zLgorICAgIH0KKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwordm9pZCBHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjpzY3JvbGxWaWFUb3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoUG9p
bnQmIHRvdWNoUG9pbnQpCit7CisgICAgZmxvYXQgZGVsdGFYKHRvdWNoUG9pbnQucG9zKCkueCgp
IC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKTsKKyAgICBmbG9hdCBkZWx0YVkodG91Y2hQb2lu
dC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworCisgICAgLy8gRklYTUU6
IENvbnZlcnQgdG8gZ2VzdHVyZSBldmVudHMgd2hlbiB0aGV5IGhhbmRsZSBzdWJmcmFtZXMuCisg
ICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQodG91Y2hQb2ludC5wb3Mo
KSwgdG91Y2hQb2ludC5zY3JlZW5Qb3MoKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWCAvIHN0YXRp
Y19jYXN0PGZsb2F0PigxMjApLCBkZWx0YVkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIwKSwgU2Ny
b2xsQnlQaXhlbFdoZWVsRXZlbnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7
CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVu
dCk7CisgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworfQorCit2
b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyhjb25zdCBkb3VibGUg
dG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHRvdWNoUG9pbnQpCit7CisgICAg
aWYgKHN0YXRlKCkgPT0gTm9HZXN0dXJlKSB7CisgICAgICAgIG1fZmlyc3RUb3VjaFRpbWUgPSB0
b3VjaFRpbWU7CisgICAgICAgIG1fbGFzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsKKyAgICAgICAg
bV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworICAgIH0gZWxzZQorICAg
ICAgICBtX2xhc3RUb3VjaFRpbWUgPSB0b3VjaFRpbWU7Cit9CisKKy8vIEJ1aWxkcyBhIGhhc2gu
IEhhc2hlcyBhcmUgYXNzZW1ibGVkIGJ5IGpvaW5pbmcgdG9nZXRoZXIgbXVsdGlwbGUgYml0cy4K
Ky8vIDMgTFNCIGJpdHMgZm9yIHRoZSB8dG91Y2hUeXBlfC4KKy8vIDEgYml0IGZvciB8aGFuZGxl
ZHwKKy8vIDEyIGJpdHMgZm9yIHxpZHwKKy8vIDE2IGJpdHMgZm9yIHRoZSB8Z2VzdHVyZVN0YXRl
fC4KK3Vuc2lnbmVkIGludCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpoYXNoKFN0YXRlIGdl
c3R1cmVTdGF0ZSwgdW5zaWduZWQgaWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgdG91Y2hU
eXBlLCBib29sIGhhbmRsZWQpCit7CisgICAgcmV0dXJuIDEgKyAoKHRvdWNoVHlwZSAmIDcpIHwg
KGhhbmRsZWQgPyAxIDw8IDMgOiAwKSB8ICgoaWQgJiAweGZmZikgPDwgNCApIHwgKGdlc3R1cmVT
dGF0ZSA8PCAxNikpOworfQorCitzdGF0aWMgYm9vbCB0b3VjaERvd24oR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYp
Cit7CisgICAgZ2VzdHVyZVJlY29nbml6ZXItPnNldFN0YXRlKEdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIHJlc2V0KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qIGdlc3R1cmVSZWNvZ25pemVyLCBj
b25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5yZXNl
dFN0YXRlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjbGljayhHZXN0
dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5DbGlj
a1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVh
cmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUpOworICAgICAgICBnZXN0dXJlUmVjb2duaXpl
ci0+ZGlzcGF0Y2hTeW50aGV0aWNDbGljayhwb2ludCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzZXQoZ2VzdHVyZVJlY29nbml6ZXIsIHBvaW50KTsKK30KKwor
c3RhdGljIGJvb2wgY2xpY2tPclNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0
dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBp
ZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVj
b2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1
cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQZW5kaW5n
U3ludGhldGljQ2xpY2spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkICYmICFnZXN0
dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5zY3JvbGxWaWFUb3VjaE1vdGlvbihwb2ludCk7CisgICAgICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpT
Y3JvbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzdGF0aWMgYm9vbCBpblNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0
dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBn
ZXN0dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocG9pbnQpOworICAgIHJldHVy
biB0cnVlOworfQorCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI+IFBsYXRm
b3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgpCit7CisgICAgR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXI7CisgICAgZ2VzdHVyZVJlY29nbml6ZXIgPSBuZXcg
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5pbml0
KCk7CisgICAgcmV0dXJuIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcj4oZ2Vz
dHVyZVJlY29nbml6ZXIpOworfQorCitQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpQbGF0Zm9y
bUdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KK1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6On5Q
bGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkOTJhYzZhZDdlODYxZjc0ZGE3
Y2FjM2U0NTRhNmE2MzQ3ZWQzODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgKQEAgLTAsMCArMSw4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1faAorI2RlZmluZSBHZXN0dXJl
UmVjb2duaXplckNocm9taXVtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZVJlY29nbml6
ZXIuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNo
RXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW07CisKK2NsYXNzIEdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0gOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciAgeworcHVi
bGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgTm9HZXN0dXJlLAorICAgICAgUGVuZGluZ1N5
bnRoZXRpY0NsaWNrLAorICAgICAgU2Nyb2xsCisgICAgfTsKKworICAgIHR5cGVkZWYgYm9vbCAo
Kkdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBj
b25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0oKTsKKyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisKKyAgICB2
b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlN0YXRlLCBib29sIGhhbmRsZWQsIEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pOwor
ICAgIHZvaWQgZGlzcGF0Y2hTeW50aGV0aWNDbGljayhjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgdm9pZCByZXNldFN0YXRl
KCk7CisgICAgYm9vbCBpc0luQ2xpY2tUaW1lV2luZG93KCk7CisgICAgYm9vbCBpc0luc2lkZU1h
bmhhdHRhblNxdWFyZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYs
IEV2ZW50SGFuZGxlciosIGJvb2wgaGFuZGxlZCk7CisgICAgdm9pZCBzY3JvbGxWaWFUb3VjaE1v
dGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIHNldFN0YXRlKFN0YXRl
IHMpIHsgbV9zdGF0ZSA9IHM7IH0KKyAgICBTdGF0ZSBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7
IH0KK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVZhbHVlcyhkb3VibGUgdG91Y2hUaW1lLCBj
b25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQgJik7CisgICAgdW5zaWduZWQgaW50IGhhc2goU3RhdGUs
IHVuc2lnbmVkLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlLCBib29sKTsKKyAgICBXVEY6Okhh
c2hNYXA8aW50LCBHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uPiBtX2VkZ2VGdW5jdGlvbnM7Cisg
ICAgSW50UG9pbnQgbV9maXJzdFRvdWNoUG9zaXRpb247CisgICAgZG91YmxlIG1fZmlyc3RUb3Vj
aFRpbWU7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBkb3VibGUgbV9sYXN0VG91Y2hUaW1lOwor
ICAgIEV2ZW50SGFuZGxlciogbV9ldmVudEhhbmRsZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggNTllYTA3NjEyMDJjYWQ3OWY2MTRiZGUyMDk3ZDRhMzQzZDhh
N2M4MC4uY2RkMDBlZjdjNzc2ODI4MWU2NDQ1NjQ3NWNhZjlhNjZlYTcyOTBlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNS0wOSAgUm9iZXJ0IEty
b2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBnZXN0dXJlIHJl
Y29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZGVkIHVuaXQgdGVz
dHMgZm9yIHRoZSBiYXNpYyBjaHJvbWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJlY29nbml6ZXIuCisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9HZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjp0SGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OmZpcnN0VG91Y2hQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNldEZpcnN0VG91Y2hUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6
Zmlyc3RUb3VjaFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpzZXRMYXN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6bGFzdFRvdWNoVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmVkZ2VG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW06OnRVcGRhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnVpbGRhYmxlUGxh
dGZvcm1Ub3VjaFBvaW50OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRm
b3JtVG91Y2hQb2ludDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpCdWlsZGFibGVQbGF0Zm9y
bVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlRlc3RHZXN0dXJlUmVjb2duaXplcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlNldFVwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6VEVTVF9GKToKKwogMjAxMS0wNS0wOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgR2VudGlsY29yZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCmluZGV4IDA1NjdmYWQ0YjRjY2I0MTZhN2JmNDRkOGJiMWNmMDE1YjM4MDIw
NWMuLjdjODgzOGQ0ZTAwOTJhN2YwYzU3OGE4ZDIzMjJkOTEyOTE2ZWYxN2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICBdLAogICAgICAg
ICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVz
dEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
SURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HZXN0dXJlUmVjb2duaXplckNocm9taXVtVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGQ3M2UwNjg2Nzc0OWJmYTM2NDYxYmQyZGRlNTY1ZGUwMTA4ZDNkNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSA6IHB1YmxpYyBX
ZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0
YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKSA6IFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW0oKSB7IH0KKworICAgIGludCB0SGFzaChTdGF0ZSBnZXN0dXJlU3RhdGUsCisg
ICAgICAgICAgICAgIHVuc2lnbmVkIGlkLAorICAgICAgICAgICAgICBQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlN0YXRlIHRvdWNoVHlwZSwKKyAgICAgICAgICAgICAgYm9vbCBoYW5kbGVkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGhhc2goZ2VzdHVyZVN0YXRlLCBpZCwgdG91Y2hUeXBlLCBoYW5kbGVk
KTsKKyAgICB9OworCisgICAgSW50UG9pbnQgZmlyc3RUb3VjaFBvc2l0aW9uKCkgeyByZXR1cm4g
bV9maXJzdFRvdWNoUG9zaXRpb247IH07CisKKyAgICB2b2lkIHNldEZpcnN0VG91Y2hUaW1lKGRv
dWJsZSB0KSB7IG1fZmlyc3RUb3VjaFRpbWUgPSB0OyB9OworICAgIGRvdWJsZSBmaXJzdFRvdWNo
VGltZSgpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFRpbWU7IH07CisKKyAgICB2b2lkIHNldExhc3RU
b3VjaFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBkb3VibGUg
bGFzdFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fbGFzdFRvdWNoVGltZTsgfTsKKworICAgIEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZWRnZUZ1bmN0
aW9uKGludCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZUZ1bmN0aW9ucy5nZXQo
aGFzaCk7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCB0VXBkYXRlVmFsdWVzKGRvdWJsZSBk
LCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQgJnApCisgICAgeworICAgICAgICB1cGRhdGVWYWx1
ZXMoZCwgcCk7CisgICAgfTsKK307CisKK2NsYXNzIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2lu
dCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoUG9pbnQgeworcHVibGljOgorICAgIEJ1
aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCgpOworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQ
b2ludChpbnQgeCwgaW50IHkpOworCisgICAgdm9pZCBzZXRYKGludCB4KQorICAgIHsKKyAgICAg
IG1fcG9zLnNldFgoeCk7CisgICAgICBtX3NjcmVlblBvcy5zZXRYKHgpOworICAgIH07CisKKyAg
ICB2b2lkIHNldFkoaW50IHkpCisgICAgeworICAgICAgbV9wb3Muc2V0WSh5KTsKKyAgICAgIG1f
c2NyZWVuUG9zLnNldFkoeSk7CisgICAgfTsKK307CisKK0J1aWxkYWJsZVBsYXRmb3JtVG91Y2hQ
b2ludDo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KCkKK3sKKyAgICBtX2lkID0gMDsKKyAg
ICBtX3N0YXRlID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk7CisgICAgbV9w
b3MgPSBJbnRQb2ludCgwLCAwKTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50KDAsIDApOwor
fTsKKworQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNo
UG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG1faWQgPSAwOworICAgIG1fc3RhdGUgPSBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKKyAgICBtX3BvcyA9IEludFBvaW50KHgs
IHkpOworICAgIG1fc2NyZWVuUG9zID0gSW50UG9pbnQoeCwgeSk7Cit9OworCisKK2NsYXNzIFRl
c3RHZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAg
ICBUZXN0R2VzdHVyZVJlY29nbml6ZXIoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBTZXRVcCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIHsgfQorfTsKKwor
VEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaGFzaCkKK3sKKyAgICBJbnNwZWN0YWJsZUdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gdGVzdEdtOworICAgIGNvbnN0IHVuc2lnbmVkIEZpcnN0
RmluZ2VyID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBTZWNvbmRGaW5nZXIgPSAxOworCisgICAg
QVNTRVJUX0VRKDEgKyAwLCB0ZXN0R20udEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6
Tm9HZXN0dXJlLAorICAgICAgICBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFJlbGVhc2VkLCBmYWxzZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoOCB8IDEpLCB0ZXN0R20u
dEhhc2goR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlLAorICAgICAgICBGaXJz
dEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsKKworICAg
IEFTU0VSVF9FUSgxICsgKDB4MTAwMDAgfCAyKSwgdGVzdEdtLnRIYXNoKEdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljaywKKyAgICAgICAgRmlyc3RGaW5nZXIs
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9F
USgxICsgMHgyMDAwMCwgdGVzdEdtLnRIYXNoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNj
cm9sbCwKKyAgICAgICAgRmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxl
YXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9FUSgxICsgKDB4MjAwMDAgfCAxKSwgdGVzdEdt
LnRIYXNoKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNjcm9sbCwKKyAgICAgICAgRmlyc3RG
aW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCBmYWxzZSkpOworCisgICAg
QVNTRVJUX0VRKDEgKyAoMHgyMDAwMCB8IDB4MTAgfCA4IHwgMSksCisgICAgICAgIHRlc3RHbS50
SGFzaChHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwsIFNlY29uZEZpbmdlciB8IDB4
MTAwMCwKKyAgICAgICAgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsK
K30KKworCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBzdGF0ZSkKK3sKKyAgICBJbnNw
ZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gdGVzdEdtOworCisgICAgQVNTRVJUX0VR
KDAsIHRlc3RHbS5zdGF0ZSgpKTsKKyAgICB0ZXN0R20uc2V0U3RhdGUoR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICBBU1NFUlRfRVEoR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrLCB0ZXN0R20uc3RhdGUo
KSk7Cit9CisKKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbnNpZGVNYW5oYXR0
YW5TcXVhcmUpCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdt
OworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwOworCisgICAgQVNTRVJUX0VRKDAu
MCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5m
aXJzdFRvdWNoUG9zaXRpb24oKS55KCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAgcC5zZXRZ
KDE5Ljk5OSk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkp
OworCisgICAgcC5zZXRYKDE5Ljk5OSk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX1RS
VUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDIwLjApOwor
ICAgIHAuc2V0WSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNx
dWFyZShwKSk7CisKKyAgICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoMjAuMCk7CisgICAgQVNT
RVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgt
MjAuMCk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFu
aGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgwLjApOworICAgIHAuc2V0WSgtMjAuMCk7
CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKK30KKwor
VEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbkNsaWNrVGltZVdpbmRvdykKK3sKKyAg
ICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisKKyAgICBnbS5zZXRG
aXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBB
U1NFUlRfRkFMU0UoZ20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0
VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjAxMDAwMSk7CisgICAg
QVNTRVJUX1RSVUUoZ20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0
VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjggLSAuMDAwMDAwMDEp
OworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisKKyAgICBnbS5z
ZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC44MDAwMSk7
CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7Cit9CisKK1RFU1Rf
RihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGFkZEVkZ2VGdW5jdGlvbikKK3sKKyAgICBJbnNwZWN0
YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisgICAgZ20uYWRkRWRnZUZ1bmN0aW9u
KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNjcm9sbCwgMCwKKyAgICAgICAgUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCB0cnVlLAorICAgICAgICAoR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik0MDk2KTsKKworICAgIEFTU0VS
VF9FUSgoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlv
bik0MDk2LAorICAgICAgICBnbS5lZGdlRnVuY3Rpb24oZ20udEhhc2goR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6U2Nyb2xsLAorICAgICAgICAgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFJlbGVhc2VkLCB0cnVlKSkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCB1
cGRhdGVWYWx1ZXMpCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVt
IGdtOworCisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNT
RVJUX0VRKDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlLCBnbS5zdGF0ZSgpKTsKKworICAgIEJ1aWxkYWJs
ZVBsYXRmb3JtVG91Y2hQb2ludCBwMSgxMCwgMTEpOworICAgIGdtLnRVcGRhdGVWYWx1ZXMoMS4x
LCBwMSk7CisKKyAgICBBU1NFUlRfRVEoMTAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLngoKSk7
CisgICAgQVNTRVJUX0VRKDExLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS55KCkpOworICAgIEFT
U0VSVF9FUSgxLjEsIGdtLmZpcnN0VG91Y2hUaW1lKCkpOworICAgIEFTU0VSVF9FUSgwLjAsIGdt
Lmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZpcnN0VG91Y2hUaW1lKCkpOworCisgICAgQnVpbGRhYmxl
UGxhdGZvcm1Ub3VjaFBvaW50IHAyKDEzLCAxNCk7CisgICAgZ20uc2V0U3RhdGUoR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICBnbS50VXBkYXRl
VmFsdWVzKDIuMCwgcDIpOworCisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRvdWNoUG9zaXRp
b24oKS54KCkpOworICAgIEFTU0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgp
KTsKKyAgICBBU1NFUlRfRVEoMS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRf
RVEoMi4wIC0gMS4xLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgpKTsK
KworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMygyMywgMzQpOworICAgIGdtLnNl
dFN0YXRlKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Ok5vR2VzdHVyZSk7CisgICAgZ20udFVw
ZGF0ZVZhbHVlcygzLjAsIHAzKTsKKworICAgIEFTU0VSVF9FUSgyMywgZ20uZmlyc3RUb3VjaFBv
c2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMzQsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigp
LnkoKSk7CisgICAgQVNTRVJUX0VRKDMuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNT
RVJUX0VRKDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94995</attachid>
            <date>2011-05-26 10:05:32 -0700</date>
            <delta_ts>2011-05-27 09:17:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110526130059.patch</filename>
            <type>text/plain</type>
            <size>45153</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczMjIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwN2I4NmRlOTQwNWI1MmJhY2UwOWUz
YWQwYzVmZmU1Y2VlNjVmNWU5Li4wZWFjZGQ0MmRhZTVmNTE2OGQ3M2M0ZDExZmFhMzA0OGYyYzI2
OGQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMjYgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKyAgICAgICAgCisgICAgICAgIFNob3dzIHRoYXQgdGhl
IGJhc2ljIENocm9taXVtIGdlc3R1cmUgbWFuYWdlciBjYW4gY29ycmVjdGx5IGNvbnZlcnQgYSB0
b3VjaAorICAgICAgICBldmVudCBzZXF1ZW5jZSBpbnRvIGEgc2VxdWVuY2Ugb2Ygc3ludGhldGlj
IG1vdXNlIGV2ZW50cyBmb3IgY2xpY2tpbmcgYW5kCisgICAgICAgIHNjcm9sbGluZy4KKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTEtMDUtMjUgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3Vj
aC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOGRlYmFi
OTRmMTg5MGM4ZDdiYTlmNzA1NGUzNjIxZmI1OGY0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJl
IGdlbmVyYXRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1h
bmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRjYjRhNGQ0MjJiN2E4NGEyYjFhMmJjOGU2YjAxNDVlM2E2MDIzZDcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0
bWwKQEAgLTAsMCArMSwxMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgordmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZGl2LmlkID0gInRvdWNodGFyZ2V0IjsKK2Rpdi5z
dHlsZS53aWR0aCA9ICIxMDBweCI7CitkaXYuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKK2Rpdi5z
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiYmx1ZSI7CisKK3ZhciBjbGlja0V2ZW50c1JlY2VpdmVk
ID0gMDsKK3ZhciBleHBlY3RlZE1vdXNlRXZlbnRzID0gNDsKK3ZhciB0b3VjaEV2ZW50c1JlY2Vp
dmVkID0gMDsKK3ZhciBtb3VzZUV2ZW50c1JlY2VpdmVkID0gMDsKK3ZhciBldmVudFR5cGVzID0g
WyAnbW91c2Vtb3ZlJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ2NsaWNrJyBdOworCitmdW5j
dGlvbiBnZXN0dXJlRXZlbnRDYWxsYmFjayhldmVudCkKK3sKKyAgICBpZiAod2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsIGV2
ZW50VHlwZXNbbW91c2VFdmVudHNSZWNlaXZlZF0pOworICAgICAgICBzaG91bGRCZSgnZXZlbnQu
Y2xpZW50WCcsICcxMCcpOworICAgICAgICBzaG91bGRCZSgnZXZlbnQuY2xpZW50WScsICcxMicp
OworICAgICAgICBtb3VzZUV2ZW50c1JlY2VpdmVkKys7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZGVidWcoZXZlbnQudHlwZSk7CisgICAgICAgIGRlYnVnKGV2ZW50LmNsaWVudFgpOworICAgICAg
ICBkZWJ1ZyhldmVudC5jbGllbnRZKTsKKyAgICB9Cit9CisKKy8vIEJlY2F1c2Ugd2UgbWF5IG5v
dCBoYXZlIGEgZ2VzdHVyZSByZWNvZ25pemVyLCB3ZSBzZW5kIGEga2V5IHByZXNzCisvLyBldmVu
dCB0byBlbmQgdGhlIHRlc3Qgd2l0aG91dCB0ZW1wb3JhbCBmbGFraW5lc3MuCitmdW5jdGlvbiBx
dWl0S2V5VG9FbmRUZXN0KGV2ZW50KSB7CisgICAgZW5kVGVzdCgpOworfQorCisvLyBMb2cgdGhh
dCB3ZSBzdGlsbCBnb3QgdGhlIHRvdWNoIGV2ZW50cy4KK2Z1bmN0aW9uIHRvdWNoRXZlbnRDYWxs
YmFjayhldmVudCkgeworICAgIC8vIGRlYnVnKCdoYXZlIHJlY2VpdmVkOiAnICsgZXZlbnQudHlw
ZSk7CisgICAgdG91Y2hFdmVudHNSZWNlaXZlZCsrOworICAgIGRlYnVnKCdoYXZlIHJlY2VpdmVk
OiAnICsgdG91Y2hFdmVudHNSZWNlaXZlZCArICcgdG91Y2ggZXZlbnRzJyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Z1bmN0aW9uIHNpbmdsZVRvdWNoU2VxdWVuY2UoKQoreworICAgIGV2ZW50
U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50
KDEwLCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gSW5zZXJ0
IHNvbWUgZGVsYXkuIE5COiB0aGlzIHZhbHVlIGRlcGVuZHMgb24gbWluQ2xpY2tEb3duVGltZSwK
KyAgICAvLyBtYXhDbGlja0Rvd25UaW1lIGZyb20gR2VzdHVyZU1hbmFnZXIuY3BwCisgICAgZXZl
bnRTZW5kZXIubGVhcEZvcndhcmQoMjApOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNo
UG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKK30KKworZnVuY3Rpb24gZW5k
VGVzdCgpCit7CisKKyAgICBpZiAobW91c2VFdmVudHNSZWNlaXZlZCA8IGV4cGVjdGVkTW91c2VF
dmVudHMpIHsKKyAgICAgICAgLy8gZGVidWcoJ1JlY2VpdmVkOiAnICsgdG91Y2hFdmVudHNSZWNl
aXZlZCArICcgbW91c2UgZXZlbnRzICcpOworICAgICAgICBkZWJ1ZygnR2VzdHVyZSBtYW5hZ2Vy
IG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLicpOworICAgIH0KKyAgICAvLyBCYWls
LgorICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGdl
c3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoImNs
aWNrIiwgZ2VzdHVyZUV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2V1cCIsIGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7
CisgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHF1aXRLZXlUb0VuZFRl
c3QsIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNo
RXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1v
dmUiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5l
cigidG91Y2hlbmQiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKworICAgIGRvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKGRpdiwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdlc3R1
cmUgZ2VuZXJhdGlvbi4iKTsKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2lu
dHMpIHsKKyAgICAgICAgICAgIHNpbmdsZVRvdWNoU2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGV2
ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDEwKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURv
d24oJyAnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVt
cFJlbmRlclRyZWUuICBUYXAgb24gdGhlIGJsdWUgcmVjdCB0byBsb2cuIikKKyAgICB9Cit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40YmJiNjZhNWUxMDgwYTliMGNhYmNmMTNiOWFmNDM0YWQyZDg4YjE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgc2Nyb2xs
IGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJlIGlzIChtb3N0bHkp
IGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0dlc3R1cmUg
bWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBicm9rZW4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kOGIxNmMyYmI3Y2E3NmNiZTkxYjQ1NDNkODk5YjFhM2FlNTgyZDU5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2Vz
dHVyZS1zY3JvbGwuaHRtbApAQCAtMCwwICsxLDE3MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdp
ZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBi
YWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRoOiAxMDAlOworICBo
ZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13cmFwOiBicmVhay13
b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNjcm9sbDsKKyAgZGlz
cGxheTogYmxvY2s7Cit9CisKKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0
OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2lu
OiAwcHg7Cit9CisKKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7
CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30K
KwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5
bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0idG91Y2h0YXJnZXQi
PgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFj
aW5nPSIwcHgiPgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rp
dj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAg
ICA8L3RyPgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2
PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAg
IDwvdHI+CisgICAgPC90YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKwordmFyIG1vdmluZ2RpdjsKK3ZhciBFWFBFQ1RFRF9TQ1JPTExTX1RPVEFM
ID0gMjsKK3ZhciBzY3JvbGxzT2NjdXJyZWQgPSAwOwordmFyIHNjcm9sbEFtb3VudFggPSBbJzkw
JywgJzkwJ107Cit2YXIgc2Nyb2xsQW1vdW50WSA9IFsnMCcsICc5NSddOworCitmdW5jdGlvbiBj
aGVja1Njcm9sbE9mZnNldCgpCit7CisgICAgbW92aW5nZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21vdmluZ2JveCcpOworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAg
ICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxUb3AnLCBzY3JvbGxBbW91bnRZW3Njcm9sbHNP
Y2N1cnJlZF0pOworICAgICAgICAvLyBzaG91bGRCZShTdHJpbmcobW92aW5nZGl2LnNjcm9sbFRv
cCksIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNob3VsZEJlKCdt
b3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xsc09jY3VycmVkXSk7Cisg
ICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlmIChzY3JvbGxzT2NjdXJy
ZWQgPT0gRVhQRUNURURfU0NST0xMU19UT1RBTCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3Qg
aGVyZSwgd2UndmUgcGFzc2VkLgorICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
ICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7
CisgICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQu
Y3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3Jv
bGxMZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3Vy
LgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygi
Zmlyc3QgZ2VzdHVyZSIpOworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAg
ICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDk1LCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91
Y2hTdGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxlZnQuCisgICAgZXZl
bnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCA1LCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91
Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBl
dmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNo
ZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNl
KCkKK3sKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVh
clRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMiwgOTcpOwor
ICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUgcmVjdGFu
Z2xlIGRvd24uCisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAxMiwgMik7Cisg
ICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91
Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBm
b3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ0dlc3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50
ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBicm9rZW4nKTsKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpCit7Cisg
ICAgdmFyIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsK
KworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1Ro
aXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gJyAr
CisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MnKTsKKworICAg
ICAgICBpZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAgICAgIGZpcnN0
VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVj
ZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJl
cyBEdW1wUmVuZGVyVHJlZS4gIFRvdWNoIHNjcm9sbCB0aGUgcmVkIHJlY3QgdG8gbG9nLiIpOwor
ICAgICAgICBtb3ZpbmdkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwg
ZmFsc2UpOworICAgIH0KK30KKzwvc2NyaXB0PgorCisKKworPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mYTA2NDYwODNmYTk5ODJhMWRjY2NkMjc5NDZmNWVlZmQ0ZDg3MTI4Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBA
QAorVGhpcyB0ZXN0cyBiYXNpYyBzaW5nbGUgdG91Y2ggZ2VzdHVyZSBnZW5lcmF0aW9uLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaGF2ZSByZWNlaXZlZDogMSB0b3VjaCBldmVu
dHMKK2hhdmUgcmVjZWl2ZWQ6IDIgdG91Y2ggZXZlbnRzCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1v
dXNlbW92ZSIKK1BBU1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlz
IDEyCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNlZG93biIKK1BBU1MgZXZlbnQuY2xpZW50WCBp
cyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlzIDEyCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNl
dXAiCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgor
UEFTUyBldmVudC50eXBlIGlzICJjbGljayIKK1BBU1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFT
UyBldmVudC5jbGllbnRZIGlzIDEyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2Vz
dHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZjk4YmRiMGI1ZGU3YTIyMjkx
ODZkZmRlYzg2MDZhZjBmNTc4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBnZW5l
cmF0aW9uIGZyb20gdG91Y2ggZXZlbnRzLiBTcXVhcmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFz
cworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyBt
b3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgbW92aW5nZGl2LnNjcm9sbExlZnQgaXMgOTAK
K3NlY29uZCBnZXN0dXJlCitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgOTUKK1BBU1MgbW92
aW5nZGl2LnNjcm9sbExlZnQgaXMgOTAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZkZGQwMDVhZDAzOTk5OTdmMzQ3ZWI4
MmI3MzYxOWZlN2NmMDdlYy4uYWM1OTVlMTdhMTc1NjA5ZmNjNzQ1NTAzNGE3YzZkZDQ0MWEyNzUw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDExLTA1LTI2ICBSb2JlcnQgS3JvZWdl
ciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBhIGJhc2ljIGdlc3R1cmUgcmVjb2du
aXplciB0byB0aGUgQ2hyb21pdW0gcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NDE3CisKKyAgICAgICAgQWRkcyBhIGJhc2ljIGdlc3R1
cmUgcmVjb2duaXplciB0byB0aGUgQ2hyb21pdW0gcGxhdGZvcm0uIEFkZHMgYW4gZW50cnkKKyAg
ICAgICAgcG9pbnQgdG8gdGhlIEdlc3R1cmVSZWNvZ25pemVyIHRvIHJlc2V0IGFueSBpbnRlcm5h
bCBzdGF0ZSBvbiBhIHBhZ2UgcmVzZXQuCisgICAgICAgIFJlc2V0dGluZyB0aGUgZ2VzdHVyZSBy
ZWNvZ25pemVyIG9uIHBhZ2UgbG9hZCBpcyBuZWNlc2FyeSBmb3IgcmVsaWFibGUKKyAgICAgICAg
bGF5b3V0IHRlc3QgZXhlY3V0aW9uIGFuZCBpbXByb3ZlcyBnZXN0dXJlIHJlY29nbml6ZXIgb3Bl
cmF0aW9uYWwKKyAgICAgICAgcm9idXN0bmVzcy4KKworICAgICAgICBBZGRlZCBhbiBhZGRpdGlv
bmFsIGNvbnN0cnVjdG9yIHRvIHBlcm1pdCBidWlsZGluZyBhIHN5bnRoZXRpYworICAgICAgICBQ
bGF0Zm9ybVdoZWVsRXZlbnQuCisKKyAgICAgICAgU21hbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUg
UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciBhcyByZXF1aXJlZCB0bworICAgICAgICBpbXBsZW1l
bnQgdGhlIHNpbXBsZSBDaHJvbWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJlY29nbml6ZXIuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2suaHRtbAor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXpl
cik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVs
RXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpyZXNldFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06On5HZXN0dXJlUmVj
b2duaXplckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW06OmFkZEVkZ2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjppc0luQ2xpY2tUaW1lV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmRpc3BhdGNoU3ludGhldGlj
Q2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpw
cm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6c2Nyb2xsVmlhVG91Y2hNb3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6dXBkYXRlVmFsdWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNpZ25hdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b3VjaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6cmVzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6aXNDbGlja09yU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OmluU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1
cmVSZWNvZ25pemVyOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVt
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJl
Y29nbml6ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OnNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OnN0YXRlKToKKwogMjAxMS0wNS0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3
NjE1OTkzMjE0ZmU0MWZmNDA1NGQxNjMxZWI1N2QzZTIxMjQ4ZTNhLi5kZjExZjZiYjY1ZDBmZGY4
NzViZGJhNDg5ZjZjZWQ1Mzc3YjI0YzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NjcsNyArNzY3
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL05vdEltcGxlbWVudGVkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bi5oJywKQEAgLTM4MDgsNiArMzgwNyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbi5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbkd0ay5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0tleWJvYXJkQ29kZXMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggNzZlNjJmNmNiZjg3ODE1YmNlN2FmNDUwYzAxZmRiNWE5MTkzM2Zk
Ny4uYTgzZDBhMGY5NTNmMTZkY2E0NDdhNWEwNDgwMjlkMjE5ZGU5NGEwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzIzNSw2ICszMjM1LDE2IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQp
CiAKICAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KKworI2lmIEVOQUJMRShHRVNUVVJF
X1JFQ09HTklaRVIpCit2b2lkIEV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcigp
Cit7CisgICAgaWYgKG1fZ2VzdHVyZVJlY29nbml6ZXIpCisgICAgICAgIG1fZ2VzdHVyZVJlY29n
bml6ZXItPnJlc2V0U3RhdGUoKTsKK30KKyNlbmRpZgorCisKICNlbmRpZgogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBkYzQzZTNkODI5MjRmYzgzYTVhYjk1MDVjZjBmNDlk
ZmIwMzYwMWJiLi43NDVlZGRhNGQyZTBkZTFjM2VlNWQxMjkwMTVjMTc3YWFmNWQ4NTc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTE2Niw2ICsxNjYsMTAgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisgICAgdm9pZCByZXNl
dEdlc3R1cmVSZWNvZ25pemVyKCk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
Jik7CiAgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IDU4ZjVjM2YwOWQxNWEzYTY5ZTNhNDE4ZDc0OTAzYTg5ZjI0MzQz
N2IuLmIzNjU3Njg3YzdkYjc4MjMwYTMzMDU0N2NhNGY3Njc5OWJkNzE4MTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTIzMyw2ICsyMzMsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnJl
c2V0KCkKICAgICBtX2lzVmlzdWFsbHlOb25FbXB0eSA9IGZhbHNlOwogICAgIG1fZmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2tQZW5kaW5nID0gdHJ1ZTsKICAgICBtX21haW50YWlu
U2Nyb2xsUG9zaXRpb25BbmNob3IgPSAwOworCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpF
UikKKyAgICBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+cmVzZXRHZXN0dXJlUmVjb2duaXplcigp
OworI2VuZGlmCiB9CiAKIGJvb2wgRnJhbWVWaWV3Ojppc0ZyYW1lVmlldygpIGNvbnN0IApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXpl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5o
CmluZGV4IDgwMjU4M2YyYTA1NTNiYjdjYTczYzc4NWVkZjVhZjhhYzAxYjBhNTAuLmNkY2I3MDdi
M2NhY2U2N2JjYTk2ZjI1YWUzN2U2MDk5ZjNiZjljY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTU3LDYgKzU3LDkg
QEAgcHVibGljOgogICAgIC8vIHNwZWNpZmllcyBpZiB0aGUgfGV2ZW50fCB3YXMgYWN0dWFsbHkg
aGFuZGxlZCBieSB8c291cmNlfCAoYnkgdGhlIEphdmFTY3JpcHQpCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBldmVudCByZXN1bHRlZCBpbiBmaXJpbmcgYSBzeW50aGV0aWMgZXZlbnQuCiAg
ICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmLCBFdmVudEhhbmRsZXIqLCBib29sIGhhbmRsZWQpID0gMDsKKworICAgIC8v
IENsZWFycyB0aGUgR2VzdHVyZVJlY29nbml6ZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuCisgICAg
dmlydHVhbCB2b2lkIHJlc2V0U3RhdGUoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCmluZGV4
IDM3NjU1NTMzYmQ0OGUzMWY1NTFjZWQyZDMzMDQ0YTliZTg4N2UwMGMuLmE2YjdjNTA3MmZkY2Mz
ZDQ3MjRiZDM4NDQxZjI2ZmFhMGVkY2Q2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC0xMDYsNiArMTA2LDI4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50
KEludFBvaW50IHBvc2l0aW9uLCBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgZmxvYXQgZGVsdGFY
LCBmbG9hdCBkZWx0YVksIGZsb2F0IHdoZWVsVGlja3NYLCBmbG9hdCB3aGVlbFRpY2tzWSwgUGxh
dGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgaXNBY2NlcHRlZCwg
Ym9vbCBzaGlmdEtleSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5KQor
ICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2dsb2Jh
bFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2RlbHRhWChkZWx0YVgp
CisgICAgICAgICAgICAsIG1fZGVsdGFZKGRlbHRhWSkKKyAgICAgICAgICAgICwgbV93aGVlbFRp
Y2tzWCh3aGVlbFRpY2tzWCkKKyAgICAgICAgICAgICwgbV93aGVlbFRpY2tzWSh3aGVlbFRpY2tz
WSkKKyAgICAgICAgICAgICwgbV9ncmFudWxhcml0eShncmFudWxhcml0eSkKKyAgICAgICAgICAg
ICwgbV9pc0FjY2VwdGVkKGlzQWNjZXB0ZWQpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hp
ZnRLZXkpCisgICAgICAgICAgICAsIG1fY3RybEtleShjdHJsS2V5KQorICAgICAgICAgICAgLCBt
X2FsdEtleShhbHRLZXkpCisgICAgICAgICAgICAsIG1fbWV0YUtleShtZXRhS2V5KQorI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgICAgICwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZh
bHNlKQorICAgICAgICAgICAgLCBtX3BoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkK
KyAgICAgICAgICAgICwgbV9tb21lbnR1bVBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9u
ZSkKKyAgICAgICAgICAgICwgbV90aW1lc3RhbXAoMCkKKyNlbmRpZgorICAgICAgICB7CisgICAg
ICAgIH0KKwogICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9zKCkgY29uc3QgeyByZXR1cm4gbV9w
b3NpdGlvbjsgfSAvLyBQbGF0Zm9ybVdpbmRvdyBjb29yZGluYXRlcy4KICAgICAgICAgY29uc3Qg
SW50UG9pbnQmIGdsb2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0g
Ly8gU2NyZWVuIGNvb3JkaW5hdGVzLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRjN2M2NDgyMWFjYjAxMzM1NGI0MTgxZTNiMTJmZWQ4MDQyNjZhNGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2du
aXplckNocm9taXVtLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRXZlbnRI
YW5kbGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1XaGVlbEV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wg
Y2xpY2soR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2lu
dCYpOworc3RhdGljIGJvb2wgaXNDbGlja09yU2Nyb2xsKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIGluU2Nyb2xsKEdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0
YXRpYyBib29sIHJlc2V0KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIHRvdWNoRG93bihHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtlIHRo
ZXNlIGNvbmZpZ3VyYWJsZSBwcm9ncmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBt
YXhpbXVtVG91Y2hEb3duRHVyYXRpb25JblNlY29uZHNGb3JDbGljayA9IDAuODsKK3N0YXRpYyBj
b25zdCBkb3VibGUgbWluaW11bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sgPSAw
LjAxOworc3RhdGljIGNvbnN0IGludCBtYXhpbXVtVG91Y2hNb3ZlSW5QaXhlbHNGb3JDbGljayA9
IDIwOworCitHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtKCkKKyAgICA6IG1fZmlyc3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9zdGF0ZShHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUpCisgICAgLCBtX2xhc3RUb3VjaFRpbWUoMC4w
KQorICAgICwgbV9ldmVudEhhbmRsZXIoMCkKK3sKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpyZXNldFN0YXRlKCkKK3sKKyAgICBtX2ZpcnN0VG91Y2hUaW1lID0gMC4wOwor
ICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmU7CisgICAg
bV9sYXN0VG91Y2hUaW1lID0gMC4wOworICAgIG1fZXZlbnRIYW5kbGVyID0gMDsKK30KKworR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6fkdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQorewor
fQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmFkZEVkZ2VGdW5jdGlvbihTdGF0
ZSBzdGF0ZSwgdW5zaWduZWQgZmluZ2VySWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgdG91
Y2hUeXBlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgR2VzdHVyZVRyYW5zaXRpb25G
dW5jdGlvbiBmKQoreworICAgIG1fZWRnZUZ1bmN0aW9ucy5hZGQoc2lnbmF0dXJlKHN0YXRlLCBm
aW5nZXJJZCwgdG91Y2hUeXBlLCB0b3VjaEhhbmRsZWRCeUphdmFTY3JpcHQpLCBmKTsKK30KKwor
Ym9vbCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjppc0luQ2xpY2tUaW1lV2luZG93KCkKK3sK
KyAgICBkb3VibGUgZHVyYXRpb24obV9sYXN0VG91Y2hUaW1lIC0gbV9maXJzdFRvdWNoVGltZSk7
CisgICAgcmV0dXJuIGR1cmF0aW9uID49IG1pbmltdW1Ub3VjaERvd25EdXJhdGlvbkluU2Vjb25k
c0ZvckNsaWNrICYmIGR1cmF0aW9uIDwgbWF4aW11bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRz
Rm9yQ2xpY2s7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aXNJbnNpZGVN
YW5oYXR0YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBp
bnQgbWFuaGF0dGFuRGlzdGFuY2UgPSBhYnMocG9pbnQucG9zKCkueCgpIC0gbV9maXJzdFRvdWNo
UG9zaXRpb24ueCgpKSArIGFicyhwb2ludC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlv
bi55KCkpOworICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5jZSA8IG1heGltdW1Ub3VjaE1vdmVJ
blBpeGVsc0ZvckNsaWNrOworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmRp
c3BhdGNoU3ludGhldGljQ2xpY2soY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sK
KyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92ZShwb2ludC5wb3MoKSwgcG9pbnQu
c2NyZWVuUG9zKCksIE5vQnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIC8qIGNsaWNrQ291bnQgKi8g
MSwgLyogc2hpZnQgKi8gZmFsc2UsIC8qIGN0cmwgKi8gZmFsc2UsIC8qIGFsdCAqLyBmYWxzZSwg
LyogbWV0YSAqLyBmYWxzZSwgbV9sYXN0VG91Y2hUaW1lKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgZmFrZU1vdXNlRG93bihwb2ludC5wb3MoKSwgcG9pbnQuc2NyZWVuUG9zKCksIExlZnRCdXR0
b24sIE1vdXNlRXZlbnRQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIC8qIHNoaWZ0ICovIGZh
bHNlLCAvKiBjdHJsICovIGZhbHNlLCAvKiBhbHQgKi8gZmFsc2UsIC8qIG1ldGEgKi8gZmFsc2Us
IG1fbGFzdFRvdWNoVGltZSk7CisgICAgLy8gVE9ETzogYWRkIGEgZmFrZSBtb3Rpb24gaGVyZS4K
KyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlVXAocG9pbnQucG9zKCksIHBvaW50LnNj
cmVlblBvcygpLCBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50UmVsZWFzZWQsIC8qIGNsaWNrQ291bnQg
Ki8gMSwgLyogc2hpZnQgKi8gZmFsc2UsIC8qIGN0cmwgKi8gZmFsc2UsIC8qIGFsdCAqLyBmYWxz
ZSwgLyogbWV0YSAqLyBmYWxzZSwgbV9sYXN0VG91Y2hUaW1lKTsKKworICAgIG1fZXZlbnRIYW5k
bGVyLT5tb3VzZU1vdmVkKGZha2VNb3VzZU1vdmUpOworICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5k
bGVNb3VzZVByZXNzRXZlbnQoZmFrZU1vdXNlRG93bik7CisgICAgbV9ldmVudEhhbmRsZXItPmhh
bmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3VzZVVwKTsKK30KKwordm9pZCBHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjppbml0aWFsaXplKCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBGaXJz
dEZpbmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBSZWxlYXNl
ZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDsKKyAgICBjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJl
c3NlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIE1vdmVkID0gUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6
U3RhdGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5Owor
ICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgQ2FuY2VsbGVkID0gUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKworICAgIGFkZEVkZ2VGdW5jdGlvbihOb0dlc3R1
cmUsIEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxzZSwgdG91Y2hEb3duKTsKKyAgICBhZGRFZGdl
RnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgQ2FuY2VsbGVkLCBm
YWxzZSwgcmVzZXQpOworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhldGljQ2xpY2ss
IEZpcnN0RmluZ2VyLCBSZWxlYXNlZCwgZmFsc2UsIGNsaWNrKTsKKyAgICBhZGRFZGdlRnVuY3Rp
b24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBpc0Ns
aWNrT3JTY3JvbGwpOworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhldGljQ2xpY2ss
IEZpcnN0RmluZ2VyLCBTdGF0aW9uYXJ5LCBmYWxzZSwgaXNDbGlja09yU2Nyb2xsKTsKKyAgICBh
ZGRFZGdlRnVuY3Rpb24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBpblNjcm9s
bCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIFJlbGVhc2VkLCBm
YWxzZSwgcmVzZXQpOworICAgIGFkZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBD
YW5jZWxsZWQsIGZhbHNlLCByZXNldCk7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6cHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVu
dCYgZXZlbnQsIEV2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyLCBib29sIGhhbmRsZWQpCit7Cisg
ICAgbV9ldmVudEhhbmRsZXIgPSBldmVudEhhbmRsZXI7CisgICAgY29uc3QgVmVjdG9yPFBsYXRm
b3JtVG91Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50LnRvdWNoUG9pbnRzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBQ
bGF0Zm9ybVRvdWNoUG9pbnQmIHAgPSBwb2ludHNbaV07CisgICAgICAgIHVwZGF0ZVZhbHVlcyhl
dmVudC50aW1lc3RhbXAoKSwgcCk7CisKKyAgICAgICAgaWYgKEdlc3R1cmVUcmFuc2l0aW9uRnVu
Y3Rpb24gZWYgPSBtX2VkZ2VGdW5jdGlvbnMuZ2V0KHNpZ25hdHVyZShtX3N0YXRlLCBwLmlkKCks
IHAuc3RhdGUoKSwgaGFuZGxlZCkpKQorICAgICAgICAgICAgaGFuZGxlZCA9ICgqZWYpKHRoaXMs
IHApOworICAgICAgICAvLyBUaGUgZ3JhcGggaXMgc3BhcnNlOiBub3QgYWxsIGVkZ2VzIGhhdmUg
ZnVuY3Rpb25zLgorICAgIH0KKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwordm9pZCBHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpzY3JvbGxWaWFUb3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQmIHRvdWNoUG9pbnQpCit7CisgICAgZmxvYXQgZGVsdGFYKHRvdWNoUG9pbnQucG9z
KCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKTsKKyAgICBmbG9hdCBkZWx0YVkodG91
Y2hQb2ludC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworCisgICAgLy8g
RklYTUU6IENvbnZlcnQgdG8gZ2VzdHVyZSBldmVudHMgd2hlbiB0aGV5IGhhbmRsZSBzdWJmcmFt
ZXMuCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQodG91Y2hQb2lu
dC5wb3MoKSwgdG91Y2hQb2ludC5zY3JlZW5Qb3MoKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWCAv
IHN0YXRpY19jYXN0PGZsb2F0PigxMjApLCBkZWx0YVkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIw
KSwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSk7CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hl
ZWxFdmVudCk7CisgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOwor
fQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyhjb25zdCBk
b3VibGUgdG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHRvdWNoUG9pbnQpCit7
CisgICAgaWYgKHN0YXRlKCkgPT0gTm9HZXN0dXJlKSB7CisgICAgICAgIG1fZmlyc3RUb3VjaFRp
bWUgPSB0b3VjaFRpbWU7CisgICAgICAgIG1fbGFzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsKKyAg
ICAgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworICAgIH0gZWxz
ZQorICAgICAgICBtX2xhc3RUb3VjaFRpbWUgPSB0b3VjaFRpbWU7Cit9CisKKy8vIEJ1aWxkcyBh
IHNpZ25hdHVyZS4gU2lnbmF0dXJlcyBhcmUgYXNzZW1ibGVkIGJ5IGpvaW5pbmcgdG9nZXRoZXIg
bXVsdGlwbGUgYml0cy4KKy8vIDMgTFNCIGJpdHMgZm9yIHRoZSB8dG91Y2hUeXBlfC4KKy8vIDEg
Yml0IGZvciB8aGFuZGxlZHwKKy8vIDEyIGJpdHMgZm9yIHxpZHwKKy8vIDE2IGJpdHMgZm9yIHRo
ZSB8Z2VzdHVyZVN0YXRlfC4KK3Vuc2lnbmVkIGludCBHZXN0dXJlUmVjb2duaXplckNocm9taXVt
OjpzaWduYXR1cmUoU3RhdGUgZ2VzdHVyZVN0YXRlLCB1bnNpZ25lZCBpZCwgUGxhdGZvcm1Ub3Vj
aFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUsIGJvb2wgaGFuZGxlZCkKK3sKKyAgICBBU1NFUlQoKGlk
ICYgMHhmZmYpID09IGlkKTsKKyAgICByZXR1cm4gMSArICgodG91Y2hUeXBlICYgMHg3KSB8ICho
YW5kbGVkID8gMSA8PCAzIDogMCkgfCAoKGlkICYgMHhmZmYpIDw8IDQgKSB8IChnZXN0dXJlU3Rh
dGUgPDwgMTYpKTsKK30KKworc3RhdGljIGJvb2wgdG91Y2hEb3duKEdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW0qIGdlc3R1cmVSZWNvZ25pemVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQor
eworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCByZXNldChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0dXJlUmVjb2duaXplciwgY29u
c3QgUGxhdGZvcm1Ub3VjaFBvaW50JikKK3sKKyAgICBnZXN0dXJlUmVjb2duaXplci0+cmVzZXRT
dGF0ZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgY2xpY2soR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyLT5pc0luQ2xpY2tU
aW1lV2luZG93KCkgJiYgZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJl
KHBvaW50KSkgeworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+c2V0U3RhdGUoR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlKTsKKyAgICAgICAgZ2VzdHVyZVJlY29nbml6ZXIt
PmRpc3BhdGNoU3ludGhldGljQ2xpY2socG9pbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc2V0KGdlc3R1cmVSZWNvZ25pemVyLCBwb2ludCk7Cit9CisKK3N0
YXRpYyBib29sIGlzQ2xpY2tPclNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0
dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBp
ZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVj
b2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1
cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQZW5kaW5n
U3ludGhldGljQ2xpY2spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkICYmICFnZXN0
dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5zY3JvbGxWaWFUb3VjaE1vdGlvbihwb2ludCk7CisgICAgICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpT
Y3JvbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzdGF0aWMgYm9vbCBpblNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0
dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBn
ZXN0dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocG9pbnQpOworICAgIHJldHVy
biB0cnVlOworfQorCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI+IFBsYXRm
b3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgpCit7CisgICAgR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXI7CisgICAgZ2VzdHVyZVJlY29nbml6ZXIgPSBuZXcg
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5pbml0
aWFsaXplKCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGdlc3R1cmVSZWNvZ25pemVyKTsKK30KKwor
UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcjo6UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcigpCit7
Cit9CisKK1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25p
emVyKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU5YjBlZThjNzAwY2M4NDE3ODVhYTdlYTkyY2E2NDc1ZDIyN2Y3NGYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0
dXJlUmVjb2duaXplckNocm9taXVtLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW1faAorI2RlZmluZSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gK
KworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCIKKworI2luY2x1ZGUgIlBs
YXRmb3JtVG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0gOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciAgeworcHVi
bGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgTm9HZXN0dXJlLAorICAgICAgUGVuZGluZ1N5
bnRoZXRpY0NsaWNrLAorICAgICAgU2Nyb2xsCisgICAgfTsKKworICAgIHR5cGVkZWYgYm9vbCAo
Kkdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBj
b25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0oKTsKKyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisKKyAgICB2
b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlN0YXRlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgR2VzdHVyZVRyYW5z
aXRpb25GdW5jdGlvbik7CisgICAgdm9pZCBkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0IFBs
YXRmb3JtVG91Y2hQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
dmlydHVhbCB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICBib29sIGlzSW5DbGlja1RpbWVXaW5kb3co
KTsKKyAgICBib29sIGlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hQ
b2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVkKTsKKyAg
ICB2b2lkIHNjcm9sbFZpYVRvdWNoTW90aW9uKGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOwor
ICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUgdmFsdWUpIHsgbV9zdGF0ZSA9IHZhbHVlOyB9CisgICAg
U3RhdGUgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IHVwZGF0ZVZhbHVlcyhkb3VibGUgdG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQm
KTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hdHVyZShTdGF0ZSwgdW5zaWduZWQsIFBs
YXRmb3JtVG91Y2hQb2ludDo6U3RhdGUsIGJvb2wpOworCisgICAgV1RGOjpIYXNoTWFwPGludCwg
R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbj4gbV9lZGdlRnVuY3Rpb25zOworICAgIEludFBvaW50
IG1fZmlyc3RUb3VjaFBvc2l0aW9uOworICAgIGRvdWJsZSBtX2ZpcnN0VG91Y2hUaW1lOworICAg
IFN0YXRlIG1fc3RhdGU7CisgICAgZG91YmxlIG1fbGFzdFRvdWNoVGltZTsKKyAgICBFdmVudEhh
bmRsZXIqIG1fZXZlbnRIYW5kbGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IGMwYTMwZmJjNDAyNWYwNjdmMGQ1N2FjNWI2MGIzOGY4NzcwNTJiYzQuLjYwYjkw
ZjQ4YmYwZjUxNGM4ODllMjNiMWU4NGU1ZDhhMWY4MGQzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDUtMjYgIFJvYmVydCBLcm9lZ2VyICA8cmpr
cm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVyIHRv
IHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBBZGRlZCB1bml0IHRlc3RzIGZvciB0aGUg
YmFzaWMgY2hyb21pdW0gcGxhdGZvcm0gZ2VzdHVyZSByZWNvZ25pemVyLgorCisgICAgICAgICog
dGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6SW5zcGVjdGFi
bGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rh
YmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Zmlyc3RUb3VjaFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6c2V0Rmlyc3RUb3VjaFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpmaXJzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNldExhc3RUb3VjaFRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpsYXN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bTo6ZWRnZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6dXBkYXRlVmFsdWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludDo6c2V0WCk6CisgICAgICAg
IChXZWJDb3JlOjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OnNldFkpOgorICAgICAgICAo
V2ViQ29yZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFibGVQbGF0Zm9ybVRv
dWNoUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEdlc3R1cmVSZWNvZ25pemVyOjpUZXN0
R2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdEdlc3R1cmVSZWNvZ25p
emVyOjpTZXRVcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlRl
YXJEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisKIDIwMTEtMDUtMjUgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHI4NzI1Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4
IDQ0ZTNhMGIyZTUxY2Q3ZmVkMmQwMzI5OTY1ZTExN2Q5N2Y3YjgwODguLmIyOWE3NmZmMmJmM2I5
Y2U3NDgxMzk2ZGQ0NDY2MDJlMjc4NTJjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICBdLAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0
X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCisgICAg
ICAgICAgICAndGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGll
c1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9HZXN0dXJlUmVjb2duaXplckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDg5NzQx
NjI2OTdhYTFmNTA4YTc1MTE4NWE5ODQzN2IyODdlNDYzZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bVRlc3Qu
Y3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEluc3BlY3Rh
YmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSA6IHB1YmxpYyBHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0oKQorICAgICAgICA6IFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQorICAg
IHsKKyAgICB9CisKKyAgICBpbnQgc2lnbmF0dXJlKFN0YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWdu
ZWQgaWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgdG91Y2hUeXBlLCBib29sIGhhbmRsZWQp
CisgICAgeworICAgICAgICByZXR1cm4gR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6c2lnbmF0
dXJlKGdlc3R1cmVTdGF0ZSwgaWQsIHRvdWNoVHlwZSwgaGFuZGxlZCk7CisgICAgfTsKKworICAg
IEludFBvaW50IGZpcnN0VG91Y2hQb3NpdGlvbigpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFBvc2l0
aW9uOyB9OworCisgICAgdm9pZCBzZXRGaXJzdFRvdWNoVGltZShkb3VibGUgdCkgeyBtX2ZpcnN0
VG91Y2hUaW1lID0gdDsgfTsKKyAgICBkb3VibGUgZmlyc3RUb3VjaFRpbWUoKSB7IHJldHVybiBt
X2ZpcnN0VG91Y2hUaW1lOyB9OworCisgICAgdm9pZCBzZXRMYXN0VG91Y2hUaW1lKGRvdWJsZSB0
KSB7IG1fbGFzdFRvdWNoVGltZSA9IHQ7IH07CisgICAgZG91YmxlIGxhc3RUb3VjaFRpbWUoKSB7
IHJldHVybiBtX2xhc3RUb3VjaFRpbWU7IH07CisKKyAgICBHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGVkZ2VGdW5jdGlvbihpbnQgaGFzaCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VkZ2VGdW5jdGlvbnMuZ2V0KGhhc2gpOworICAgIH07CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmFsdWVzKGRvdWJsZSBkLCBjb25zdCBQbGF0Zm9ybVRv
dWNoUG9pbnQgJnApCisgICAgeworICAgICAgICBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp1
cGRhdGVWYWx1ZXMoZCwgcCk7CisgICAgfTsKK307CisKK2NsYXNzIEJ1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoUG9pbnQgeworcHVibGlj
OgorICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCgpOworICAgIEJ1aWxkYWJsZVBsYXRm
b3JtVG91Y2hQb2ludChpbnQgeCwgaW50IHkpOworCisgICAgdm9pZCBzZXRYKGludCB4KQorICAg
IHsKKyAgICAgICAgbV9wb3Muc2V0WCh4KTsKKyAgICAgICAgbV9zY3JlZW5Qb3Muc2V0WCh4KTsK
KyAgICB9OworCisgICAgdm9pZCBzZXRZKGludCB5KQorICAgIHsKKyAgICAgICAgbV9wb3Muc2V0
WSh5KTsKKyAgICAgICAgbV9zY3JlZW5Qb3Muc2V0WSh5KTsKKyAgICB9OworfTsKKworQnVpbGRh
YmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQoKQorewor
ICAgIG1faWQgPSAwOworICAgIG1fc3RhdGUgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3Rh
dGlvbmFyeTsKKyAgICBtX3BvcyA9IEludFBvaW50Ojp6ZXJvKCk7CisgICAgbV9zY3JlZW5Qb3Mg
PSBJbnRQb2ludDo6emVybygpOworfTsKKworQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpC
dWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG1faWQgPSAw
OworICAgIG1fc3RhdGUgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKKyAg
ICBtX3BvcyA9IEludFBvaW50KHgsIHkpOworICAgIG1fc2NyZWVuUG9zID0gSW50UG9pbnQoeCwg
eSk7Cit9OworCisKK2NsYXNzIFRlc3RHZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyB0ZXN0aW5n
OjpUZXN0IHsKK3B1YmxpYzoKKyAgICBUZXN0R2VzdHVyZVJlY29nbml6ZXIoKSB7IH0KKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBU
ZWFyRG93bigpIHsgfQorfTsKKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaGFzaCkK
K3sKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gdGVzdEdtOworICAg
IGNvbnN0IHVuc2lnbmVkIEZpcnN0RmluZ2VyID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBTZWNv
bmRGaW5nZXIgPSAxOworCisgICAgQVNTRVJUX0VRKDEgKyAwLCB0ZXN0R20uc2lnbmF0dXJlKEdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Ok5vR2VzdHVyZSwgRmlyc3RGaW5nZXIsIFBsYXRmb3Jt
VG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9FUSgxICsg
KDggfCAxKSwgdGVzdEdtLnNpZ25hdHVyZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dl
c3R1cmUsIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgdHJ1
ZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoMHgxMDAwMCB8IDIpLCB0ZXN0R20uc2lnbmF0dXJl
KEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RG
aW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCwgZmFsc2UpKTsKKworICAgIEFT
U0VSVF9FUSgxICsgMHgyMDAwMCwgdGVzdEdtLnNpZ25hdHVyZShHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjpTY3JvbGwsIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVs
ZWFzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgweDIwMDAwIHwgMSksIHRlc3RH
bS5zaWduYXR1cmUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLCBGaXJzdEZpbmdl
ciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NF
UlRfRVEoMSArICgweDIwMDAwIHwgMHgxMCB8IDggfCAxKSwgdGVzdEdtLnNpZ25hdHVyZShHZXN0
dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwsIFNlY29uZEZpbmdlciwgUGxhdGZvcm1Ub3Vj
aFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVj
b2duaXplciwgc3RhdGUpCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtIHRlc3RHbTsKKworICAgIEFTU0VSVF9FUSgwLCB0ZXN0R20uc3RhdGUoKSk7CisgICAgdGVz
dEdtLnNldFN0YXRlKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWND
bGljayk7CisgICAgQVNTRVJUX0VRKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlBlbmRpbmdT
eW50aGV0aWNDbGljaywgdGVzdEdtLnN0YXRlKCkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVS
ZWNvZ25pemVyLCBpc0luc2lkZU1hbmhhdHRhblNxdWFyZSkKK3sKKyAgICBJbnNwZWN0YWJsZUdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBv
aW50IHA7CisKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS54KCkp
OworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisKKyAg
ICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoMTkuOTk5KTsKKyAgICBBU1NFUlRfVFJVRShnbS5p
c0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNldFgoMTkuOTk5KTsKKyAgICBw
LnNldFkoMC4wKTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShw
KSk7CisKKyAgICBwLnNldFgoMjAuMCk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX0ZB
TFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgwLjApOwor
ICAgIHAuc2V0WSgyMC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbnNpZGVNYW5oYXR0YW5T
cXVhcmUocCkpOworCisgICAgcC5zZXRYKC0yMC4wKTsKKyAgICBwLnNldFkoMC4wKTsKKyAgICBB
U1NFUlRfRkFMU0UoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRY
KDAuMCk7CisgICAgcC5zZXRZKC0yMC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbnNpZGVN
YW5oYXR0YW5TcXVhcmUocCkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBp
c0luQ2xpY2tUaW1lV2luZG93KQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bSBnbTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0
TGFzdFRvdWNoVGltZSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luQ2xpY2tUaW1lV2lu
ZG93KCkpOworCisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0
VG91Y2hUaW1lKDAuMDEwMDAxKTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luQ2xpY2tUaW1lV2lu
ZG93KCkpOworCisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0
VG91Y2hUaW1lKDAuOCAtIC4wMDAwMDAwMSk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbkNsaWNr
VGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20u
c2V0TGFzdFRvdWNoVGltZSgwLjgwMDAxKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbkNsaWNr
VGltZVdpbmRvdygpKTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgYWRkRWRn
ZUZ1bmN0aW9uKQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSBn
bTsKKyAgICBnbS5hZGRFZGdlRnVuY3Rpb24oR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Ny
b2xsLCAwLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQsIHRydWUsIChHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uKTQwOTYpOworCisg
ICAgQVNTRVJUX0VRKChHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlVHJhbnNpdGlv
bkZ1bmN0aW9uKTQwOTYsIGdtLmVkZ2VGdW5jdGlvbihnbS5zaWduYXR1cmUoR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bTo6U2Nyb2xsLCAwLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFz
ZWQsIHRydWUpKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIHVwZGF0ZVZh
bHVlcykKK3sKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0gZ207CisK
KyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEo
MC4wLCBnbS5sYXN0VG91Y2hUaW1lKCkpOworICAgIEFTU0VSVF9FUShHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpOb0dlc3R1cmUsIGdtLnN0YXRlKCkpOworCisgICAgQnVpbGRhYmxlUGxhdGZv
cm1Ub3VjaFBvaW50IHAxKDEwLCAxMSk7CisgICAgZ20udXBkYXRlVmFsdWVzKDEuMSwgcDEpOwor
CisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS54KCkpOworICAgIEFT
U0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgpKTsKKyAgICBBU1NFUlRfRVEo
MS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5sYXN0VG91
Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgpKTsKKworICAgIEJ1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludCBwMigxMywgMTQpOworICAgIGdtLnNldFN0YXRlKEdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW06OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAgZ20udXBkYXRlVmFsdWVzKDIu
MCwgcDIpOworCisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS54KCkp
OworICAgIEFTU0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgpKTsKKyAgICBB
U1NFUlRfRVEoMS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoMi4wIC0g
MS4xLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgpKTsKKworICAgIEJ1
aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMygyMywgMzQpOworICAgIGdtLnNldFN0YXRlKEdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Ok5vR2VzdHVyZSk7CisgICAgZ20udXBkYXRlVmFsdWVz
KDMuMCwgcDMpOworCisgICAgQVNTRVJUX0VRKDIzLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS54
KCkpOworICAgIEFTU0VSVF9FUSgzNCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgpKTsKKyAg
ICBBU1NFUlRfRVEoMy4wLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoMC4w
LCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95182</attachid>
            <date>2011-05-27 09:17:44 -0700</date>
            <delta_ts>2011-06-01 15:19:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110527121258.patch</filename>
            <type>text/plain</type>
            <size>45838</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczMjIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwN2I4NmRlOTQwNWI1MmJhY2UwOWUz
YWQwYzVmZmU1Y2VlNjVmNWU5Li4wZWFjZGQ0MmRhZTVmNTE2OGQ3M2M0ZDExZmFhMzA0OGYyYzI2
OGQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMjYgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKyAgICAgICAgCisgICAgICAgIFNob3dzIHRoYXQgdGhl
IGJhc2ljIENocm9taXVtIGdlc3R1cmUgbWFuYWdlciBjYW4gY29ycmVjdGx5IGNvbnZlcnQgYSB0
b3VjaAorICAgICAgICBldmVudCBzZXF1ZW5jZSBpbnRvIGEgc2VxdWVuY2Ugb2Ygc3ludGhldGlj
IG1vdXNlIGV2ZW50cyBmb3IgY2xpY2tpbmcgYW5kCisgICAgICAgIHNjcm9sbGluZy4KKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNr
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3Rv
dWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTEtMDUtMjUgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3Vj
aC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOGRlYmFi
OTRmMTg5MGM4ZDdiYTlmNzA1NGUzNjIxZmI1OGY0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJl
IGdlbmVyYXRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1h
bmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ1MDdlNGEyOWFkNzVhYjIyZjMwZjg3NDE0OTc1OWE0ZjIyZDJlN2UKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0
bWwKQEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7Cisg
IGhlaWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IGJsdWU7Cit9Cis8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKwor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK3ZhciBjbGlja0V2ZW50c1JlY2VpdmVkID0gMDsKK3ZhciBleHBlY3RlZE1vdXNlRXZl
bnRzID0gNDsKK3ZhciB0b3VjaEV2ZW50c1JlY2VpdmVkID0gMDsKK3ZhciBtb3VzZUV2ZW50c1Jl
Y2VpdmVkID0gMDsKK3ZhciBldmVudFR5cGVzID0gWyAnbW91c2Vtb3ZlJywgJ21vdXNlZG93bics
ICdtb3VzZXVwJywgJ2NsaWNrJyBdOworCitmdW5jdGlvbiBnZXN0dXJlRXZlbnRDYWxsYmFjayhl
dmVudCkKK3sKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsIGV2ZW50VHlwZXNbbW91c2VFdmVudHNSZWNlaXZl
ZF0pOworICAgICAgICBzaG91bGRCZSgnZXZlbnQuY2xpZW50WCcsICcxMCcpOworICAgICAgICBz
aG91bGRCZSgnZXZlbnQuY2xpZW50WScsICcxMicpOworICAgICAgICBzaG91bGRCZSgiZXZlbnQu
c2hpZnRLZXkiLCAidHJ1ZSIpOworICAgICAgICBzaG91bGRCZSgiZXZlbnQuYWx0S2V5IiwgInRy
dWUiKTsKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmN0cmxLZXkiLCAiZmFsc2UiKTsKKyAgICAg
ICAgc2hvdWxkQmUoImV2ZW50Lm1ldGFLZXkiLCAiZmFsc2UiKTsKKyAgICAgICAgbW91c2VFdmVu
dHNSZWNlaXZlZCsrOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKGV2ZW50LnR5cGUpOwor
ICAgICAgICBkZWJ1ZyhldmVudC5jbGllbnRYKTsKKyAgICAgICAgZGVidWcoZXZlbnQuY2xpZW50
WSk7CisgICAgfQorfQorCisvLyBCZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBhIGdlc3R1cmUgcmVj
b2duaXplciwgd2Ugc2VuZCBhIGtleSBwcmVzcworLy8gZXZlbnQgdG8gZW5kIHRoZSB0ZXN0IHdp
dGhvdXQgdGVtcG9yYWwgZmxha2luZXNzLgorZnVuY3Rpb24gcXVpdEtleVRvRW5kVGVzdChldmVu
dCkgeworICAgIGVuZFRlc3QoKTsKK30KKworLy8gTG9nIHRoYXQgd2Ugc3RpbGwgZ290IHRoZSB0
b3VjaCBldmVudHMuCitmdW5jdGlvbiB0b3VjaEV2ZW50Q2FsbGJhY2soZXZlbnQpIHsKKyAgICB0
b3VjaEV2ZW50c1JlY2VpdmVkKys7CisgICAgZGVidWcoJ2hhdmUgcmVjZWl2ZWQ6ICcgKyB0b3Vj
aEV2ZW50c1JlY2VpdmVkICsgJyB0b3VjaCBldmVudHMnKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworZnVuY3Rpb24gc2luZ2xlVG91Y2hTZXF1ZW5jZSgpCit7CisgICAgZXZlbnRTZW5kZXIuY2xl
YXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQoMTAsIDEyKTsK
KyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBJbnNlcnQgc29tZSBkZWxh
eS4gTkI6IHRoaXMgdmFsdWUgZGVwZW5kcyBvbiBtaW5DbGlja0Rvd25UaW1lLAorICAgIC8vIG1h
eENsaWNrRG93blRpbWUgZnJvbSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcAorICAgIGV2
ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDIwKTsKKyAgICBldmVudFNlbmRlci5zZXRUb3VjaE1vZGlm
aWVyKCJzaGlmdCIsIHRydWUpOworICAgIGV2ZW50U2VuZGVyLnNldFRvdWNoTW9kaWZpZXIoImFs
dCIsIHRydWUpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAg
ZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAg
aWYgKG1vdXNlRXZlbnRzUmVjZWl2ZWQgPCBleHBlY3RlZE1vdXNlRXZlbnRzKSB7CisgICAgICAg
IGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0u
Jyk7CisgICAgfQorICAgIC8vIEJhaWwuCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
KyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB2YXIgZGl2ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgZGl2LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNlZG93biIsIGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZ2VzdHVyZUV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsK
KyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIGdlc3R1cmVFdmVudENhbGxiYWNr
LCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGdlc3R1cmVF
dmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5
ZG93biIsIHF1aXRLZXlUb0VuZFRlc3QsIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5l
cigidG91Y2hzdGFydCIsIHRvdWNoRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRF
dmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKyAg
ICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZh
bHNlKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIGlmICh3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgYmFzaWMgc2luZ2xl
IHRvdWNoIGdlc3R1cmUgZ2VuZXJhdGlvbi4iKTsKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNs
ZWFyVG91Y2hQb2ludHMpIHsKKyAgICAgICAgICAgIHNpbmdsZVRvdWNoU2VxdWVuY2UoKTsKKyAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDEwKTsKKyAgICAgICAgICAgIGV2ZW50
U2VuZGVyLmtleURvd24oJyAnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVuZFRl
c3QoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3Qg
cmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUYXAgb24gdGhlIGJsdWUgcmVjdCB0byBsb2cuIikK
KyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmJiNjZhNWUxMDgwYTliMGNhYmNmMTNiOWFmNDM0YWQy
ZDg4YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMg
dGVzdHMgc2Nyb2xsIGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJl
IGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK0dlc3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBi
cm9rZW4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LXNjcm9sbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMTc5MzMyNDdiMWY2NDRkODA1NzQ0YmU2M2I0NmVj
MDJlYTg1ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91
Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qt
ZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRh
cmdldCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IHJl
bGF0aXZlOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRo
OiAxMDAlOworICBoZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13
cmFwOiBicmVhay13b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNj
cm9sbDsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBw
eDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBw
eDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhl
aWdodDogMTAwcHg7CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJn
aW46IDBweDsKK30KKwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHkgc3R5bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0i
dG91Y2h0YXJnZXQiPgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9
IjAiIGNlbGxzcGFjaW5nPSIwcHgiPgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0i
cmVkYm94Ij48L2Rpdj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2
PjwvdGQ+CisgICAgICA8L3RyPgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3Jl
ZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+
PC90ZD4KKyAgICAgIDwvdHI+CisgICAgPC90YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNj
cm9sbHNUb3RhbCA9IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91
bnRYID0gWyc5MCcsICc5MCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzAnLCAnOTUnXTsKKwor
ZnVuY3Rpb24gY2hlY2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50
WVtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxM
ZWZ0Jywgc2Nyb2xsQW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2Nyb2xsc09j
Y3VycmVkKys7CisgICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNj
cm9sbHNUb3RhbCkgeworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2Vk
LgorICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiBmaW5nZXJVcChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3Jv
bGxUb3AgKyAnLCAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1
cm4gdHJ1ZTsgIC8vIFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBm
aXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOwor
ICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRU
b3VjaFBvaW50KDk1LCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAg
Ly8gU2Nyb2xsIHRoZSBkaXYgdG8gdGhlIGxlZnQuCisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91
Y2hQb2ludCgwLCA1LCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBl
dmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVu
ZCgpOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7
Cit9CisKK2Z1bmN0aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygi
c2Vjb25kIGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7Cisg
ICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCgxMiwgOTcpOworICAgIGV2ZW50U2VuZGVyLnRv
dWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUgcmVjdGFuZ2xlIGRvd24uCisgICAgZXZl
bnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAxMiwgMik7CisgICAgZXZlbnRTZW5kZXIudG91
Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBl
dmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNo
ZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7Cisg
ICAgZGVidWcoJ0dlc3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9y
bSBvciBicm9rZW4nKTsKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3Vj
Y2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIG1vdmluZ2RpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKworICAgIGlmICh3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgc2Nyb2xsIGdl
c3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gJyArCisgICAgICAgICAgICAnU3F1
YXJlIGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MnKTsKKworICAgICAgICBpZiAoZXZlbnRTZW5k
ZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2Uo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZS4g
IFRvdWNoIHNjcm9sbCB0aGUgcmVkIHJlY3QgdG8gbG9nLiIpOworICAgICAgICBtb3ZpbmdkaXYu
YWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFsc2UpOworICAgIH0KK30K
Kzwvc2NyaXB0PgorCisKKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGlj
ay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50
cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjA4
NDc4MzVlYjg1YjI2MDFmZmVlNGI0Y2ZhODAzOGUxNTIzMmYyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2Vz
dHVyZS1jbGljay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzOSBAQAorVGhpcyB0ZXN0cyBiYXNp
YyBzaW5nbGUgdG91Y2ggZ2VzdHVyZSBnZW5lcmF0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworaGF2ZSByZWNlaXZlZDogMSB0b3VjaCBldmVudHMKK2hhdmUgcmVjZWl2ZWQ6
IDIgdG91Y2ggZXZlbnRzCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNlbW92ZSIKK1BBU1MgZXZl
bnQuY2xpZW50WCBpcyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlzIDEyCitQQVNTIGV2ZW50LnNo
aWZ0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuYWx0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuY3Ry
bEtleSBpcyBmYWxzZQorUEFTUyBldmVudC5tZXRhS2V5IGlzIGZhbHNlCitQQVNTIGV2ZW50LnR5
cGUgaXMgIm1vdXNlZG93biIKK1BBU1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFTUyBldmVudC5j
bGllbnRZIGlzIDEyCitQQVNTIGV2ZW50LnNoaWZ0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuYWx0
S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuY3RybEtleSBpcyBmYWxzZQorUEFTUyBldmVudC5tZXRh
S2V5IGlzIGZhbHNlCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNldXAiCitQQVNTIGV2ZW50LmNs
aWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtl
eSBpcyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkg
aXMgZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50eXBlIGlz
ICJjbGljayIKK1BBU1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlz
IDEyCitQQVNTIGV2ZW50LnNoaWZ0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuYWx0S2V5IGlzIHRy
dWUKK1BBU1MgZXZlbnQuY3RybEtleSBpcyBmYWxzZQorUEFTUyBldmVudC5tZXRhS2V5IGlzIGZh
bHNlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91
Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkxZjk4YmRiMGI1ZGU3YTIyMjkxODZkZmRlYzg2MDZhZjBmNTc4
NDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxNSBAQAorVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBnZW5lcmF0aW9uIGZyb20gdG91Y2gg
ZXZlbnRzLiBTcXVhcmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcworCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9w
IGlzIDAKK1BBU1MgbW92aW5nZGl2LnNjcm9sbExlZnQgaXMgOTAKK3NlY29uZCBnZXN0dXJlCitQ
QVNTIG1vdmluZ2Rpdi5zY3JvbGxUb3AgaXMgOTUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbExlZnQg
aXMgOTAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNzZkZGQwMDVhZDAzOTk5OTdmMzQ3ZWI4MmI3MzYxOWZlN2NmMDdlYy4u
YWM1OTVlMTdhMTc1NjA5ZmNjNzQ1NTAzNGE3YzZkZDQ0MWEyNzUwZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDU4IEBACisyMDExLTA1LTI2ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbY2hyb21pdW1dIEFkZCBhIGJhc2ljIGdlc3R1cmUgcmVjb2duaXplciB0byB0aGUgQ2hyb21p
dW0gcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU0NDE3CisKKyAgICAgICAgQWRkcyBhIGJhc2ljIGdlc3R1cmUgcmVjb2duaXplciB0byB0
aGUgQ2hyb21pdW0gcGxhdGZvcm0uIEFkZHMgYW4gZW50cnkKKyAgICAgICAgcG9pbnQgdG8gdGhl
IEdlc3R1cmVSZWNvZ25pemVyIHRvIHJlc2V0IGFueSBpbnRlcm5hbCBzdGF0ZSBvbiBhIHBhZ2Ug
cmVzZXQuCisgICAgICAgIFJlc2V0dGluZyB0aGUgZ2VzdHVyZSByZWNvZ25pemVyIG9uIHBhZ2Ug
bG9hZCBpcyBuZWNlc2FyeSBmb3IgcmVsaWFibGUKKyAgICAgICAgbGF5b3V0IHRlc3QgZXhlY3V0
aW9uIGFuZCBpbXByb3ZlcyBnZXN0dXJlIHJlY29nbml6ZXIgb3BlcmF0aW9uYWwKKyAgICAgICAg
cm9idXN0bmVzcy4KKworICAgICAgICBBZGRlZCBhbiBhZGRpdGlvbmFsIGNvbnN0cnVjdG9yIHRv
IHBlcm1pdCBidWlsZGluZyBhIHN5bnRoZXRpYworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQu
CisKKyAgICAgICAgU21hbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUgUGxhdGZvcm1HZXN0dXJlUmVj
b2duaXplciBhcyByZXF1aXJlZCB0bworICAgICAgICBpbXBsZW1lbnQgdGhlIHNpbXBsZSBDaHJv
bWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJlY29nbml6ZXIuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2suaHRtbAorCisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9y
bUdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hl
ZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06On5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmFkZEVkZ2VGdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjppc0lu
Q2xpY2tUaW1lV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW06OmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OmRpc3BhdGNoU3ludGhldGljQ2xpY2spOgorICAgICAgICAo
V2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpwcm9jZXNzVG91Y2hFdmVudEZv
ckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6
c2Nyb2xsVmlhVG91Y2hNb3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6dXBkYXRlVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaERvd24p
OgorICAgICAgICAoV2ViQ29yZTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Y2xpY2spOgor
ICAgICAgICAoV2ViQ29yZTo6aXNDbGlja09yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6Omlu
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpQbGF0
Zm9ybUdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVy
ZVJlY29nbml6ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaC4KKyAgICAg
ICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnNldFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OnN0YXRlKToKKwogMjAxMS0w
NS0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3NjE1OTkzMjE0ZmU0MWZmNDA1
NGQxNjMxZWI1N2QzZTIxMjQ4ZTNhLi5kZjExZjZiYjY1ZDBmZGY4NzViZGJhNDg5ZjZjZWQ1Mzc3
YjI0YzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NjcsNyArNzY3LDYgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL05v
dEltcGxlbWVudGVkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2
ZW50LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oJywKQEAgLTM4MDgsNiAr
MzgwNyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xs
Vmlldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9s
bFZpZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xs
Vmlld0NsaWVudC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVj
b2duaXplckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9LZXlDb2RlQ29udmVyc2lvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9L
ZXlDb2RlQ29udmVyc2lvbkd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0tleWJvYXJkQ29kZXMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXgg
NzZlNjJmNmNiZjg3ODE1YmNlN2FmNDUwYzAxZmRiNWE5MTkzM2ZkNy4uYTgzZDBhMGY5NTNmMTZk
Y2E0NDdhNWEwNDgwMjlkMjE5ZGU5NGEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcApAQCAtMzIzNSw2ICszMjM1LDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3Vj
aEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAKICAgICByZXR1cm4gZGVm
YXVsdFByZXZlbnRlZDsKIH0KKworI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCit2b2lk
IEV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcigpCit7CisgICAgaWYgKG1fZ2Vz
dHVyZVJlY29nbml6ZXIpCisgICAgICAgIG1fZ2VzdHVyZVJlY29nbml6ZXItPnJlc2V0U3RhdGUo
KTsKK30KKyNlbmRpZgorCisKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAppbmRleCBkYzQzZTNkODI5MjRmYzgzYTVhYjk1MDVjZjBmNDlkZmIwMzYwMWJiLi43NDVlZGRh
NGQyZTBkZTFjM2VlNWQxMjkwMTVjMTc3YWFmNWQ4NTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKQEAgLTE2Niw2ICsxNjYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlR2Vz
dHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisgICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25pemVy
KCk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgIGJvb2wgc2VuZENv
bnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBzZW5k
Q29udGV4dE1lbnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IDU4ZjVjM2YwOWQxNWEzYTY5ZTNhNDE4ZDc0OTAzYTg5ZjI0MzQzN2IuLmIzNjU3Njg3YzdkYjc4
MjMwYTMzMDU0N2NhNGY3Njc5OWJkNzE4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
QEAgLTIzMyw2ICsyMzMsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnJlc2V0KCkKICAgICBtX2lzVmlz
dWFsbHlOb25FbXB0eSA9IGZhbHNlOwogICAgIG1fZmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Q2FsbGJhY2tQZW5kaW5nID0gdHJ1ZTsKICAgICBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNo
b3IgPSAwOworCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKKyAgICBmcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS0+cmVzZXRHZXN0dXJlUmVjb2duaXplcigpOworI2VuZGlmCiB9CiAKIGJv
b2wgRnJhbWVWaWV3Ojppc0ZyYW1lVmlldygpIGNvbnN0IApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDgwMjU4M2YyYTA1
NTNiYjdjYTczYzc4NWVkZjVhZjhhYzAxYjBhNTAuLmNkY2I3MDdiM2NhY2U2N2JjYTk2ZjI1YWUz
N2U2MDk5ZjNiZjljY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTU3LDYgKzU3LDkgQEAgcHVibGljOgogICAgIC8v
IHNwZWNpZmllcyBpZiB0aGUgfGV2ZW50fCB3YXMgYWN0dWFsbHkgaGFuZGxlZCBieSB8c291cmNl
fCAoYnkgdGhlIEphdmFTY3JpcHQpCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBy
ZXN1bHRlZCBpbiBmaXJpbmcgYSBzeW50aGV0aWMgZXZlbnQuCiAgICAgdmlydHVhbCBib29sIHBy
b2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmLCBFdmVu
dEhhbmRsZXIqLCBib29sIGhhbmRsZWQpID0gMDsKKworICAgIC8vIENsZWFycyB0aGUgR2VzdHVy
ZVJlY29nbml6ZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuCisgICAgdmlydHVhbCB2b2lkIHJlc2V0
U3RhdGUoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCmluZGV4IDM3NjU1NTMzYmQ0OGUzMWY1
NTFjZWQyZDMzMDQ0YTliZTg4N2UwMGMuLmE2YjdjNTA3MmZkY2MzZDQ3MjRiZDM4NDQxZjI2ZmFh
MGVkY2Q2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hl
ZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVu
dC5oCkBAIC0xMDYsNiArMTA2LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEludFBvaW50IHBvc2l0aW9u
LCBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVksIGZs
b2F0IHdoZWVsVGlja3NYLCBmbG9hdCB3aGVlbFRpY2tzWSwgUGxhdGZvcm1XaGVlbEV2ZW50R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgaXNBY2NlcHRlZCwgYm9vbCBzaGlmdEtleSwgYm9v
bCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBtZXRhS2V5KQorICAgICAgICAgICAgOiBtX3Bv
c2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBv
c2l0aW9uKQorICAgICAgICAgICAgLCBtX2RlbHRhWChkZWx0YVgpCisgICAgICAgICAgICAsIG1f
ZGVsdGFZKGRlbHRhWSkKKyAgICAgICAgICAgICwgbV93aGVlbFRpY2tzWCh3aGVlbFRpY2tzWCkK
KyAgICAgICAgICAgICwgbV93aGVlbFRpY2tzWSh3aGVlbFRpY2tzWSkKKyAgICAgICAgICAgICwg
bV9ncmFudWxhcml0eShncmFudWxhcml0eSkKKyAgICAgICAgICAgICwgbV9pc0FjY2VwdGVkKGlz
QWNjZXB0ZWQpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hpZnRLZXkpCisgICAgICAgICAg
ICAsIG1fY3RybEtleShjdHJsS2V5KQorICAgICAgICAgICAgLCBtX2FsdEtleShhbHRLZXkpCisg
ICAgICAgICAgICAsIG1fbWV0YUtleShtZXRhS2V5KQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAg
ICAgICAgICwgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKGZhbHNlKQorICAgICAgICAgICAg
LCBtX3BoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKKyAgICAgICAgICAgICwgbV9t
b21lbnR1bVBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkKKyAgICAgICAgICAgICwg
bV90aW1lc3RhbXAoMCkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICBj
b25zdCBJbnRQb2ludCYgcG9zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfSAvLyBQbGF0
Zm9ybVdpbmRvdyBjb29yZGluYXRlcy4KICAgICAgICAgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBv
cygpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0gLy8gU2NyZWVuIGNvb3JkaW5h
dGVzLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0
dXJlUmVjb2duaXplckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNmI4N2YzZmVk
OGY3ZWYwZGQ4NjVkYzA3MjljNGEzY2MwM2NkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcApA
QCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgY2xpY2soR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bSosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wg
aXNDbGlja09yU2Nyb2xsKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIGluU2Nyb2xsKEdlc3R1cmVSZWNvZ25pemVyQ2hy
b21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIHJlc2V0KEdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0
YXRpYyBib29sIHRvdWNoRG93bihHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtlIHRoZXNlIGNvbmZpZ3VyYWJsZSBw
cm9ncmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhpbXVtVG91Y2hEb3duRHVy
YXRpb25JblNlY29uZHNGb3JDbGljayA9IDAuODsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11
bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sgPSAwLjAxOworc3RhdGljIGNvbnN0
IGludCBtYXhpbXVtVG91Y2hNb3ZlSW5QaXhlbHNGb3JDbGljayA9IDIwOworCitHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKKyAgICA6IG1fZmly
c3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9zdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVt
OjpOb0dlc3R1cmUpCisgICAgLCBtX2xhc3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9ldmVudEhh
bmRsZXIoMCkKKyAgICAsIG1fY3RybEtleShmYWxzZSkKKyAgICAsIG1fYWx0S2V5KGZhbHNlKQor
ICAgICwgbV9zaGlmdEtleShmYWxzZSkKKyAgICAsIG1fbWV0YUtleShmYWxzZSkKK3sKK30KKwor
dm9pZCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpyZXNldFN0YXRlKCkKK3sKKyAgICBtX2Zp
cnN0VG91Y2hUaW1lID0gMC4wOworICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtOjpOb0dlc3R1cmU7CisgICAgbV9sYXN0VG91Y2hUaW1lID0gMC4wOworICAgIG1fZXZlbnRI
YW5kbGVyID0gMDsKK30KKworR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6fkdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0oKQoreworfQorCit2b2lkIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06
OmFkZEVkZ2VGdW5jdGlvbihTdGF0ZSBzdGF0ZSwgdW5zaWduZWQgZmluZ2VySWQsIFBsYXRmb3Jt
VG91Y2hQb2ludDo6U3RhdGUgdG91Y2hUeXBlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlw
dCwgR2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbiBmKQoreworICAgIG1fZWRnZUZ1bmN0aW9ucy5h
ZGQoc2lnbmF0dXJlKHN0YXRlLCBmaW5nZXJJZCwgdG91Y2hUeXBlLCB0b3VjaEhhbmRsZWRCeUph
dmFTY3JpcHQpLCBmKTsKK30KKworYm9vbCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjppc0lu
Q2xpY2tUaW1lV2luZG93KCkKK3sKKyAgICBkb3VibGUgZHVyYXRpb24obV9sYXN0VG91Y2hUaW1l
IC0gbV9maXJzdFRvdWNoVGltZSk7CisgICAgcmV0dXJuIGR1cmF0aW9uID49IG1pbmltdW1Ub3Vj
aERvd25EdXJhdGlvbkluU2Vjb25kc0ZvckNsaWNrICYmIGR1cmF0aW9uIDwgbWF4aW11bVRvdWNo
RG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2s7Cit9CisKK2Jvb2wgR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3VjaFBv
aW50JiBwb2ludCkKK3sKKyAgICBpbnQgbWFuaGF0dGFuRGlzdGFuY2UgPSBhYnMocG9pbnQucG9z
KCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKSArIGFicyhwb2ludC5wb3MoKS55KCkg
LSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5j
ZSA8IG1heGltdW1Ub3VjaE1vdmVJblBpeGVsc0ZvckNsaWNrOworfQorCit2b2lkIEdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW06OmRpc3BhdGNoU3ludGhldGljQ2xpY2soY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlTW92
ZShwb2ludC5wb3MoKSwgcG9pbnQuc2NyZWVuUG9zKCksIE5vQnV0dG9uLCBNb3VzZUV2ZW50TW92
ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgbV9zaGlmdEtleSwgbV9jdHJsS2V5LCBtX2FsdEtleSwg
bV9tZXRhS2V5LCBtX2xhc3RUb3VjaFRpbWUpOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtl
TW91c2VEb3duKHBvaW50LnBvcygpLCBwb2ludC5zY3JlZW5Qb3MoKSwgTGVmdEJ1dHRvbiwgTW91
c2VFdmVudFByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgbV9zaGlmdEtleSwgbV9jdHJsS2V5
LCBtX2FsdEtleSwgbV9tZXRhS2V5LCBtX2xhc3RUb3VjaFRpbWUpOworICAgIFBsYXRmb3JtTW91
c2VFdmVudCBmYWtlTW91c2VVcChwb2ludC5wb3MoKSwgcG9pbnQuc2NyZWVuUG9zKCksIExlZnRC
dXR0b24sIE1vdXNlRXZlbnRSZWxlYXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBtX3NoaWZ0S2V5
LCBtX2N0cmxLZXksIG1fYWx0S2V5LCBtX21ldGFLZXksIG1fbGFzdFRvdWNoVGltZSk7CisKKyAg
ICBtX2V2ZW50SGFuZGxlci0+bW91c2VNb3ZlZChmYWtlTW91c2VNb3ZlKTsKKyAgICBtX2V2ZW50
SGFuZGxlci0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VNb3VzZURvd24pOworICAgIG1fZXZl
bnRIYW5kbGVyLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChmYWtlTW91c2VVcCk7Cit9CisKK3Zv
aWQgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCit7CisgICAgY29uc3Qg
dW5zaWduZWQgRmlyc3RGaW5nZXIgPSAwOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6
U3RhdGUgUmVsZWFzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQ7CisgICAg
Y29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBQcmVzc2VkID0gUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaFByZXNzZWQ7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBN
b3ZlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZDsKKyAgICBjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlN0YXRlIFN0YXRpb25hcnkgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
U3RhdGlvbmFyeTsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIENhbmNlbGxl
ZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQ7CisKKyAgICBhZGRFZGdlRnVu
Y3Rpb24oTm9HZXN0dXJlLCBGaXJzdEZpbmdlciwgUHJlc3NlZCwgZmFsc2UsIHRvdWNoRG93bik7
CisgICAgYWRkRWRnZUZ1bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIs
IENhbmNlbGxlZCwgZmFsc2UsIHJlc2V0KTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5
bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgUmVsZWFzZWQsIGZhbHNlLCBjbGljayk7CisgICAg
YWRkRWRnZUZ1bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIsIE1vdmVk
LCBmYWxzZSwgaXNDbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5
bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgU3RhdGlvbmFyeSwgZmFsc2UsIGlzQ2xpY2tPclNj
cm9sbCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIE1vdmVkLCBm
YWxzZSwgaW5TY3JvbGwpOworICAgIGFkZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2Vy
LCBSZWxlYXNlZCwgZmFsc2UsIHJlc2V0KTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oU2Nyb2xsLCBG
aXJzdEZpbmdlciwgQ2FuY2VsbGVkLCBmYWxzZSwgcmVzZXQpOworfQorCitib29sIEdlc3R1cmVS
ZWNvZ25pemVyQ2hyb21pdW06OnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25zdCBQbGF0
Zm9ybVRvdWNoRXZlbnQmIGV2ZW50LCBFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlciwgYm9vbCBo
YW5kbGVkKQoreworICAgIG1fZXZlbnRIYW5kbGVyID0gZXZlbnRIYW5kbGVyOworICAgIG1fY3Ry
bEtleSA9IGV2ZW50LmN0cmxLZXkoKTsKKyAgICBtX2FsdEtleSA9IGV2ZW50LmFsdEtleSgpOwor
ICAgIG1fc2hpZnRLZXkgPSBldmVudC5zaGlmdEtleSgpOworICAgIG1fbWV0YUtleSA9IGV2ZW50
Lm1ldGFLZXkoKTsKKworICAgIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybVRvdWNoUG9pbnQ+JiBwb2lu
dHMgPSBldmVudC50b3VjaFBvaW50cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
b2ludHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBw
ID0gcG9pbnRzW2ldOworICAgICAgICB1cGRhdGVWYWx1ZXMoZXZlbnQudGltZXN0YW1wKCksIHAp
OworCisgICAgICAgIGlmIChHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGVmID0gbV9lZGdlRnVu
Y3Rpb25zLmdldChzaWduYXR1cmUobV9zdGF0ZSwgcC5pZCgpLCBwLnN0YXRlKCksIGhhbmRsZWQp
KSkKKyAgICAgICAgICAgIGhhbmRsZWQgPSAoKmVmKSh0aGlzLCBwKTsKKyAgICB9CisgICAgcmV0
dXJuIGhhbmRsZWQ7Cit9CisKK3ZvaWQgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6c2Nyb2xs
VmlhVG91Y2hNb3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0b3VjaFBvaW50KQorewor
ICAgIGZsb2F0IGRlbHRhWCh0b3VjaFBvaW50LnBvcygpLngoKSAtIG1fZmlyc3RUb3VjaFBvc2l0
aW9uLngoKSk7CisgICAgZmxvYXQgZGVsdGFZKHRvdWNoUG9pbnQucG9zKCkueSgpIC0gbV9maXJz
dFRvdWNoUG9zaXRpb24ueSgpKTsKKworICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRvIGdlc3R1cmUg
ZXZlbnRzIHdoZW4gdGhleSBoYW5kbGUgc3ViZnJhbWVzLgorICAgIFBsYXRmb3JtV2hlZWxFdmVu
dCBzeW50aGV0aWNXaGVlbEV2ZW50KHRvdWNoUG9pbnQucG9zKCksIHRvdWNoUG9pbnQuc2NyZWVu
UG9zKCksIGRlbHRhWCwgZGVsdGFZLCBkZWx0YVggLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIwKSwg
ZGVsdGFZIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDEyMCksIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50
LCAvKiBpc0FjY2VwdGVkICovIGZhbHNlLCBtX3NoaWZ0S2V5LCBtX2N0cmxLZXksIG1fYWx0S2V5
LCBtX21ldGFLZXkpOworICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVXaGVlbEV2ZW50KHN5bnRo
ZXRpY1doZWVsRXZlbnQpOworICAgIG1fZmlyc3RUb3VjaFBvc2l0aW9uID0gdG91Y2hQb2ludC5w
b3MoKTsKK30KKwordm9pZCBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjp1cGRhdGVWYWx1ZXMo
Y29uc3QgZG91YmxlIHRvdWNoVGltZSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0b3VjaFBv
aW50KQoreworICAgIG1fbGFzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsKKyAgICBpZiAoc3RhdGUo
KSA9PSBOb0dlc3R1cmUpIHsKKyAgICAgICAgbV9maXJzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsK
KyAgICAgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworICAgIH0K
K30KKworLy8gQnVpbGRzIGEgc2lnbmF0dXJlLiBTaWduYXR1cmVzIGFyZSBhc3NlbWJsZWQgYnkg
am9pbmluZyB0b2dldGhlciBtdWx0aXBsZSBiaXRzLgorLy8gMSBMU0IgYml0IGZvciBzaWduYXR1
cmUgPj0gMQorLy8gMyBiaXRzIGZvciB0aGUgfHRvdWNoVHlwZXwuCisvLyAxIGJpdCBmb3IgfGhh
bmRsZWR8CisvLyAxMiBiaXRzIGZvciB8aWR8CisvLyAxNSBiaXRzIGZvciB0aGUgfGdlc3R1cmVT
dGF0ZXwuCit1bnNpZ25lZCBpbnQgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6c2lnbmF0dXJl
KFN0YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWduZWQgaWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3Rh
dGUgdG91Y2hUeXBlLCBib29sIGhhbmRsZWQpCit7CisgICAgQVNTRVJUKChpZCAmIDB4ZmZmKSA9
PSBpZCk7CisgICAgcmV0dXJuIDEgKyAoKHRvdWNoVHlwZSAmIDB4NykgPDwgMSB8IChoYW5kbGVk
ID8gMSA8PCA0IDogMCkgfCAoKGlkICYgMHhmZmYpIDw8IDUgKSB8IChnZXN0dXJlU3RhdGUgPDwg
MTcpKTsKK30KKworc3RhdGljIGJvb2wgdG91Y2hEb3duKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0qIGdlc3R1cmVSZWNvZ25pemVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAg
IGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQ
ZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCByZXNl
dChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50JikKK3sKKyAgICBnZXN0dXJlUmVjb2duaXplci0+cmVzZXRTdGF0ZSgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgY2xpY2soR2VzdHVyZVJlY29n
bml6ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2lu
dCYgcG9pbnQpCit7CisgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyLT5pc0luQ2xpY2tUaW1lV2lu
ZG93KCkgJiYgZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHBvaW50
KSkgeworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+c2V0U3RhdGUoR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlKTsKKyAgICAgICAgZ2VzdHVyZVJlY29nbml6ZXItPmRpc3Bh
dGNoU3ludGhldGljQ2xpY2socG9pbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc2V0KGdlc3R1cmVSZWNvZ25pemVyLCBwb2ludCk7Cit9CisKK3N0YXRpYyBi
b29sIGlzQ2xpY2tPclNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0dXJlUmVj
b2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoZ2Vz
dHVyZVJlY29nbml6ZXItPmlzSW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVjb2duaXpl
ci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNv
Z25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQZW5kaW5nU3ludGhl
dGljQ2xpY2spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHBvaW50
LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkICYmICFnZXN0dXJlUmVj
b2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1
cmVSZWNvZ25pemVyLT5zY3JvbGxWaWFUb3VjaE1vdGlvbihwb2ludCk7CisgICAgICAgIGdlc3R1
cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpTY3JvbGwp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgYm9vbCBpblNjcm9sbChHZXN0dXJlUmVjb2duaXplckNocm9taXVtKiBnZXN0dXJlUmVj
b2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBnZXN0dXJl
UmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocG9pbnQpOworICAgIHJldHVybiB0cnVl
OworfQorCitQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI+IFBsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgpCit7CisgICAgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bSogZ2VzdHVyZVJlY29nbml6ZXI7CisgICAgZ2VzdHVyZVJlY29nbml6ZXIgPSBuZXcgR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIGdlc3R1cmVSZWNvZ25pemVyLT5pbml0aWFsaXpl
KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGdlc3R1cmVSZWNvZ25pemVyKTsKK30KKworUGxhdGZv
cm1HZXN0dXJlUmVjb2duaXplcjo6UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisK
K1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjEzZjIzNWZkMWUxYjBjNGJkMWZmNWIxNGI4YTk1NDcyZGY2N2I2MTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVj
b2duaXplckNocm9taXVtLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW1faAorI2RlZmluZSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCIKKworI2luY2x1ZGUgIlBsYXRmb3Jt
VG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW0gOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciAgeworcHVibGljOgor
ICAgIGVudW0gU3RhdGUgeworICAgICAgTm9HZXN0dXJlLAorICAgICAgUGVuZGluZ1N5bnRoZXRp
Y0NsaWNrLAorICAgICAgU2Nyb2xsCisgICAgfTsKKworICAgIHR5cGVkZWYgYm9vbCAoKkdlc3R1
cmVUcmFuc2l0aW9uRnVuY3Rpb24pKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qLCBjb25zdCBQ
bGF0Zm9ybVRvdWNoUG9pbnQmKTsKKworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKTsK
KyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisKKyAgICB2b2lkIGFk
ZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlN0YXRlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgR2VzdHVyZVRyYW5zaXRpb25G
dW5jdGlvbik7CisgICAgdm9pZCBkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0IFBsYXRmb3Jt
VG91Y2hQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdmlydHVh
bCB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICBib29sIGlzSW5DbGlja1RpbWVXaW5kb3coKTsKKyAg
ICBib29sIGlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYp
OworICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVkKTsKKyAgICB2b2lk
IHNjcm9sbFZpYVRvdWNoTW90aW9uKGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworICAgIHZv
aWQgc2V0U3RhdGUoU3RhdGUgdmFsdWUpIHsgbV9zdGF0ZSA9IHZhbHVlOyB9CisgICAgU3RhdGUg
c3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0
ZVZhbHVlcyhkb3VibGUgdG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hdHVyZShTdGF0ZSwgdW5zaWduZWQsIFBsYXRmb3Jt
VG91Y2hQb2ludDo6U3RhdGUsIGJvb2wpOworCisgICAgV1RGOjpIYXNoTWFwPGludCwgR2VzdHVy
ZVRyYW5zaXRpb25GdW5jdGlvbj4gbV9lZGdlRnVuY3Rpb25zOworICAgIEludFBvaW50IG1fZmly
c3RUb3VjaFBvc2l0aW9uOworICAgIGRvdWJsZSBtX2ZpcnN0VG91Y2hUaW1lOworICAgIFN0YXRl
IG1fc3RhdGU7CisgICAgZG91YmxlIG1fbGFzdFRvdWNoVGltZTsKKyAgICBFdmVudEhhbmRsZXIq
IG1fZXZlbnRIYW5kbGVyOworCisgICAgYm9vbCBtX2N0cmxLZXk7CisgICAgYm9vbCBtX2FsdEtl
eTsKKyAgICBib29sIG1fc2hpZnRLZXk7CisgICAgYm9vbCBtX21ldGFLZXk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHZXN0dXJlUmVjb2duaXplckNocm9taXVt
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzBhMzBmYmM0MDI1ZjA2N2YwZDU3YWM1
YjYwYjM4Zjg3NzA1MmJjNC4uNjBiOTBmNDhiZjBmNTE0Yzg4OWUyM2IxZTg0ZTVkOGExZjgwZDNj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMS0wNS0y
NiAgUm9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNp
YyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFk
ZGVkIHVuaXQgdGVzdHMgZm9yIHRoZSBiYXNpYyBjaHJvbWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJl
Y29nbml6ZXIuCisKKyAgICAgICAgKiB0ZXN0cy9HZXN0dXJlUmVjb2duaXplckNocm9taXVtVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2du
aXplckNocm9taXVtOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpzaWdu
YXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjpmaXJzdFRvdWNoUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFi
bGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpzZXRGaXJzdFRvdWNoVGltZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OmZpcnN0VG91
Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bTo6c2V0TGFzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJs
ZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Omxhc3RUb3VjaFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjplZGdlRnVuY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVt
Ojp1cGRhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3Vj
aFBvaW50OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQ
b2ludDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9p
bnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
R2VzdHVyZVJlY29nbml6ZXI6OlRlc3RHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RHZXN0dXJlUmVjb2duaXplcjo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9G
KToKKwogMjAxMS0wNS0yNSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg3MjU3LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNDRlM2EwYjJlNTFjZDdmZWQyZDAzMjk5NjVlMTE3ZDk3
ZjdiODA4OC4uYjI5YTc2ZmYyYmYzYjljZTc0ODEzOTZkZDQ0NjYwMmUyNzg1MmNjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2ICs1Myw3IEBACiAgICAgICAgIF0sCiAg
ICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAgICAgICAgICAndGVzdHMvQXJl
bmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9HZXN0dXJlUmVjb2duaXplckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1UZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xYmQyOTMwYWRmNmRmYTZmMzQ3YjcyNTJhYmQ3Yjg2MTA0MDkyYTJj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HZXN0dXJl
UmVjb2duaXplckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIDogcHVi
bGljIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0geworcHVibGljOgorICAgIEluc3BlY3RhYmxl
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpCisgICAgICAgIDogV2ViQ29yZTo6R2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bSgpCisgICAgeworICAgIH0KKworICAgIGludCBzaWduYXR1cmUoU3Rh
dGUgZ2VzdHVyZVN0YXRlLCB1bnNpZ25lZCBpZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0
b3VjaFR5cGUsIGJvb2wgaGFuZGxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXN0dXJlUmVj
b2duaXplckNocm9taXVtOjpzaWduYXR1cmUoZ2VzdHVyZVN0YXRlLCBpZCwgdG91Y2hUeXBlLCBo
YW5kbGVkKTsKKyAgICB9OworCisgICAgSW50UG9pbnQgZmlyc3RUb3VjaFBvc2l0aW9uKCkgeyBy
ZXR1cm4gbV9maXJzdFRvdWNoUG9zaXRpb247IH07CisKKyAgICB2b2lkIHNldEZpcnN0VG91Y2hU
aW1lKGRvdWJsZSB0KSB7IG1fZmlyc3RUb3VjaFRpbWUgPSB0OyB9OworICAgIGRvdWJsZSBmaXJz
dFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFRpbWU7IH07CisKKyAgICB2b2lkIHNl
dExhc3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBk
b3VibGUgbGFzdFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fbGFzdFRvdWNoVGltZTsgfTsKKworICAg
IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZWRn
ZUZ1bmN0aW9uKGludCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZUZ1bmN0aW9u
cy5nZXQoaGFzaCk7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWYWx1ZXMoZG91
YmxlIGQsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCAmcCkKKyAgICB7CisgICAgICAgIEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW06OnVwZGF0ZVZhbHVlcyhkLCBwKTsKKyAgICB9OworfTsKKwor
Y2xhc3MgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IDogcHVibGljIFdlYkNvcmU6OlBsYXRm
b3JtVG91Y2hQb2ludCB7CitwdWJsaWM6CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50
KCk7CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KGludCB4LCBpbnQgeSk7CisKKyAg
ICB2b2lkIHNldFgoaW50IHgpCisgICAgeworICAgICAgICBtX3Bvcy5zZXRYKHgpOworICAgICAg
ICBtX3NjcmVlblBvcy5zZXRYKHgpOworICAgIH07CisKKyAgICB2b2lkIHNldFkoaW50IHkpCisg
ICAgeworICAgICAgICBtX3Bvcy5zZXRZKHkpOworICAgICAgICBtX3NjcmVlblBvcy5zZXRZKHkp
OworICAgIH07Cit9OworCitCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBs
YXRmb3JtVG91Y2hQb2ludCgpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQ6Onpl
cm8oKTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50Ojp6ZXJvKCk7Cit9OworCitCdWlsZGFi
bGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludChpbnQgeCwg
aW50IHkpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRmb3JtVG91Y2hQb2lu
dDo6VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQoeCwgeSk7CisgICAgbV9z
Y3JlZW5Qb3MgPSBJbnRQb2ludCh4LCB5KTsKK307CisKKworY2xhc3MgVGVzdEdlc3R1cmVSZWNv
Z25pemVyIDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFRlc3RHZXN0dXJl
UmVjb2duaXplcigpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeyB9Cit9OworCitURVNUX0YoVGVzdEdl
c3R1cmVSZWNvZ25pemVyLCBoYXNoKQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bSB0ZXN0R207CisgICAgY29uc3QgdW5zaWduZWQgRmlyc3RGaW5nZXIgPSAwOwor
ICAgIGNvbnN0IHVuc2lnbmVkIFNlY29uZEZpbmdlciA9IDE7CisKKyAgICBBU1NFUlRfRVEoMSAr
IDAsIHRlc3RHbS5zaWduYXR1cmUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6Tm9HZXN0dXJl
LCBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCBmYWxzZSkp
OworCisgICAgQVNTRVJUX0VRKDEgKyAoKDggfCAxKSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgdHJ1ZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAo
KDB4MTAwMDAgfCAyKSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjpQZW5kaW5nU3ludGhldGljQ2xpY2ssIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoTW92ZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgweDIwMDAw
IDw8IDEpLCB0ZXN0R20uc2lnbmF0dXJlKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNjcm9s
bCwgRmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgZmFsc2Up
KTsKKworICAgIEFTU0VSVF9FUSgxICsgKCgweDIwMDAwIHwgMSkgPDwgMSksIHRlc3RHbS5zaWdu
YXR1cmUoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLCBGaXJzdEZpbmdlciwgUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEo
MSArICgoMHgyMDAwMCB8IDB4MTAgfCA4IHwgMSkgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUoR2Vz
dHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6U2Nyb2xsLCBTZWNvbmRGaW5nZXIsIFBsYXRmb3JtVG91
Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCB0cnVlKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJl
Y29nbml6ZXIsIHN0YXRlKQoreworICAgIEluc3BlY3RhYmxlR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bSB0ZXN0R207CisKKyAgICBBU1NFUlRfRVEoMCwgdGVzdEdtLnN0YXRlKCkpOworICAgIHRl
c3RHbS5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQZW5kaW5nU3ludGhldGlj
Q2xpY2spOworICAgIEFTU0VSVF9FUShHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpQZW5kaW5n
U3ludGhldGljQ2xpY2ssIHRlc3RHbS5zdGF0ZSgpKTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJl
UmVjb2duaXplciwgaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUpCit7CisgICAgSW5zcGVjdGFibGVH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdtOworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQ
b2ludCBwOworCisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgp
KTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS55KCkpOworCisg
ICAgcC5zZXRYKDAuMCk7CisgICAgcC5zZXRZKDE5Ljk5OSk7CisgICAgQVNTRVJUX1RSVUUoZ20u
aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDE5Ljk5OSk7CisgICAg
cC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUo
cCkpOworCisgICAgcC5zZXRYKDIwLjApOworICAgIHAuc2V0WSgwLjApOworICAgIEFTU0VSVF9G
QUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNldFgoMC4wKTsK
KyAgICBwLnNldFkoMjAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFu
U3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgtMjAuMCk7CisgICAgcC5zZXRZKDAuMCk7CisgICAg
QVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0
WCgwLjApOworICAgIHAuc2V0WSgtMjAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRl
TWFuaGF0dGFuU3F1YXJlKHApKTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwg
aXNJbkNsaWNrVGltZVdpbmRvdykKK3sKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW0gZ207CisKKyAgICBnbS5zZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNl
dExhc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbkNsaWNrVGltZVdp
bmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFz
dFRvdWNoVGltZSgwLjAxMDAwMSk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbkNsaWNrVGltZVdp
bmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFz
dFRvdWNoVGltZSgwLjggLSAuMDAwMDAwMDEpOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5DbGlj
a1RpbWVXaW5kb3coKSk7CisKKyAgICBnbS5zZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdt
LnNldExhc3RUb3VjaFRpbWUoMC44MDAwMSk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5DbGlj
a1RpbWVXaW5kb3coKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGFkZEVk
Z2VGdW5jdGlvbikKK3sKKyAgICBJbnNwZWN0YWJsZUdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0g
Z207CisgICAgZ20uYWRkRWRnZUZ1bmN0aW9uKEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06OlNj
cm9sbCwgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCB0cnVlLCAoR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bTo6R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik0MDk2KTsKKwor
ICAgIEFTU0VSVF9FUSgoR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6R2VzdHVyZVRyYW5zaXRp
b25GdW5jdGlvbik0MDk2LCBnbS5lZGdlRnVuY3Rpb24oZ20uc2lnbmF0dXJlKEdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW06OlNjcm9sbCwgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVh
c2VkLCB0cnVlKSkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCB1cGRhdGVW
YWx1ZXMpCit7CisgICAgSW5zcGVjdGFibGVHZXN0dXJlUmVjb2duaXplckNocm9taXVtIGdtOwor
CisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VR
KDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoR2VzdHVyZVJlY29nbml6
ZXJDaHJvbWl1bTo6Tm9HZXN0dXJlLCBnbS5zdGF0ZSgpKTsKKworICAgIEJ1aWxkYWJsZVBsYXRm
b3JtVG91Y2hQb2ludCBwMSgxMCwgMTEpOworICAgIGdtLnVwZGF0ZVZhbHVlcygxLjEsIHAxKTsK
KworICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBB
U1NFUlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJUX0VR
KDEuMSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFzdFRv
dWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBCdWlsZGFibGVQbGF0Zm9y
bVRvdWNoUG9pbnQgcDIoMTMsIDE0KTsKKyAgICBnbS5zZXRTdGF0ZShHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIGdtLnVwZGF0ZVZhbHVlcygy
LjAsIHAyKTsKKworICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgp
KTsKKyAgICBBU1NFUlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAg
QVNTRVJUX0VRKDEuMSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDIuMCAt
IDEuMSwgZ20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBC
dWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDMoMjMsIDM0KTsKKyAgICBnbS5zZXRTdGF0ZShH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpOb0dlc3R1cmUpOworICAgIGdtLnVwZGF0ZVZhbHVl
cygzLjAsIHAzKTsKKworICAgIEFTU0VSVF9FUSgyMywgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCku
eCgpKTsKKyAgICBBU1NFUlRfRVEoMzQsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7Cisg
ICAgQVNTRVJUX0VRKDMuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDAu
MCwgZ20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95672</attachid>
            <date>2011-06-01 15:15:23 -0700</date>
            <delta_ts>2011-06-01 15:55:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110601180929.patch</filename>
            <type>text/plain</type>
            <size>47140</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MzUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MDFjYTA4M2RiYTc4ZDU0YWZiNGRl
MTRkNTQyNzNkY2Q1MjFjYmI5Li4xZmNkZjMzMmU0MGQ2OGNhYTc3ZGUwMjg3MGQwMTZlYmFhNDVi
MzU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMDEgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBTaG93cyB0aGF0IHRoZSBiYXNpYyBD
aHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3RseSBjb252ZXJ0IGEgdG91Y2gKKyAg
ICAgICAgZXZlbnQgc2VxdWVuY2UgaW50byBhIHNlcXVlbmNlIG9mIHN5bnRoZXRpYyBtb3VzZSBl
dmVudHMgZm9yIGNsaWNraW5nIGFuZAorICAgICAgICBzY3JvbGxpbmcuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0
dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDExLTA2LTAxICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNraXAgZWRpdGluZy9wYXN0ZWJvYXJk
L2RyYWctZHJvcC1saXN0Lmh0bWwgb24gR1RLIGFmdGVyIHI4Nzc3OApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjhkZWJhYjk0ZjE4OTBjOGQ3YmE5ZjcwNTRlMzYyMWZi
NThmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGhpcyB0
ZXN0cyBiYXNpYyBzaW5nbGUgdG91Y2ggZ2VzdHVyZSBnZW5lcmF0aW9uLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworR2VzdHVyZSBtYW5hZ2VyIG5vdCBpbXBsZW1lbnRlZCBvbiB0
aGlzIHBsYXRmb3JtLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNo
LWdlc3R1cmUtY2xpY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNo
LWdlc3R1cmUtY2xpY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTA3ZTRhMjlhZDc1YWIyMmYzMGY4NzQx
NDk3NTlhNGYyMmQyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sCkBAIC0wLDAgKzEsMTE1IEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI3Rv
dWNodGFyZ2V0IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3Jv
dW5kOiBibHVlOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgp
OyI+Cis8ZGl2IGlkPSJ0b3VjaHRhcmdldCI+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgY2xpY2tFdmVudHNSZWNl
aXZlZCA9IDA7Cit2YXIgZXhwZWN0ZWRNb3VzZUV2ZW50cyA9IDQ7Cit2YXIgdG91Y2hFdmVudHNS
ZWNlaXZlZCA9IDA7Cit2YXIgbW91c2VFdmVudHNSZWNlaXZlZCA9IDA7Cit2YXIgZXZlbnRUeXBl
cyA9IFsgJ21vdXNlbW92ZScsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdjbGljaycgXTsKKwor
ZnVuY3Rpb24gZ2VzdHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAgaWYgKHdpbmRvdy5l
dmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUn
LCBldmVudFR5cGVzW21vdXNlRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2
ZW50LmNsaWVudFgnLCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFknLCAn
MTInKTsKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LnNoaWZ0S2V5IiwgInRydWUiKTsKKyAgICAg
ICAgc2hvdWxkQmUoImV2ZW50LmFsdEtleSIsICJ0cnVlIik7CisgICAgICAgIHNob3VsZEJlKCJl
dmVudC5jdHJsS2V5IiwgImZhbHNlIik7CisgICAgICAgIHNob3VsZEJlKCJldmVudC5tZXRhS2V5
IiwgImZhbHNlIik7CisgICAgICAgIG1vdXNlRXZlbnRzUmVjZWl2ZWQrKzsKKyAgICB9IGVsc2Ug
eworICAgICAgICBkZWJ1ZyhldmVudC50eXBlKTsKKyAgICAgICAgZGVidWcoZXZlbnQuY2xpZW50
WCk7CisgICAgICAgIGRlYnVnKGV2ZW50LmNsaWVudFkpOworICAgIH0KK30KKworLy8gQmVjYXVz
ZSB3ZSBtYXkgbm90IGhhdmUgYSBnZXN0dXJlIHJlY29nbml6ZXIsIHdlIHNlbmQgYSBrZXkgcHJl
c3MKKy8vIGV2ZW50IHRvIGVuZCB0aGUgdGVzdCB3aXRob3V0IHRlbXBvcmFsIGZsYWtpbmVzcy4K
K2Z1bmN0aW9uIHF1aXRLZXlUb0VuZFRlc3QoZXZlbnQpIHsKKyAgICBlbmRUZXN0KCk7Cit9CisK
Ky8vIExvZyB0aGF0IHdlIHN0aWxsIGdvdCB0aGUgdG91Y2ggZXZlbnRzLgorZnVuY3Rpb24gdG91
Y2hFdmVudENhbGxiYWNrKGV2ZW50KSB7CisgICAgdG91Y2hFdmVudHNSZWNlaXZlZCsrOworICAg
IGRlYnVnKCdoYXZlIHJlY2VpdmVkOiAnICsgdG91Y2hFdmVudHNSZWNlaXZlZCArICcgdG91Y2gg
ZXZlbnRzJyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHNpbmdsZVRvdWNoU2Vx
dWVuY2UoKQoreworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVu
dFNlbmRlci5hZGRUb3VjaFBvaW50KDEwLCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFy
dCgpOworCisgICAgLy8gSW5zZXJ0IHNvbWUgZGVsYXkuIE5COiB0aGlzIHZhbHVlIGRlcGVuZHMg
b24gbWluQ2xpY2tEb3duVGltZSwKKyAgICAvLyBtYXhDbGlja0Rvd25UaW1lIGZyb20gR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2FyZCgyMCk7
CisgICAgZXZlbnRTZW5kZXIuc2V0VG91Y2hNb2RpZmllcigic2hpZnQiLCB0cnVlKTsKKyAgICBl
dmVudFNlbmRlci5zZXRUb3VjaE1vZGlmaWVyKCJhbHQiLCB0cnVlKTsKKworICAgIGV2ZW50U2Vu
ZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7Cit9
CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGlmIChtb3VzZUV2ZW50c1JlY2VpdmVkIDwg
ZXhwZWN0ZWRNb3VzZUV2ZW50cykgeworICAgICAgICBkZWJ1ZygnR2VzdHVyZSBtYW5hZ2VyIG5v
dCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLicpOworICAgIH0KKyAgICAvLyBCYWlsLgor
ICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3Vj
aHRhcmdldCcpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBnZXN0dXJl
RXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIo
Im1vdXNldXAiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZW1vdmUiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBxdWl0S2V5VG9FbmRUZXN0LCBm
YWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaEV2ZW50
Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwg
dG91Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRv
dWNoZW5kIiwgdG91Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2Ny
aXB0aW9uKCJUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24u
Iik7CisgICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKSB7CisgICAgICAg
ICAgICBzaW5nbGVUb3VjaFNlcXVlbmNlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5sZWFw
Rm9yd2FyZCgxMCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCcgJyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAg
VGFwIG9uIHRoZSBibHVlIHJlY3QgdG8gbG9nLiIpCisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90
b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJi
YjY2YTVlMTA4MGE5YjBjYWJjZjEzYjlhZjQzNGFkMmQ4OGIxNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVy
YXRpb24gZnJvbSB0b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNz
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1hbmFnZXIgbm90IGlt
cGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDE3OTMzMjQ3YjFmNjQ0ZDgwNTc0NGJlNjNiNDZlYzAyZWE4NWUzYQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0
bWwKQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7Cisg
IGhlaWdodDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hp
dGU7Cit9CisKKyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOwor
ICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZs
b3cteTogc2Nyb2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOwor
fQorCisjZ3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJh
Y2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisj
cmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5k
OiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFk
ZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIg
b25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0i
bW92aW5nYm94Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4Ij4KKyAg
ICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4KKyAgICAg
ICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICAg
IDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAg
ICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgIDwv
dGFibGU+CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisK
K3ZhciBtb3ZpbmdkaXY7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9s
bHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnOTAnLCAnOTAnXTsKK3ZhciBz
Y3JvbGxBbW91bnRZID0gWycwJywgJzk1J107CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0
KCkKK3sKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94
Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgnbW92
aW5nZGl2LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAg
ICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xs
c09jY3VycmVkXSk7CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlm
IChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8g
SWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERy
YWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7Cisg
ICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3Zl
ZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJl
bnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZh
dWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7
CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNo
UG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg5NSwgMTIpOworICAgIGV2
ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUgZGl2IHRvIHRoZSBs
ZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgNSwgMTIpOworICAgIGV2
ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9p
bnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxh
eW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRUb3Vj
aERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7CisgICAgZXZl
bnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9p
bnQoMTIsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3Jv
bGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQo
MCwgMTIsIDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5k
ZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKwor
ICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitm
dW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIg
bm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7CisgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRl
c2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0b3Vj
aCBldmVudHMuICcgKworICAgICAgICAgICAgJ1NxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBw
YXNzJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMpCisgICAg
ICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlz
IHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUb3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0
IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5k
JywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGlj
ay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYwODQ3ODM1ZWI4NWIyNjAxZmZlZTRiNGNmYTgw
MzhlMTUyMzJmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMzkgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2Vu
ZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2hhdmUgcmVjZWl2ZWQ6
IDEgdG91Y2ggZXZlbnRzCitoYXZlIHJlY2VpdmVkOiAyIHRvdWNoIGV2ZW50cworUEFTUyBldmVu
dC50eXBlIGlzICJtb3VzZW1vdmUiCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZl
bnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50
LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQu
bWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50eXBlIGlzICJtb3VzZWRvd24iCitQQVNTIGV2
ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5z
aGlmdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0
cmxLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50
eXBlIGlzICJtb3VzZXVwIgorUEFTUyBldmVudC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNs
aWVudFkgaXMgMTIKK1BBU1MgZXZlbnQuc2hpZnRLZXkgaXMgdHJ1ZQorUEFTUyBldmVudC5hbHRL
ZXkgaXMgdHJ1ZQorUEFTUyBldmVudC5jdHJsS2V5IGlzIGZhbHNlCitQQVNTIGV2ZW50Lm1ldGFL
ZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQudHlwZSBpcyAiY2xpY2siCitQQVNTIGV2ZW50LmNsaWVu
dFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtleSBp
cyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkgaXMg
ZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWY5OGJk
YjBiNWRlN2EyMjI5MTg2ZGZkZWM4NjA2YWYwZjU3ODQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgc2Nyb2xs
IGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJlIGlzIChtb3N0bHkp
IGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdl
c3R1cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1vdmluZ2Rpdi5zY3Jv
bGxMZWZ0IGlzIDkwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlz
IDk1CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVjYTM5MzE0MDBl
M2ZhNTdkMTQ4MWUyNmYxMWY3MjQwNmRmYzVmNTMuLjJhNzM2OGNmOWNmNzhhZDkyNjUxNjI3ODA0
NmJlYWQ2NDRhNjA3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMS0wNi0wMSAg
Um9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBn
ZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZHMg
YSBiYXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtLiBBZGRz
IGFuIGVudHJ5CisgICAgICAgIHBvaW50IHRvIHRoZSBHZXN0dXJlUmVjb2duaXplciB0byByZXNl
dCBhbnkgaW50ZXJuYWwgc3RhdGUgb24gYSBwYWdlIHJlc2V0LgorICAgICAgICBSZXNldHRpbmcg
dGhlIGdlc3R1cmUgcmVjb2duaXplciBvbiBwYWdlIGxvYWQgaXMgbmVjZXNhcnkgZm9yIHJlbGlh
YmxlCisgICAgICAgIGxheW91dCB0ZXN0IGV4ZWN1dGlvbiBhbmQgaW1wcm92ZXMgZ2VzdHVyZSBy
ZWNvZ25pemVyIG9wZXJhdGlvbmFsCisgICAgICAgIHJvYnVzdG5lc3MuCisKKyAgICAgICAgQWRk
ZWQgYW4gYWRkaXRpb25hbCBjb25zdHJ1Y3RvciB0byBwZXJtaXQgYnVpbGRpbmcgYSBzeW50aGV0
aWMKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50LgorCisgICAgICAgIFNtYWxsIG1vZGlmaWNh
dGlvbnMgdG8gdGhlIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgYXMgcmVxdWlyZWQgdG8KKyAg
ICAgICAgaW1wbGVtZW50IHRoZSBzaW1wbGUgQ2hyb21pdW0gcGxhdGZvcm0gZ2VzdHVyZSByZWNv
Z25pemVyLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LWNsaWNrLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnJlc2V0R2Vz
dHVyZVJlY29nbml6ZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNl
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6OklubmVyR2VzdHVyZVJlY29nbml6
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6fklubmVyR2VzdHVyZVJl
Y29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6YWRk
RWRnZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6
OmlzSW5DbGlja1RpbWVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6ZGlzcGF0Y2hTeW50aGV0aWNDbGljayk6CisgICAgICAgIChX
ZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2Nyb2xsVmlh
VG91Y2hNb3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
dXBkYXRlVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6
OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaERvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6bm9HZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsaWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzQ2xpY2tPclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjppblNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcjo6UGxhdGZvcm1HZXN0dXJl
UmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVy
Ojp+UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06On5HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXpl
cjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cHJvY2Vz
c1RvdWNoRXZlbnRGb3JHZXN0dXJlKToKKwogMjAxMS0wNi0wMSAgQW5kcmFzIEJlY3NpICA8YWJl
Y3NpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6Fj
LgpAQCAtNTY5LDcgKzYyNyw2IEBACiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlubk1hdGhVdGlscy5jcHA6CiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1Rp
bGluZ0RhdGEuY3BwOgogCi09PT09PT09CiAyMDExLTA1LTMxICBSb2IgQnVpcyAgPHJidWlzQHJp
bS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpAQCAtOTQ0LDcgKzEw
MDEsNiBAQAogICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDaGFyKToKICAgICAgICAgSW5jbHVk
ZSAnKycgaW4gdGhlIGxpc3Qgb2YgdmFsaWQgY2hhcmFjdGVycy4KIAotPj4+Pj4+PiAucjg3Nzc4
CiAyMDExLTA1LTMwICBBbmRyZXkgUGV0cm92ICA8YW5kcmV5LnBldHJvdkBnbWFpbC5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAx
MDAzYjlhZTE3ZDI1MzhkNWUwNmVmYjdmMDE0MGNmMTdmYTFhZjdhLi40N2I3NmEzNjI2MTQ5ZmZm
MmQ2M2VjMGIwZjliYjA2OWFjMDM3NWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NjcsNyArNzY3
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL05vdEltcGxlbWVudGVkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bi5oJywKQEAgLTM4MTMsNiArMzgxMiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbi5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbkd0ay5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0tleWJvYXJkQ29kZXMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggYzk4OWNkMDFmNjg4ZDBhOWVhNjc2NjY4NGI1YTZhNzJiNzVlNDg1
Ny4uYmRmYWY4YTk2ODk3ZDRmYmYwNWQ3Mjc0NzUzMGNlY2ZiN2I1NjQ1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzI3NSw2ICszMjc1LDE2IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQp
CiAKICAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KKworI2lmIEVOQUJMRShHRVNUVVJF
X1JFQ09HTklaRVIpCit2b2lkIEV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcigp
Cit7CisgICAgaWYgKG1fZ2VzdHVyZVJlY29nbml6ZXIpCisgICAgICAgIG1fZ2VzdHVyZVJlY29n
bml6ZXItPnJlc2V0KCk7Cit9CisjZW5kaWYKKworCiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKaW5kZXggZGM0M2UzZDgyOTI0ZmM4M2E1YWI5NTA1Y2YwZjQ5ZGZiMDM2
MDFiYi4uNzQ1ZWRkYTRkMmUwZGUxYzNlZTVkMTI5MDE1YzE3N2FhZjVkODU3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNjYsNiArMTY2LDEwIEBAIHB1YmxpYzoKICAgICBi
b29sIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOwogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorICAgIHZvaWQgcmVzZXRHZXN0
dXJlUmVjb2duaXplcigpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKICAg
ICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwog
ICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAppbmRleCBlZjdkMjE1MDUyNzRlNmI2OTgyMDM5Y2FiNjBlMTMyMmUwMWU5OWViLi5m
ZDI5OTJiMWU0ZDIwYzEyY2M3OTA0YThhYTM4NjA0ODc3N2QzN2MxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC0yMzQsNiArMjM0LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpyZXNldCgp
CiAgICAgbV9pc1Zpc3VhbGx5Tm9uRW1wdHkgPSBmYWxzZTsKICAgICBtX2ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dENhbGxiYWNrUGVuZGluZyA9IHRydWU7CiAgICAgbV9tYWludGFpblNjcm9s
bFBvc2l0aW9uQW5jaG9yID0gMDsKKworI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisg
ICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnJlc2V0R2VzdHVyZVJlY29nbml6ZXIoKTsKKyNl
bmRpZgogfQogCiBib29sIEZyYW1lVmlldzo6aXNGcmFtZVZpZXcoKSBjb25zdCAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaAppbmRl
eCA4MDI1ODNmMmEwNTUzYmI3Y2E3M2M3ODVlZGY1YWY4YWMwMWIwYTUwLi4yZjgwNWJkMjYyNzFk
YzE0ZDM5MDQ1M2UzYzkwNmNlMGExNDNiNWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oCkBAIC01Nyw2ICs1Nyw5IEBAIHB1
YmxpYzoKICAgICAvLyBzcGVjaWZpZXMgaWYgdGhlIHxldmVudHwgd2FzIGFjdHVhbGx5IGhhbmRs
ZWQgYnkgfHNvdXJjZXwgKGJ5IHRoZSBKYXZhU2NyaXB0KQogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZXZlbnQgcmVzdWx0ZWQgaW4gZmlyaW5nIGEgc3ludGhldGljIGV2ZW50LgogICAgIHZp
cnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVkKSA9IDA7CisKKyAgICAvLyBDbGVh
cnMgdGhlIEdlc3R1cmVSZWNvZ25pemVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLgorICAgIHZpcnR1
YWwgdm9pZCByZXNldCgpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMzc2NTU1MzNi
ZDQ4ZTMxZjU1MWNlZDJkMzMwNDRhOWJlODg3ZTAwYy4uYTZiN2M1MDcyZmRjYzNkNDcyNGJkMzg0
NDFmMjZmYWEwZWRjZDY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1X
aGVlbEV2ZW50LmgKQEAgLTEwNiw2ICsxMDYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSW50UG9pbnQg
cG9zaXRpb24sIEludFBvaW50IGdsb2JhbFBvc2l0aW9uLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRl
bHRhWSwgZmxvYXQgd2hlZWxUaWNrc1gsIGZsb2F0IHdoZWVsVGlja3NZLCBQbGF0Zm9ybVdoZWVs
RXZlbnRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBpc0FjY2VwdGVkLCBib29sIHNoaWZ0
S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIG1ldGFLZXkpCisgICAgICAgICAg
ICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
Z2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKKyAgICAgICAg
ICAgICwgbV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NYKHdoZWVs
VGlja3NYKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NZKHdoZWVsVGlja3NZKQorICAgICAg
ICAgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICAgICAgICAgLCBtX2lzQWNj
ZXB0ZWQoaXNBY2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtleSkKKyAg
ICAgICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFs
dEtleSkKKyAgICAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisjaWYgUExBVEZPUk0oTUFD
KQorICAgICAgICAgICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoZmFsc2UpCisgICAg
ICAgICAgICAsIG1fcGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQorICAgICAgICAg
ICAgLCBtX21vbWVudHVtUGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQorICAgICAg
ICAgICAgLCBtX3RpbWVzdGFtcCgwKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
IC8vIFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgICBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfSAvLyBTY3JlZW4g
Y29vcmRpbmF0ZXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVl
MzJlMzkzM2I2ODQ0MGRlNjBiOWQwMjYzMzFhMmJkYjNjYWEyOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0uY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBjbGljayhJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CitzdGF0aWMg
Ym9vbCBpc0NsaWNrT3JTY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciosIGNvbnN0IFBsYXRm
b3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wgaW5TY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2du
aXplciosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wgbm9HZXN0dXJl
KElubmVyR2VzdHVyZVJlY29nbml6ZXIqLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0
YXRpYyBib29sIHRvdWNoRG93bihJbm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtlIHRoZXNlIGNvbmZpZ3VyYWJsZSBwcm9n
cmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhpbXVtVG91Y2hEb3duRHVyYXRp
b25JblNlY29uZHNGb3JDbGljayA9IDAuODsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRv
dWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sgPSAwLjAxOworc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtVG91Y2hNb3ZlSW5QaXhlbHNGb3JDbGljayA9IDIwOworCitJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyKCkKKyAgICA6IG1fZmlyc3RUb3VjaFRp
bWUoMC4wKQorICAgICwgbV9zdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUp
CisgICAgLCBtX2xhc3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9ldmVudEhhbmRsZXIoMCkKKyAg
ICAsIG1fY3RybEtleShmYWxzZSkKKyAgICAsIG1fYWx0S2V5KGZhbHNlKQorICAgICwgbV9zaGlm
dEtleShmYWxzZSkKKyAgICAsIG1fbWV0YUtleShmYWxzZSkKK3sKKyAgICBjb25zdCB1bnNpZ25l
ZCBGaXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBS
ZWxlYXNlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDsKKyAgICBjb25zdCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRv
dWNoUHJlc3NlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIE1vdmVkID0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQ
b2ludDo6U3RhdGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9u
YXJ5OworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgQ2FuY2VsbGVkID0gUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKworICAgIGFkZEVkZ2VGdW5jdGlvbihO
b0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxzZSwgdG91Y2hEb3duKTsKKyAgICBh
ZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgQ2FuY2Vs
bGVkLCBmYWxzZSwgbm9HZXN0dXJlKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRo
ZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgUmVsZWFzZWQsIGZhbHNlLCBjbGljayk7CisgICAgYWRk
RWRnZUZ1bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIsIE1vdmVkLCBm
YWxzZSwgaXNDbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRo
ZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgU3RhdGlvbmFyeSwgZmFsc2UsIGlzQ2xpY2tPclNjcm9s
bCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIE1vdmVkLCBmYWxz
ZSwgaW5TY3JvbGwpOworICAgIGFkZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBS
ZWxlYXNlZCwgZmFsc2UsIG5vR2VzdHVyZSk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwg
Rmlyc3RGaW5nZXIsIENhbmNlbGxlZCwgZmFsc2UsIG5vR2VzdHVyZSk7Cit9CisKK3ZvaWQgSW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQoreworICAgIG1fZmlyc3RUb3VjaFRpbWUgPSAw
LjA7CisgICAgbV9zdGF0ZSA9IElubmVyR2VzdHVyZVJlY29nbml6ZXI6Ok5vR2VzdHVyZTsKKyAg
ICBtX2xhc3RUb3VjaFRpbWUgPSAwLjA7CisgICAgbV9ldmVudEhhbmRsZXIgPSAwOworfQorCitJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjp+SW5uZXJHZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisK
K3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6YWRkRWRnZUZ1bmN0aW9uKFN0YXRlIHN0YXRl
LCB1bnNpZ25lZCBmaW5nZXJJZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUs
IGJvb2wgdG91Y2hIYW5kbGVkQnlKYXZhU2NyaXB0LCBHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9u
IGYpCit7CisgICAgbV9lZGdlRnVuY3Rpb25zLmFkZChzaWduYXR1cmUoc3RhdGUsIGZpbmdlcklk
LCB0b3VjaFR5cGUsIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCksIGYpOworfQorCitib29sIElu
bmVyR2VzdHVyZVJlY29nbml6ZXI6OmlzSW5DbGlja1RpbWVXaW5kb3coKQoreworICAgIGRvdWJs
ZSBkdXJhdGlvbihtX2xhc3RUb3VjaFRpbWUgLSBtX2ZpcnN0VG91Y2hUaW1lKTsKKyAgICByZXR1
cm4gZHVyYXRpb24gPj0gbWluaW11bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sg
JiYgZHVyYXRpb24gPCBtYXhpbXVtVG91Y2hEb3duRHVyYXRpb25JblNlY29uZHNGb3JDbGljazsK
K30KKworYm9vbCBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjppc0luc2lkZU1hbmhhdHRhblNxdWFy
ZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50KQoreworICAgIGludCBtYW5oYXR0YW5E
aXN0YW5jZSA9IGFicyhwb2ludC5wb3MoKS54KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi54KCkp
ICsgYWJzKHBvaW50LnBvcygpLnkoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLnkoKSk7CisgICAg
cmV0dXJuIG1hbmhhdHRhbkRpc3RhbmNlIDwgbWF4aW11bVRvdWNoTW92ZUluUGl4ZWxzRm9yQ2xp
Y2s7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6ZGlzcGF0Y2hTeW50aGV0aWND
bGljayhjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50KQoreworICAgIFBsYXRmb3JtTW91
c2VFdmVudCBmYWtlTW91c2VNb3ZlKHBvaW50LnBvcygpLCBwb2ludC5zY3JlZW5Qb3MoKSwgTm9C
dXR0b24sIE1vdXNlRXZlbnRNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBtX3NoaWZ0S2V5LCBt
X2N0cmxLZXksIG1fYWx0S2V5LCBtX21ldGFLZXksIG1fbGFzdFRvdWNoVGltZSk7CisgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24ocG9pbnQucG9zKCksIHBvaW50LnNjcmVlblBv
cygpLCBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50UHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBt
X3NoaWZ0S2V5LCBtX2N0cmxLZXksIG1fYWx0S2V5LCBtX21ldGFLZXksIG1fbGFzdFRvdWNoVGlt
ZSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKHBvaW50LnBvcygpLCBwb2lu
dC5zY3JlZW5Qb3MoKSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFJlbGVhc2VkLCAvKiBjbGlja0Nv
dW50ICovIDEsIG1fc2hpZnRLZXksIG1fY3RybEtleSwgbV9hbHRLZXksIG1fbWV0YUtleSwgbV9s
YXN0VG91Y2hUaW1lKTsKKworICAgIG1fZXZlbnRIYW5kbGVyLT5tb3VzZU1vdmVkKGZha2VNb3Vz
ZU1vdmUpOworICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1v
dXNlRG93bik7CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZh
a2VNb3VzZVVwKTsKK30KKworYm9vbCBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpwcm9jZXNzVG91
Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCwgRXZlbnRI
YW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxlZCkKK3sKKyAgICBtX2V2ZW50SGFuZGxl
ciA9IGV2ZW50SGFuZGxlcjsKKyAgICBtX2N0cmxLZXkgPSBldmVudC5jdHJsS2V5KCk7CisgICAg
bV9hbHRLZXkgPSBldmVudC5hbHRLZXkoKTsKKyAgICBtX3NoaWZ0S2V5ID0gZXZlbnQuc2hpZnRL
ZXkoKTsKKyAgICBtX21ldGFLZXkgPSBldmVudC5tZXRhS2V5KCk7CisKKyAgICBjb25zdCBWZWN0
b3I8UGxhdGZvcm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91Y2hQb2ludHMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcCA9IHBvaW50c1tpXTsKKyAgICAgICAgdXBkYXRl
VmFsdWVzKGV2ZW50LnRpbWVzdGFtcCgpLCBwKTsKKworICAgICAgICBpZiAoR2VzdHVyZVRyYW5z
aXRpb25GdW5jdGlvbiBlZiA9IG1fZWRnZUZ1bmN0aW9ucy5nZXQoc2lnbmF0dXJlKG1fc3RhdGUs
IHAuaWQoKSwgcC5zdGF0ZSgpLCBoYW5kbGVkKSkpCisgICAgICAgICAgICBoYW5kbGVkID0gKCpl
ZikodGhpcywgcCk7CisgICAgfQorICAgIHJldHVybiBoYW5kbGVkOworfQorCit2b2lkIElubmVy
R2VzdHVyZVJlY29nbml6ZXI6OnNjcm9sbFZpYVRvdWNoTW90aW9uKGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYgdG91Y2hQb2ludCkKK3sKKyAgICBmbG9hdCBkZWx0YVgodG91Y2hQb2ludC5wb3Mo
KS54KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi54KCkpOworICAgIGZsb2F0IGRlbHRhWSh0b3Vj
aFBvaW50LnBvcygpLnkoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLnkoKSk7CisKKyAgICAvLyBG
SVhNRTogQ29udmVydCB0byBnZXN0dXJlIGV2ZW50cyB3aGVuIHRoZXkgaGFuZGxlIHN1YmZyYW1l
cy4KKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudCh0b3VjaFBvaW50
LnBvcygpLCB0b3VjaFBvaW50LnNjcmVlblBvcygpLCBkZWx0YVgsIGRlbHRhWSwgZGVsdGFYIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KDEyMCksIGRlbHRhWSAvIHN0YXRpY19jYXN0PGZsb2F0PigxMjAp
LCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgLyogaXNBY2NlcHRlZCAqLyBmYWxzZSwgbV9zaGlm
dEtleSwgbV9jdHJsS2V5LCBtX2FsdEtleSwgbV9tZXRhS2V5KTsKKyAgICBtX2V2ZW50SGFuZGxl
ci0+aGFuZGxlV2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsKKyAgICBtX2ZpcnN0VG91
Y2hQb3NpdGlvbiA9IHRvdWNoUG9pbnQucG9zKCk7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6dXBkYXRlVmFsdWVzKGNvbnN0IGRvdWJsZSB0b3VjaFRpbWUsIGNvbnN0IFBsYXRm
b3JtVG91Y2hQb2ludCYgdG91Y2hQb2ludCkKK3sKKyAgICBtX2xhc3RUb3VjaFRpbWUgPSB0b3Vj
aFRpbWU7CisgICAgaWYgKHN0YXRlKCkgPT0gTm9HZXN0dXJlKSB7CisgICAgICAgIG1fZmlyc3RU
b3VjaFRpbWUgPSB0b3VjaFRpbWU7CisgICAgICAgIG1fZmlyc3RUb3VjaFBvc2l0aW9uID0gdG91
Y2hQb2ludC5wb3MoKTsKKyAgICB9Cit9CisKKy8vIEJ1aWxkcyBhIHNpZ25hdHVyZS4gU2lnbmF0
dXJlcyBhcmUgYXNzZW1ibGVkIGJ5IGpvaW5pbmcgdG9nZXRoZXIgbXVsdGlwbGUgYml0cy4KKy8v
IDEgTFNCIGJpdCBmb3Igc2lnbmF0dXJlID49IDEKKy8vIDMgYml0cyBmb3IgdGhlIHx0b3VjaFR5
cGV8LgorLy8gMSBiaXQgZm9yIHxoYW5kbGVkfAorLy8gMTIgYml0cyBmb3IgfGlkfAorLy8gMTUg
Yml0cyBmb3IgdGhlIHxnZXN0dXJlU3RhdGV8LgordW5zaWduZWQgaW50IElubmVyR2VzdHVyZVJl
Y29nbml6ZXI6OnNpZ25hdHVyZShTdGF0ZSBnZXN0dXJlU3RhdGUsIHVuc2lnbmVkIGlkLCBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwgYm9vbCBoYW5kbGVkKQoreworICAgIEFT
U0VSVCgoaWQgJiAweGZmZikgPT0gaWQpOworICAgIHJldHVybiAxICsgKCh0b3VjaFR5cGUgJiAw
eDcpIDw8IDEgfCAoaGFuZGxlZCA/IDEgPDwgNCA6IDApIHwgKChpZCAmIDB4ZmZmKSA8PCA1ICkg
fCAoZ2VzdHVyZVN0YXRlIDw8IDE3KSk7Cit9CisKK3N0YXRpYyBib29sIHRvdWNoRG93bihJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JikKK3sKKyAgICBnZXN0dXJlUmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0dXJl
UmVjb2duaXplcjo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgbm9HZXN0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXIqIGdlc3R1cmVSZWNvZ25p
emVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAgIGdlc3R1cmVSZWNvZ25pemVy
LT5yZXNldCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgY2xpY2soSW5u
ZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyLT5pc0luQ2xpY2tU
aW1lV2luZG93KCkgJiYgZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJl
KHBvaW50KSkgeworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0
dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJlKTsKKyAgICAgICAgZ2VzdHVyZVJlY29nbml6ZXItPmRp
c3BhdGNoU3ludGhldGljQ2xpY2socG9pbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIG5vR2VzdHVyZShnZXN0dXJlUmVjb2duaXplciwgcG9pbnQpOworfQorCitz
dGF0aWMgYm9vbCBpc0NsaWNrT3JTY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVy
ZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcG9pbnQpCit7CisgICAgaWYg
KGdlc3R1cmVSZWNvZ25pemVyLT5pc0luQ2xpY2tUaW1lV2luZG93KCkgJiYgZ2VzdHVyZVJlY29n
bml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHBvaW50KSkgeworICAgICAgICBnZXN0dXJl
UmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6UGVuZGluZ1N5bnRo
ZXRpY0NsaWNrKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwb2lu
dC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCAmJiAhZ2VzdHVyZVJl
Y29nbml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHBvaW50KSkgeworICAgICAgICBnZXN0
dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocG9pbnQpOworICAgICAgICBnZXN0
dXJlUmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6U2Nyb2xsKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaW5TY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVyZVJlY29nbml6
ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcG9pbnQpCit7CisgICAgZ2VzdHVyZVJlY29n
bml6ZXItPnNjcm9sbFZpYVRvdWNoTW90aW9uKHBvaW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyPiBQbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyOjpjcmVhdGUoKQoreworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qIGdl
c3R1cmVSZWNvZ25pemVyID0gbmV3IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIoZ2VzdHVyZVJlY29nbml6ZXIpOworfQorCitQbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KKworUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplcjo6flBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIoKQoreworfQorCitH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKKyAg
ICA6IG1faW5uZXJHZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisKK0dlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW06On5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNGU4NWZi
YjVjY2RlMDQzNDk0OWIyMTg5ODcwNGFjMDA4ZTliMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgK
QEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKKyNk
ZWZpbmUgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKKyNp
bmNsdWRlICJUb3VjaEV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbm5lckdlc3R1cmVSZWNvZ25pemVyIHsKK3B1YmxpYzoK
KyAgICBlbnVtIFN0YXRlIHsKKyAgICAgIE5vR2VzdHVyZSwKKyAgICAgIFBlbmRpbmdTeW50aGV0
aWNDbGljaywKKyAgICAgIFNjcm9sbAorICAgIH07CisKKyAgICB0eXBlZGVmIGJvb2wgKCpHZXN0
dXJlVHJhbnNpdGlvbkZ1bmN0aW9uKShJbm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50Jik7CisKKyAgICB+SW5uZXJHZXN0dXJlUmVjb2duaXplcigpOworCisg
ICAgdm9pZCBkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIGJvb2wgaXNJbkNsaWNrVGltZVdpbmRv
dygpOworICAgIGJvb2wgaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmLCBFdmVudEhhbmRsZXIqLCBib29sIGhhbmRsZWQpOwor
ICAgIHZvaWQgc2Nyb2xsVmlhVG91Y2hNb3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7
CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSB2YWx1ZSkgeyBtX3N0YXRlID0gdmFsdWU7IH0KKyAg
ICBTdGF0ZSBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KK3Byb3RlY3RlZDoKKyAgICBJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKCk7CisgICAgdm9pZCBhZGRFZGdlRnVuY3Rpb24oU3RhdGUsIHVu
c2lnbmVkIGZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSwgYm9vbCB0b3VjaEhhbmRs
ZWRCeUphdmFTY3JpcHQsIEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pOworICAgIHZvaWQgdXBk
YXRlVmFsdWVzKGRvdWJsZSB0b3VjaFRpbWUsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmF0dXJlKFN0YXRlLCB1bnNpZ25lZCwgUGxhdGZv
cm1Ub3VjaFBvaW50OjpTdGF0ZSwgYm9vbCk7CisKKyAgICBmcmllbmQgY2xhc3MgR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTsKKworICAgIFdURjo6SGFzaE1hcDxpbnQsIEdlc3R1cmVUcmFuc2l0
aW9uRnVuY3Rpb24+IG1fZWRnZUZ1bmN0aW9uczsKKyAgICBJbnRQb2ludCBtX2ZpcnN0VG91Y2hQ
b3NpdGlvbjsKKyAgICBkb3VibGUgbV9maXJzdFRvdWNoVGltZTsKKyAgICBTdGF0ZSBtX3N0YXRl
OworICAgIGRvdWJsZSBtX2xhc3RUb3VjaFRpbWU7CisgICAgRXZlbnRIYW5kbGVyKiBtX2V2ZW50
SGFuZGxlcjsKKworICAgIGJvb2wgbV9jdHJsS2V5OworICAgIGJvb2wgbV9hbHRLZXk7CisgICAg
Ym9vbCBtX3NoaWZ0S2V5OworICAgIGJvb2wgbV9tZXRhS2V5OworfTsKKworY2xhc3MgR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bSA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyICB7
CitwdWJsaWM6CisKKyAgICBHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisgICAgdmlydHVh
bCB+R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0
KCkKKyAgICB7CisgICAgICAgIG1faW5uZXJHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOworICAg
IH07CisgCisgICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIEV2ZW50SGFuZGxlciogZXZlbnRIYW5k
bGVyLCBib29sIGhhbmRsZWQpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbm5lckdlc3R1cmVS
ZWNvZ25pemVyLnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZSh0b3VjaEV2ZW50LCBldmVudEhh
bmRsZXIsIGhhbmRsZWQpOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5uZXJHZXN0dXJlUmVjb2du
aXplciBtX2lubmVyR2VzdHVyZVJlY29nbml6ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMGEzYTFkODBjODM1ZWUzZjNlOWVkMjhjYmNkNmJlYzRlM2FlMjMw
MC4uNjI5ZWYwNzExZTg0MjNkYzEyOTg5OTNmNGUwNTQ1ZTcwYWY1Mzk1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNi0wMSAgUm9iZXJ0IEtyb2Vn
ZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBnZXN0dXJlIHJlY29n
bml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMg
Zm9yIHRoZSBiYXNpYyBjaHJvbWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJlY29nbml6ZXIuCisKKyAg
ICAgICAgKiB0ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpJbnNwZWN0
YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFi
bGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpzaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpmaXJzdFRvdWNoUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpzZXRG
aXJzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OmZpcnN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rh
YmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2V0TGFzdFRvdWNoVGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6Omxhc3RUb3VjaFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpl
ZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjp1cGRhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjphZGRFZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpC
dWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlRlc3RHZXN0dXJlUmVj
b2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlNldFVw
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6VGVhckRvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjg3Nzg4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNDRlM2EwYjJl
NTFjZDdmZWQyZDAzMjk5NjVlMTE3ZDk3ZjdiODA4OC4uMjIyZDU4N2MyMDY3M2QxMmVkZjliNmNj
YjY4MzJiYjc2Y2MwYmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2
ICs1Myw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBb
CiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0
ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Jbm5lckdlc3R1cmVSZWNv
Z25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lubmVyR2VzdHVy
ZVJlY29nbml6ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDhjNjkxZTAxMDk4NWYzMzlkYjZmOTFk
OThmNGZkN2QwYWRlN2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAKQEAgLTAsMCArMSwyNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVt
LmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25p
emVyIDogcHVibGljIElubmVyR2VzdHVyZVJlY29nbml6ZXIgeworcHVibGljOgorICAgIEluc3Bl
Y3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcigpCisgICAgICAgIDogV2ViQ29yZTo6SW5uZXJH
ZXN0dXJlUmVjb2duaXplcigpCisgICAgeworICAgIH0KKworICAgIGludCBzaWduYXR1cmUoU3Rh
dGUgZ2VzdHVyZVN0YXRlLCB1bnNpZ25lZCBpZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0
b3VjaFR5cGUsIGJvb2wgaGFuZGxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjpzaWduYXR1cmUoZ2VzdHVyZVN0YXRlLCBpZCwgdG91Y2hUeXBlLCBoYW5k
bGVkKTsKKyAgICB9OworCisgICAgSW50UG9pbnQgZmlyc3RUb3VjaFBvc2l0aW9uKCkgeyByZXR1
cm4gbV9maXJzdFRvdWNoUG9zaXRpb247IH07CisKKyAgICB2b2lkIHNldEZpcnN0VG91Y2hUaW1l
KGRvdWJsZSB0KSB7IG1fZmlyc3RUb3VjaFRpbWUgPSB0OyB9OworICAgIGRvdWJsZSBmaXJzdFRv
dWNoVGltZSgpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFRpbWU7IH07CisKKyAgICB2b2lkIHNldExh
c3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBkb3Vi
bGUgbGFzdFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fbGFzdFRvdWNoVGltZTsgfTsKKworICAgIElu
bmVyR2VzdHVyZVJlY29nbml6ZXI6Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZWRnZUZ1bmN0
aW9uKGludCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZUZ1bmN0aW9ucy5nZXQo
aGFzaCk7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWYWx1ZXMoZG91YmxlIGQs
IGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCAmcCkKKyAgICB7CisgICAgICAgIElubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OnVwZGF0ZVZhbHVlcyhkLCBwKTsKKyAgICB9OworCisgICAgdm9pZCBhZGRF
ZGdlRnVuY3Rpb24oU3RhdGUgc3RhdGUsIHVuc2lnbmVkIGZpbmdlciwgUGxhdGZvcm1Ub3VjaFBv
aW50OjpTdGF0ZSB0b3VjaFN0YXRlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgR2Vz
dHVyZVRyYW5zaXRpb25GdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIElubmVyR2Vz
dHVyZVJlY29nbml6ZXI6OmFkZEVkZ2VGdW5jdGlvbihzdGF0ZSwgZmluZ2VyLCB0b3VjaFN0YXRl
LCB0b3VjaEhhbmRsZWRCeUphdmFTY3JpcHQsIGZ1bmN0aW9uKTsKKyAgICB9OworfTsKKworY2xh
c3MgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3Jt
VG91Y2hQb2ludCB7CitwdWJsaWM6CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KCk7
CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KGludCB4LCBpbnQgeSk7CisKKyAgICB2
b2lkIHNldFgoaW50IHgpCisgICAgeworICAgICAgICBtX3Bvcy5zZXRYKHgpOworICAgICAgICBt
X3NjcmVlblBvcy5zZXRYKHgpOworICAgIH07CisKKyAgICB2b2lkIHNldFkoaW50IHkpCisgICAg
eworICAgICAgICBtX3Bvcy5zZXRZKHkpOworICAgICAgICBtX3NjcmVlblBvcy5zZXRZKHkpOwor
ICAgIH07Cit9OworCitCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRm
b3JtVG91Y2hQb2ludCgpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRmb3Jt
VG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQ6Onplcm8o
KTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50Ojp6ZXJvKCk7Cit9OworCitCdWlsZGFibGVQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludChpbnQgeCwgaW50
IHkpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQoeCwgeSk7CisgICAgbV9zY3Jl
ZW5Qb3MgPSBJbnRQb2ludCh4LCB5KTsKK307CisKKworY2xhc3MgVGVzdEdlc3R1cmVSZWNvZ25p
emVyIDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFRlc3RHZXN0dXJlUmVj
b2duaXplcigpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeyB9Cit9OworCitURVNUX0YoVGVzdEdlc3R1
cmVSZWNvZ25pemVyLCBoYXNoKQoreworICAgIEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2du
aXplciB0ZXN0R207CisgICAgY29uc3QgdW5zaWduZWQgRmlyc3RGaW5nZXIgPSAwOworICAgIGNv
bnN0IHVuc2lnbmVkIFNlY29uZEZpbmdlciA9IDE7CisKKyAgICBBU1NFUlRfRVEoMSArIDAsIHRl
c3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJlLCBGaXJzdEZp
bmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCBmYWxzZSkpOworCisgICAg
QVNTRVJUX0VRKDEgKyAoKDggfCAxKSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlRvdWNoUHJlc3NlZCwgdHJ1ZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoKDB4MTAwMDAgfCAy
KSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpQZW5kaW5n
U3ludGhldGljQ2xpY2ssIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92
ZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgweDIwMDAwIDw8IDEpLCB0ZXN0R20u
c2lnbmF0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlNjcm9sbCwgRmlyc3RGaW5nZXIsIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9F
USgxICsgKCgweDIwMDAwIHwgMSkgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJl
UmVjb2duaXplcjo6U2Nyb2xsLCBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFByZXNzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgoMHgyMDAwMCB8IDB4MTAg
fCA4IHwgMSkgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
U2Nyb2xsLCBTZWNvbmRGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCB0
cnVlKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIHN0YXRlKQoreworICAg
IEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplciB0ZXN0R207CisKKyAgICBBU1NFUlRf
RVEoMCwgdGVzdEdtLnN0YXRlKCkpOworICAgIHRlc3RHbS5zZXRTdGF0ZShJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIEFTU0VSVF9FUShJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2ssIHRlc3RHbS5zdGF0ZSgpKTsK
K30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbnNpZGVNYW5oYXR0YW5TcXVh
cmUpCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyIGdtOworICAgIEJ1
aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwOworCisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmly
c3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNo
UG9zaXRpb24oKS55KCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAgcC5zZXRZKDE5Ljk5OSk7
CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAg
cC5zZXRYKDE5Ljk5OSk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJ
bnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDIwLjApOworICAgIHAuc2V0
WSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7
CisKKyAgICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoMjAuMCk7CisgICAgQVNTRVJUX0ZBTFNF
KGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgtMjAuMCk7Cisg
ICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1
YXJlKHApKTsKKworICAgIHAuc2V0WCgwLjApOworICAgIHAuc2V0WSgtMjAuMCk7CisgICAgQVNT
RVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKK30KKworVEVTVF9GKFRl
c3RHZXN0dXJlUmVjb2duaXplciwgaXNJbkNsaWNrVGltZVdpbmRvdykKK3sKKyAgICBJbnNwZWN0
YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXIgZ207CisKKyAgICBnbS5zZXRGaXJzdFRvdWNoVGlt
ZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAu
MCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjAxMDAwMSk7CisgICAgQVNTRVJUX1RSVUUo
Z20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAu
MCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjggLSAuMDAwMDAwMDEpOworICAgIEFTU0VS
VF9UUlVFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisKKyAgICBnbS5zZXRGaXJzdFRvdWNo
VGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC44MDAwMSk7CisgICAgQVNTRVJU
X0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVy
ZVJlY29nbml6ZXIsIGFkZEVkZ2VGdW5jdGlvbikKK3sKKyAgICBJbnNwZWN0YWJsZUlubmVyR2Vz
dHVyZVJlY29nbml6ZXIgZ207CisgICAgZ20uYWRkRWRnZUZ1bmN0aW9uKElubmVyR2VzdHVyZVJl
Y29nbml6ZXI6OlNjcm9sbCwgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCB0
cnVlLCAoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik0
MDk2KTsKKworICAgIEFTU0VSVF9FUSgoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6R2VzdHVyZVRy
YW5zaXRpb25GdW5jdGlvbik0MDk2LCBnbS5lZGdlRnVuY3Rpb24oZ20uc2lnbmF0dXJlKElubmVy
R2VzdHVyZVJlY29nbml6ZXI6OlNjcm9sbCwgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJl
bGVhc2VkLCB0cnVlKSkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCB1cGRh
dGVWYWx1ZXMpCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyIGdtOwor
CisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VR
KDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoSW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6Tm9HZXN0dXJlLCBnbS5zdGF0ZSgpKTsKKworICAgIEJ1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludCBwMSgxMCwgMTEpOworICAgIGdtLnVwZGF0ZVZhbHVlcygxLjEsIHAxKTsKKwor
ICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NF
UlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJUX0VRKDEu
MSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFzdFRvdWNo
VGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRv
dWNoUG9pbnQgcDIoMTMsIDE0KTsKKyAgICBnbS5zZXRTdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25p
emVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIGdtLnVwZGF0ZVZhbHVlcygyLjAsIHAy
KTsKKworICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAg
ICBBU1NFUlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJU
X0VRKDEuMSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDIuMCAtIDEuMSwg
Z20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBCdWlsZGFi
bGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDMoMjMsIDM0KTsKKyAgICBnbS5zZXRTdGF0ZShJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUpOworICAgIGdtLnVwZGF0ZVZhbHVlcygzLjAsIHAz
KTsKKworICAgIEFTU0VSVF9FUSgyMywgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAg
ICBBU1NFUlRfRVEoMzQsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJU
X0VRKDMuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFz
dFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95681</attachid>
            <date>2011-06-01 15:55:33 -0700</date>
            <delta_ts>2011-06-01 16:01:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110601184938.patch</filename>
            <type>text/plain</type>
            <size>47140</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MzUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MDFjYTA4M2RiYTc4ZDU0YWZiNGRl
MTRkNTQyNzNkY2Q1MjFjYmI5Li4xZmNkZjMzMmU0MGQ2OGNhYTc3ZGUwMjg3MGQwMTZlYmFhNDVi
MzU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMDEgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBTaG93cyB0aGF0IHRoZSBiYXNpYyBD
aHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3RseSBjb252ZXJ0IGEgdG91Y2gKKyAg
ICAgICAgZXZlbnQgc2VxdWVuY2UgaW50byBhIHNlcXVlbmNlIG9mIHN5bnRoZXRpYyBtb3VzZSBl
dmVudHMgZm9yIGNsaWNraW5nIGFuZAorICAgICAgICBzY3JvbGxpbmcuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0
dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDExLTA2LTAxICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNraXAgZWRpdGluZy9wYXN0ZWJvYXJk
L2RyYWctZHJvcC1saXN0Lmh0bWwgb24gR1RLIGFmdGVyIHI4Nzc3OApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjhkZWJhYjk0ZjE4OTBjOGQ3YmE5ZjcwNTRlMzYyMWZi
NThmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGhpcyB0
ZXN0cyBiYXNpYyBzaW5nbGUgdG91Y2ggZ2VzdHVyZSBnZW5lcmF0aW9uLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworR2VzdHVyZSBtYW5hZ2VyIG5vdCBpbXBsZW1lbnRlZCBvbiB0
aGlzIHBsYXRmb3JtLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNo
LWdlc3R1cmUtY2xpY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNo
LWdlc3R1cmUtY2xpY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTA3ZTRhMjlhZDc1YWIyMmYzMGY4NzQx
NDk3NTlhNGYyMmQyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sCkBAIC0wLDAgKzEsMTE1IEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI3Rv
dWNodGFyZ2V0IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3Jv
dW5kOiBibHVlOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgp
OyI+Cis8ZGl2IGlkPSJ0b3VjaHRhcmdldCI+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgY2xpY2tFdmVudHNSZWNl
aXZlZCA9IDA7Cit2YXIgZXhwZWN0ZWRNb3VzZUV2ZW50cyA9IDQ7Cit2YXIgdG91Y2hFdmVudHNS
ZWNlaXZlZCA9IDA7Cit2YXIgbW91c2VFdmVudHNSZWNlaXZlZCA9IDA7Cit2YXIgZXZlbnRUeXBl
cyA9IFsgJ21vdXNlbW92ZScsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdjbGljaycgXTsKKwor
ZnVuY3Rpb24gZ2VzdHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAgaWYgKHdpbmRvdy5l
dmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUn
LCBldmVudFR5cGVzW21vdXNlRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2
ZW50LmNsaWVudFgnLCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LmNsaWVudFknLCAn
MTInKTsKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LnNoaWZ0S2V5IiwgInRydWUiKTsKKyAgICAg
ICAgc2hvdWxkQmUoImV2ZW50LmFsdEtleSIsICJ0cnVlIik7CisgICAgICAgIHNob3VsZEJlKCJl
dmVudC5jdHJsS2V5IiwgImZhbHNlIik7CisgICAgICAgIHNob3VsZEJlKCJldmVudC5tZXRhS2V5
IiwgImZhbHNlIik7CisgICAgICAgIG1vdXNlRXZlbnRzUmVjZWl2ZWQrKzsKKyAgICB9IGVsc2Ug
eworICAgICAgICBkZWJ1ZyhldmVudC50eXBlKTsKKyAgICAgICAgZGVidWcoZXZlbnQuY2xpZW50
WCk7CisgICAgICAgIGRlYnVnKGV2ZW50LmNsaWVudFkpOworICAgIH0KK30KKworLy8gQmVjYXVz
ZSB3ZSBtYXkgbm90IGhhdmUgYSBnZXN0dXJlIHJlY29nbml6ZXIsIHdlIHNlbmQgYSBrZXkgcHJl
c3MKKy8vIGV2ZW50IHRvIGVuZCB0aGUgdGVzdCB3aXRob3V0IHRlbXBvcmFsIGZsYWtpbmVzcy4K
K2Z1bmN0aW9uIHF1aXRLZXlUb0VuZFRlc3QoZXZlbnQpIHsKKyAgICBlbmRUZXN0KCk7Cit9CisK
Ky8vIExvZyB0aGF0IHdlIHN0aWxsIGdvdCB0aGUgdG91Y2ggZXZlbnRzLgorZnVuY3Rpb24gdG91
Y2hFdmVudENhbGxiYWNrKGV2ZW50KSB7CisgICAgdG91Y2hFdmVudHNSZWNlaXZlZCsrOworICAg
IGRlYnVnKCdoYXZlIHJlY2VpdmVkOiAnICsgdG91Y2hFdmVudHNSZWNlaXZlZCArICcgdG91Y2gg
ZXZlbnRzJyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHNpbmdsZVRvdWNoU2Vx
dWVuY2UoKQoreworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVu
dFNlbmRlci5hZGRUb3VjaFBvaW50KDEwLCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFy
dCgpOworCisgICAgLy8gSW5zZXJ0IHNvbWUgZGVsYXkuIE5COiB0aGlzIHZhbHVlIGRlcGVuZHMg
b24gbWluQ2xpY2tEb3duVGltZSwKKyAgICAvLyBtYXhDbGlja0Rvd25UaW1lIGZyb20gR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2FyZCgyMCk7
CisgICAgZXZlbnRTZW5kZXIuc2V0VG91Y2hNb2RpZmllcigic2hpZnQiLCB0cnVlKTsKKyAgICBl
dmVudFNlbmRlci5zZXRUb3VjaE1vZGlmaWVyKCJhbHQiLCB0cnVlKTsKKworICAgIGV2ZW50U2Vu
ZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRvdWNoRW5kKCk7Cit9
CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGlmIChtb3VzZUV2ZW50c1JlY2VpdmVkIDwg
ZXhwZWN0ZWRNb3VzZUV2ZW50cykgeworICAgICAgICBkZWJ1ZygnR2VzdHVyZSBtYW5hZ2VyIG5v
dCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLicpOworICAgIH0KKyAgICAvLyBCYWlsLgor
ICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3Vj
aHRhcmdldCcpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBnZXN0dXJl
RXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIo
Im1vdXNldXAiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZW1vdmUiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBxdWl0S2V5VG9FbmRUZXN0LCBm
YWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaEV2ZW50
Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwg
dG91Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRv
dWNoZW5kIiwgdG91Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2Ny
aXB0aW9uKCJUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24u
Iik7CisgICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKSB7CisgICAgICAg
ICAgICBzaW5nbGVUb3VjaFNlcXVlbmNlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5sZWFw
Rm9yd2FyZCgxMCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCcgJyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVlLiAg
VGFwIG9uIHRoZSBibHVlIHJlY3QgdG8gbG9nLiIpCisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90
b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJi
YjY2YTVlMTA4MGE5YjBjYWJjZjEzYjlhZjQzNGFkMmQ4OGIxNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVy
YXRpb24gZnJvbSB0b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBwYXNz
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1hbmFnZXIgbm90IGlt
cGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDE3OTMzMjQ3YjFmNjQ0ZDgwNTc0NGJlNjNiNDZlYzAyZWE4NWUzYQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0
bWwKQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxz
dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7Cisg
IGhlaWdodDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFja2dyb3VuZDogd2hp
dGU7Cit9CisKKyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOwor
ICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKKyAgb3ZlcmZs
b3cteTogc2Nyb2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3BsYXk6IGJsb2NrOwor
fQorCisjZ3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIGJh
Y2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQorCisj
cmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4OworICBiYWNrZ3JvdW5k
OiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK3RkIHsKKyAgcGFk
ZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJtYXJnaW46MCIg
b25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKyAgPGRpdiBpZD0i
bW92aW5nYm94Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMHB4Ij4KKyAg
ICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+PC90ZD4KKyAgICAg
ICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAgPC90cj4KKyAgICAg
IDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAg
ICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8L3RyPgorICAgIDwv
dGFibGU+CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisK
K3ZhciBtb3ZpbmdkaXY7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAyOwordmFyIHNjcm9s
bHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnOTAnLCAnOTAnXTsKK3ZhciBz
Y3JvbGxBbW91bnRZID0gWycwJywgJzk1J107CisKK2Z1bmN0aW9uIGNoZWNrU2Nyb2xsT2Zmc2V0
KCkKK3sKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92aW5nYm94
Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZSgnbW92
aW5nZGl2LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3VycmVkXSk7CisgICAg
ICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFtb3VudFhbc2Nyb2xs
c09jY3VycmVkXSk7CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAgIH0KKworICAgIGlm
IChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsKKyAgICAgICAgLy8g
SWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZWNvbmRUb3VjaERy
YWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAoZXZlbnQpCit7Cisg
ICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGRlYnVnKCdtb3Zl
ZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyArIGV2ZW50LmN1cnJl
bnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXYW50IHRoZSBkZWZh
dWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdTZXF1ZW5jZSgpCit7
CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNo
UG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg5NSwgMTIpOworICAgIGV2
ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUgZGl2IHRvIHRoZSBs
ZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgNSwgMTIpOworICAgIGV2
ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9p
bnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxh
eW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlvbiBzZWNvbmRUb3Vj
aERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJlIik7CisgICAgZXZl
bnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9p
bnQoMTIsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBTY3Jv
bGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQo
MCwgMTIsIDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5k
ZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKwor
ICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitm
dW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0dXJlIG1hbmFnZXIg
bm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7CisgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRl
c2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0b3Vj
aCBldmVudHMuICcgKworICAgICAgICAgICAgJ1NxdWFyZSBpcyAobW9zdGx5KSBncmVlbiBvbiBw
YXNzJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMpCisgICAg
ICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlz
IHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUb3VjaCBzY3JvbGwgdGhlIHJlZCByZWN0
IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5k
JywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKworCisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGlj
ay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYwODQ3ODM1ZWI4NWIyNjAxZmZlZTRiNGNmYTgw
MzhlMTUyMzJmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMzkgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdlc3R1cmUgZ2Vu
ZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2hhdmUgcmVjZWl2ZWQ6
IDEgdG91Y2ggZXZlbnRzCitoYXZlIHJlY2VpdmVkOiAyIHRvdWNoIGV2ZW50cworUEFTUyBldmVu
dC50eXBlIGlzICJtb3VzZW1vdmUiCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZl
bnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50
LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQu
bWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50eXBlIGlzICJtb3VzZWRvd24iCitQQVNTIGV2
ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5z
aGlmdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0
cmxLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50
eXBlIGlzICJtb3VzZXVwIgorUEFTUyBldmVudC5jbGllbnRYIGlzIDEwCitQQVNTIGV2ZW50LmNs
aWVudFkgaXMgMTIKK1BBU1MgZXZlbnQuc2hpZnRLZXkgaXMgdHJ1ZQorUEFTUyBldmVudC5hbHRL
ZXkgaXMgdHJ1ZQorUEFTUyBldmVudC5jdHJsS2V5IGlzIGZhbHNlCitQQVNTIGV2ZW50Lm1ldGFL
ZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQudHlwZSBpcyAiY2xpY2siCitQQVNTIGV2ZW50LmNsaWVu
dFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtleSBp
cyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkgaXMg
ZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWY5OGJk
YjBiNWRlN2EyMjI5MTg2ZGZkZWM4NjA2YWYwZjU3ODQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgdGVzdHMgc2Nyb2xs
IGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJlIGlzIChtb3N0bHkp
IGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2ZpcnN0IGdl
c3R1cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1vdmluZ2Rpdi5zY3Jv
bGxMZWZ0IGlzIDkwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlz
IDk1CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVjYTM5MzE0MDBl
M2ZhNTdkMTQ4MWUyNmYxMWY3MjQwNmRmYzVmNTMuLjJhNzM2OGNmOWNmNzhhZDkyNjUxNjI3ODA0
NmJlYWQ2NDRhNjA3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMS0wNi0wMSAg
Um9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBn
ZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZHMg
YSBiYXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtLiBBZGRz
IGFuIGVudHJ5CisgICAgICAgIHBvaW50IHRvIHRoZSBHZXN0dXJlUmVjb2duaXplciB0byByZXNl
dCBhbnkgaW50ZXJuYWwgc3RhdGUgb24gYSBwYWdlIHJlc2V0LgorICAgICAgICBSZXNldHRpbmcg
dGhlIGdlc3R1cmUgcmVjb2duaXplciBvbiBwYWdlIGxvYWQgaXMgbmVjZXNhcnkgZm9yIHJlbGlh
YmxlCisgICAgICAgIGxheW91dCB0ZXN0IGV4ZWN1dGlvbiBhbmQgaW1wcm92ZXMgZ2VzdHVyZSBy
ZWNvZ25pemVyIG9wZXJhdGlvbmFsCisgICAgICAgIHJvYnVzdG5lc3MuCisKKyAgICAgICAgQWRk
ZWQgYW4gYWRkaXRpb25hbCBjb25zdHJ1Y3RvciB0byBwZXJtaXQgYnVpbGRpbmcgYSBzeW50aGV0
aWMKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50LgorCisgICAgICAgIFNtYWxsIG1vZGlmaWNh
dGlvbnMgdG8gdGhlIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgYXMgcmVxdWlyZWQgdG8KKyAg
ICAgICAgaW1wbGVtZW50IHRoZSBzaW1wbGUgQ2hyb21pdW0gcGxhdGZvcm0gZ2VzdHVyZSByZWNv
Z25pemVyLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJl
LWNsaWNrLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnJlc2V0R2Vz
dHVyZVJlY29nbml6ZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNl
dCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6OklubmVyR2VzdHVyZVJlY29nbml6
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6fklubmVyR2VzdHVyZVJl
Y29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6YWRk
RWRnZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6
OmlzSW5DbGlja1RpbWVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6ZGlzcGF0Y2hTeW50aGV0aWNDbGljayk6CisgICAgICAgIChX
ZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2Nyb2xsVmlh
VG91Y2hNb3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
dXBkYXRlVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6
OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaERvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6bm9HZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsaWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzQ2xpY2tPclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjppblNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcjo6UGxhdGZvcm1HZXN0dXJl
UmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVy
Ojp+UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJl
UmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06On5HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXpl
cjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6cHJvY2Vz
c1RvdWNoRXZlbnRGb3JHZXN0dXJlKToKKwogMjAxMS0wNi0wMSAgQW5kcmFzIEJlY3NpICA8YWJl
Y3NpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6Fj
LgpAQCAtNTY5LDcgKzYyNyw2IEBACiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlubk1hdGhVdGlscy5jcHA6CiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1Rp
bGluZ0RhdGEuY3BwOgogCi09PT09PT09CiAyMDExLTA1LTMxICBSb2IgQnVpcyAgPHJidWlzQHJp
bS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpAQCAtOTQ0LDcgKzEw
MDEsNiBAQAogICAgICAgICAoV2ViQ29yZTo6aXNTY2hlbWVDaGFyKToKICAgICAgICAgSW5jbHVk
ZSAnKycgaW4gdGhlIGxpc3Qgb2YgdmFsaWQgY2hhcmFjdGVycy4KIAotPj4+Pj4+PiAucjg3Nzc4
CiAyMDExLTA1LTMwICBBbmRyZXkgUGV0cm92ICA8YW5kcmV5LnBldHJvdkBnbWFpbC5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1vcml0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAx
MDAzYjlhZTE3ZDI1MzhkNWUwNmVmYjdmMDE0MGNmMTdmYTFhZjdhLi40N2I3NmEzNjI2MTQ5ZmZm
MmQ2M2VjMGIwZjliYjA2OWFjMDM3NWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NjcsNyArNzY3
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL05vdEltcGxlbWVudGVkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bi5oJywKQEAgLTM4MTMsNiArMzgxMiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vRnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbi5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbkd0ay5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL0tleWJvYXJkQ29kZXMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggYzk4OWNkMDFmNjg4ZDBhOWVhNjc2NjY4NGI1YTZhNzJiNzVlNDg1
Ny4uYmRmYWY4YTk2ODk3ZDRmYmYwNWQ3Mjc0NzUzMGNlY2ZiN2I1NjQ1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzI3NSw2ICszMjc1LDE2IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQp
CiAKICAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KKworI2lmIEVOQUJMRShHRVNUVVJF
X1JFQ09HTklaRVIpCit2b2lkIEV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcigp
Cit7CisgICAgaWYgKG1fZ2VzdHVyZVJlY29nbml6ZXIpCisgICAgICAgIG1fZ2VzdHVyZVJlY29n
bml6ZXItPnJlc2V0KCk7Cit9CisjZW5kaWYKKworCiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKaW5kZXggZGM0M2UzZDgyOTI0ZmM4M2E1YWI5NTA1Y2YwZjQ5ZGZiMDM2
MDFiYi4uNzQ1ZWRkYTRkMmUwZGUxYzNlZTVkMTI5MDE1YzE3N2FhZjVkODU3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNjYsNiArMTY2LDEwIEBAIHB1YmxpYzoKICAgICBi
b29sIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOwogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorICAgIHZvaWQgcmVzZXRHZXN0
dXJlUmVjb2duaXplcigpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKICAg
ICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwog
ICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAppbmRleCBlZjdkMjE1MDUyNzRlNmI2OTgyMDM5Y2FiNjBlMTMyMmUwMWU5OWViLi5m
ZDI5OTJiMWU0ZDIwYzEyY2M3OTA0YThhYTM4NjA0ODc3N2QzN2MxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC0yMzQsNiArMjM0LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpyZXNldCgp
CiAgICAgbV9pc1Zpc3VhbGx5Tm9uRW1wdHkgPSBmYWxzZTsKICAgICBtX2ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dENhbGxiYWNrUGVuZGluZyA9IHRydWU7CiAgICAgbV9tYWludGFpblNjcm9s
bFBvc2l0aW9uQW5jaG9yID0gMDsKKworI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisg
ICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnJlc2V0R2VzdHVyZVJlY29nbml6ZXIoKTsKKyNl
bmRpZgogfQogCiBib29sIEZyYW1lVmlldzo6aXNGcmFtZVZpZXcoKSBjb25zdCAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaAppbmRl
eCA4MDI1ODNmMmEwNTUzYmI3Y2E3M2M3ODVlZGY1YWY4YWMwMWIwYTUwLi4yZjgwNWJkMjYyNzFk
YzE0ZDM5MDQ1M2UzYzkwNmNlMGExNDNiNWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oCkBAIC01Nyw2ICs1Nyw5IEBAIHB1
YmxpYzoKICAgICAvLyBzcGVjaWZpZXMgaWYgdGhlIHxldmVudHwgd2FzIGFjdHVhbGx5IGhhbmRs
ZWQgYnkgfHNvdXJjZXwgKGJ5IHRoZSBKYXZhU2NyaXB0KQogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZXZlbnQgcmVzdWx0ZWQgaW4gZmlyaW5nIGEgc3ludGhldGljIGV2ZW50LgogICAgIHZp
cnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVkKSA9IDA7CisKKyAgICAvLyBDbGVh
cnMgdGhlIEdlc3R1cmVSZWNvZ25pemVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLgorICAgIHZpcnR1
YWwgdm9pZCByZXNldCgpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMzc2NTU1MzNi
ZDQ4ZTMxZjU1MWNlZDJkMzMwNDRhOWJlODg3ZTAwYy4uYTZiN2M1MDcyZmRjYzNkNDcyNGJkMzg0
NDFmMjZmYWEwZWRjZDY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1X
aGVlbEV2ZW50LmgKQEAgLTEwNiw2ICsxMDYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSW50UG9pbnQg
cG9zaXRpb24sIEludFBvaW50IGdsb2JhbFBvc2l0aW9uLCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRl
bHRhWSwgZmxvYXQgd2hlZWxUaWNrc1gsIGZsb2F0IHdoZWVsVGlja3NZLCBQbGF0Zm9ybVdoZWVs
RXZlbnRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBpc0FjY2VwdGVkLCBib29sIHNoaWZ0
S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIG1ldGFLZXkpCisgICAgICAgICAg
ICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9zaXRpb24o
Z2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZGVsdGFYKGRlbHRhWCkKKyAgICAgICAg
ICAgICwgbV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NYKHdoZWVs
VGlja3NYKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NZKHdoZWVsVGlja3NZKQorICAgICAg
ICAgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQorICAgICAgICAgICAgLCBtX2lzQWNj
ZXB0ZWQoaXNBY2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtleSkKKyAg
ICAgICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFs
dEtleSkKKyAgICAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFLZXkpCisjaWYgUExBVEZPUk0oTUFD
KQorICAgICAgICAgICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMoZmFsc2UpCisgICAg
ICAgICAgICAsIG1fcGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQorICAgICAgICAg
ICAgLCBtX21vbWVudHVtUGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKQorICAgICAg
ICAgICAgLCBtX3RpbWVzdGFtcCgwKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
IC8vIFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAgICAgICBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfSAvLyBTY3JlZW4g
Y29vcmRpbmF0ZXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVl
MzJlMzkzM2I2ODQ0MGRlNjBiOWQwMjYzMzFhMmJkYjNjYWEyOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0uY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBjbGljayhJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CitzdGF0aWMg
Ym9vbCBpc0NsaWNrT3JTY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciosIGNvbnN0IFBsYXRm
b3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wgaW5TY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2du
aXplciosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wgbm9HZXN0dXJl
KElubmVyR2VzdHVyZVJlY29nbml6ZXIqLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0
YXRpYyBib29sIHRvdWNoRG93bihJbm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtlIHRoZXNlIGNvbmZpZ3VyYWJsZSBwcm9n
cmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhpbXVtVG91Y2hEb3duRHVyYXRp
b25JblNlY29uZHNGb3JDbGljayA9IDAuODsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWluaW11bVRv
dWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sgPSAwLjAxOworc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtVG91Y2hNb3ZlSW5QaXhlbHNGb3JDbGljayA9IDIwOworCitJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyKCkKKyAgICA6IG1fZmlyc3RUb3VjaFRp
bWUoMC4wKQorICAgICwgbV9zdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUp
CisgICAgLCBtX2xhc3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9ldmVudEhhbmRsZXIoMCkKKyAg
ICAsIG1fY3RybEtleShmYWxzZSkKKyAgICAsIG1fYWx0S2V5KGZhbHNlKQorICAgICwgbV9zaGlm
dEtleShmYWxzZSkKKyAgICAsIG1fbWV0YUtleShmYWxzZSkKK3sKKyAgICBjb25zdCB1bnNpZ25l
ZCBGaXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBS
ZWxlYXNlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDsKKyAgICBjb25zdCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRv
dWNoUHJlc3NlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIE1vdmVkID0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQ
b2ludDo6U3RhdGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9u
YXJ5OworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgQ2FuY2VsbGVkID0gUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKworICAgIGFkZEVkZ2VGdW5jdGlvbihO
b0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxzZSwgdG91Y2hEb3duKTsKKyAgICBh
ZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgQ2FuY2Vs
bGVkLCBmYWxzZSwgbm9HZXN0dXJlKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRo
ZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgUmVsZWFzZWQsIGZhbHNlLCBjbGljayk7CisgICAgYWRk
RWRnZUZ1bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIsIE1vdmVkLCBm
YWxzZSwgaXNDbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRo
ZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgU3RhdGlvbmFyeSwgZmFsc2UsIGlzQ2xpY2tPclNjcm9s
bCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIE1vdmVkLCBmYWxz
ZSwgaW5TY3JvbGwpOworICAgIGFkZEVkZ2VGdW5jdGlvbihTY3JvbGwsIEZpcnN0RmluZ2VyLCBS
ZWxlYXNlZCwgZmFsc2UsIG5vR2VzdHVyZSk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwg
Rmlyc3RGaW5nZXIsIENhbmNlbGxlZCwgZmFsc2UsIG5vR2VzdHVyZSk7Cit9CisKK3ZvaWQgSW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQoreworICAgIG1fZmlyc3RUb3VjaFRpbWUgPSAw
LjA7CisgICAgbV9zdGF0ZSA9IElubmVyR2VzdHVyZVJlY29nbml6ZXI6Ok5vR2VzdHVyZTsKKyAg
ICBtX2xhc3RUb3VjaFRpbWUgPSAwLjA7CisgICAgbV9ldmVudEhhbmRsZXIgPSAwOworfQorCitJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjp+SW5uZXJHZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisK
K3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6YWRkRWRnZUZ1bmN0aW9uKFN0YXRlIHN0YXRl
LCB1bnNpZ25lZCBmaW5nZXJJZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0b3VjaFR5cGUs
IGJvb2wgdG91Y2hIYW5kbGVkQnlKYXZhU2NyaXB0LCBHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9u
IGYpCit7CisgICAgbV9lZGdlRnVuY3Rpb25zLmFkZChzaWduYXR1cmUoc3RhdGUsIGZpbmdlcklk
LCB0b3VjaFR5cGUsIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCksIGYpOworfQorCitib29sIElu
bmVyR2VzdHVyZVJlY29nbml6ZXI6OmlzSW5DbGlja1RpbWVXaW5kb3coKQoreworICAgIGRvdWJs
ZSBkdXJhdGlvbihtX2xhc3RUb3VjaFRpbWUgLSBtX2ZpcnN0VG91Y2hUaW1lKTsKKyAgICByZXR1
cm4gZHVyYXRpb24gPj0gbWluaW11bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sg
JiYgZHVyYXRpb24gPCBtYXhpbXVtVG91Y2hEb3duRHVyYXRpb25JblNlY29uZHNGb3JDbGljazsK
K30KKworYm9vbCBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjppc0luc2lkZU1hbmhhdHRhblNxdWFy
ZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50KQoreworICAgIGludCBtYW5oYXR0YW5E
aXN0YW5jZSA9IGFicyhwb2ludC5wb3MoKS54KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi54KCkp
ICsgYWJzKHBvaW50LnBvcygpLnkoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLnkoKSk7CisgICAg
cmV0dXJuIG1hbmhhdHRhbkRpc3RhbmNlIDwgbWF4aW11bVRvdWNoTW92ZUluUGl4ZWxzRm9yQ2xp
Y2s7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6ZGlzcGF0Y2hTeW50aGV0aWND
bGljayhjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50KQoreworICAgIFBsYXRmb3JtTW91
c2VFdmVudCBmYWtlTW91c2VNb3ZlKHBvaW50LnBvcygpLCBwb2ludC5zY3JlZW5Qb3MoKSwgTm9C
dXR0b24sIE1vdXNlRXZlbnRNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBtX3NoaWZ0S2V5LCBt
X2N0cmxLZXksIG1fYWx0S2V5LCBtX21ldGFLZXksIG1fbGFzdFRvdWNoVGltZSk7CisgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZURvd24ocG9pbnQucG9zKCksIHBvaW50LnNjcmVlblBv
cygpLCBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50UHJlc3NlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBt
X3NoaWZ0S2V5LCBtX2N0cmxLZXksIG1fYWx0S2V5LCBtX21ldGFLZXksIG1fbGFzdFRvdWNoVGlt
ZSk7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKHBvaW50LnBvcygpLCBwb2lu
dC5zY3JlZW5Qb3MoKSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFJlbGVhc2VkLCAvKiBjbGlja0Nv
dW50ICovIDEsIG1fc2hpZnRLZXksIG1fY3RybEtleSwgbV9hbHRLZXksIG1fbWV0YUtleSwgbV9s
YXN0VG91Y2hUaW1lKTsKKworICAgIG1fZXZlbnRIYW5kbGVyLT5tb3VzZU1vdmVkKGZha2VNb3Vz
ZU1vdmUpOworICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZmFrZU1v
dXNlRG93bik7CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZh
a2VNb3VzZVVwKTsKK30KKworYm9vbCBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpwcm9jZXNzVG91
Y2hFdmVudEZvckdlc3R1cmUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCwgRXZlbnRI
YW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxlZCkKK3sKKyAgICBtX2V2ZW50SGFuZGxl
ciA9IGV2ZW50SGFuZGxlcjsKKyAgICBtX2N0cmxLZXkgPSBldmVudC5jdHJsS2V5KCk7CisgICAg
bV9hbHRLZXkgPSBldmVudC5hbHRLZXkoKTsKKyAgICBtX3NoaWZ0S2V5ID0gZXZlbnQuc2hpZnRL
ZXkoKTsKKyAgICBtX21ldGFLZXkgPSBldmVudC5tZXRhS2V5KCk7CisKKyAgICBjb25zdCBWZWN0
b3I8UGxhdGZvcm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91Y2hQb2ludHMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcCA9IHBvaW50c1tpXTsKKyAgICAgICAgdXBkYXRl
VmFsdWVzKGV2ZW50LnRpbWVzdGFtcCgpLCBwKTsKKworICAgICAgICBpZiAoR2VzdHVyZVRyYW5z
aXRpb25GdW5jdGlvbiBlZiA9IG1fZWRnZUZ1bmN0aW9ucy5nZXQoc2lnbmF0dXJlKG1fc3RhdGUs
IHAuaWQoKSwgcC5zdGF0ZSgpLCBoYW5kbGVkKSkpCisgICAgICAgICAgICBoYW5kbGVkID0gKCpl
ZikodGhpcywgcCk7CisgICAgfQorICAgIHJldHVybiBoYW5kbGVkOworfQorCit2b2lkIElubmVy
R2VzdHVyZVJlY29nbml6ZXI6OnNjcm9sbFZpYVRvdWNoTW90aW9uKGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYgdG91Y2hQb2ludCkKK3sKKyAgICBmbG9hdCBkZWx0YVgodG91Y2hQb2ludC5wb3Mo
KS54KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi54KCkpOworICAgIGZsb2F0IGRlbHRhWSh0b3Vj
aFBvaW50LnBvcygpLnkoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLnkoKSk7CisKKyAgICAvLyBG
SVhNRTogQ29udmVydCB0byBnZXN0dXJlIGV2ZW50cyB3aGVuIHRoZXkgaGFuZGxlIHN1YmZyYW1l
cy4KKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudCh0b3VjaFBvaW50
LnBvcygpLCB0b3VjaFBvaW50LnNjcmVlblBvcygpLCBkZWx0YVgsIGRlbHRhWSwgZGVsdGFYIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KDEyMCksIGRlbHRhWSAvIHN0YXRpY19jYXN0PGZsb2F0PigxMjAp
LCBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgLyogaXNBY2NlcHRlZCAqLyBmYWxzZSwgbV9zaGlm
dEtleSwgbV9jdHJsS2V5LCBtX2FsdEtleSwgbV9tZXRhS2V5KTsKKyAgICBtX2V2ZW50SGFuZGxl
ci0+aGFuZGxlV2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsKKyAgICBtX2ZpcnN0VG91
Y2hQb3NpdGlvbiA9IHRvdWNoUG9pbnQucG9zKCk7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6dXBkYXRlVmFsdWVzKGNvbnN0IGRvdWJsZSB0b3VjaFRpbWUsIGNvbnN0IFBsYXRm
b3JtVG91Y2hQb2ludCYgdG91Y2hQb2ludCkKK3sKKyAgICBtX2xhc3RUb3VjaFRpbWUgPSB0b3Vj
aFRpbWU7CisgICAgaWYgKHN0YXRlKCkgPT0gTm9HZXN0dXJlKSB7CisgICAgICAgIG1fZmlyc3RU
b3VjaFRpbWUgPSB0b3VjaFRpbWU7CisgICAgICAgIG1fZmlyc3RUb3VjaFBvc2l0aW9uID0gdG91
Y2hQb2ludC5wb3MoKTsKKyAgICB9Cit9CisKKy8vIEJ1aWxkcyBhIHNpZ25hdHVyZS4gU2lnbmF0
dXJlcyBhcmUgYXNzZW1ibGVkIGJ5IGpvaW5pbmcgdG9nZXRoZXIgbXVsdGlwbGUgYml0cy4KKy8v
IDEgTFNCIGJpdCBmb3Igc2lnbmF0dXJlID49IDEKKy8vIDMgYml0cyBmb3IgdGhlIHx0b3VjaFR5
cGV8LgorLy8gMSBiaXQgZm9yIHxoYW5kbGVkfAorLy8gMTIgYml0cyBmb3IgfGlkfAorLy8gMTUg
Yml0cyBmb3IgdGhlIHxnZXN0dXJlU3RhdGV8LgordW5zaWduZWQgaW50IElubmVyR2VzdHVyZVJl
Y29nbml6ZXI6OnNpZ25hdHVyZShTdGF0ZSBnZXN0dXJlU3RhdGUsIHVuc2lnbmVkIGlkLCBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwgYm9vbCBoYW5kbGVkKQoreworICAgIEFT
U0VSVCgoaWQgJiAweGZmZikgPT0gaWQpOworICAgIHJldHVybiAxICsgKCh0b3VjaFR5cGUgJiAw
eDcpIDw8IDEgfCAoaGFuZGxlZCA/IDEgPDwgNCA6IDApIHwgKChpZCAmIDB4ZmZmKSA8PCA1ICkg
fCAoZ2VzdHVyZVN0YXRlIDw8IDE3KSk7Cit9CisKK3N0YXRpYyBib29sIHRvdWNoRG93bihJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JikKK3sKKyAgICBnZXN0dXJlUmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0dXJl
UmVjb2duaXplcjo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgbm9HZXN0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXIqIGdlc3R1cmVSZWNvZ25p
emVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAgIGdlc3R1cmVSZWNvZ25pemVy
LT5yZXNldCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgY2xpY2soSW5u
ZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyLT5pc0luQ2xpY2tU
aW1lV2luZG93KCkgJiYgZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJl
KHBvaW50KSkgeworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0
dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJlKTsKKyAgICAgICAgZ2VzdHVyZVJlY29nbml6ZXItPmRp
c3BhdGNoU3ludGhldGljQ2xpY2socG9pbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIG5vR2VzdHVyZShnZXN0dXJlUmVjb2duaXplciwgcG9pbnQpOworfQorCitz
dGF0aWMgYm9vbCBpc0NsaWNrT3JTY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVy
ZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcG9pbnQpCit7CisgICAgaWYg
KGdlc3R1cmVSZWNvZ25pemVyLT5pc0luQ2xpY2tUaW1lV2luZG93KCkgJiYgZ2VzdHVyZVJlY29n
bml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHBvaW50KSkgeworICAgICAgICBnZXN0dXJl
UmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6UGVuZGluZ1N5bnRo
ZXRpY0NsaWNrKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwb2lu
dC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCAmJiAhZ2VzdHVyZVJl
Y29nbml6ZXItPmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHBvaW50KSkgeworICAgICAgICBnZXN0
dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hNb3Rpb24ocG9pbnQpOworICAgICAgICBnZXN0
dXJlUmVjb2duaXplci0+c2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6U2Nyb2xsKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgaW5TY3JvbGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVyZVJlY29nbml6
ZXIsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYgcG9pbnQpCit7CisgICAgZ2VzdHVyZVJlY29n
bml6ZXItPnNjcm9sbFZpYVRvdWNoTW90aW9uKHBvaW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyPiBQbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyOjpjcmVhdGUoKQoreworICAgIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0qIGdl
c3R1cmVSZWNvZ25pemVyID0gbmV3IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIoZ2VzdHVyZVJlY29nbml6ZXIpOworfQorCitQbGF0Zm9ybUdlc3R1cmVS
ZWNvZ25pemVyOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KKworUGxhdGZvcm1H
ZXN0dXJlUmVjb2duaXplcjo6flBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIoKQoreworfQorCitH
ZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKKyAg
ICA6IG1faW5uZXJHZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisKK0dlc3R1cmVSZWNvZ25pemVy
Q2hyb21pdW06On5HZXN0dXJlUmVjb2duaXplckNocm9taXVtKCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNGU4NWZi
YjVjY2RlMDQzNDk0OWIyMTg5ODcwNGFjMDA4ZTliMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgK
QEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKKyNk
ZWZpbmUgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdl
c3R1cmVSZWNvZ25pemVyLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKKyNp
bmNsdWRlICJUb3VjaEV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbm5lckdlc3R1cmVSZWNvZ25pemVyIHsKK3B1YmxpYzoK
KyAgICBlbnVtIFN0YXRlIHsKKyAgICAgIE5vR2VzdHVyZSwKKyAgICAgIFBlbmRpbmdTeW50aGV0
aWNDbGljaywKKyAgICAgIFNjcm9sbAorICAgIH07CisKKyAgICB0eXBlZGVmIGJvb2wgKCpHZXN0
dXJlVHJhbnNpdGlvbkZ1bmN0aW9uKShJbm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50Jik7CisKKyAgICB+SW5uZXJHZXN0dXJlUmVjb2duaXplcigpOworCisg
ICAgdm9pZCBkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIGJvb2wgaXNJbkNsaWNrVGltZVdpbmRv
dygpOworICAgIGJvb2wgaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUoY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmLCBFdmVudEhhbmRsZXIqLCBib29sIGhhbmRsZWQpOwor
ICAgIHZvaWQgc2Nyb2xsVmlhVG91Y2hNb3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7
CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSB2YWx1ZSkgeyBtX3N0YXRlID0gdmFsdWU7IH0KKyAg
ICBTdGF0ZSBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KK3Byb3RlY3RlZDoKKyAgICBJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKCk7CisgICAgdm9pZCBhZGRFZGdlRnVuY3Rpb24oU3RhdGUsIHVu
c2lnbmVkIGZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSwgYm9vbCB0b3VjaEhhbmRs
ZWRCeUphdmFTY3JpcHQsIEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pOworICAgIHZvaWQgdXBk
YXRlVmFsdWVzKGRvdWJsZSB0b3VjaFRpbWUsIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmF0dXJlKFN0YXRlLCB1bnNpZ25lZCwgUGxhdGZv
cm1Ub3VjaFBvaW50OjpTdGF0ZSwgYm9vbCk7CisKKyAgICBmcmllbmQgY2xhc3MgR2VzdHVyZVJl
Y29nbml6ZXJDaHJvbWl1bTsKKworICAgIFdURjo6SGFzaE1hcDxpbnQsIEdlc3R1cmVUcmFuc2l0
aW9uRnVuY3Rpb24+IG1fZWRnZUZ1bmN0aW9uczsKKyAgICBJbnRQb2ludCBtX2ZpcnN0VG91Y2hQ
b3NpdGlvbjsKKyAgICBkb3VibGUgbV9maXJzdFRvdWNoVGltZTsKKyAgICBTdGF0ZSBtX3N0YXRl
OworICAgIGRvdWJsZSBtX2xhc3RUb3VjaFRpbWU7CisgICAgRXZlbnRIYW5kbGVyKiBtX2V2ZW50
SGFuZGxlcjsKKworICAgIGJvb2wgbV9jdHJsS2V5OworICAgIGJvb2wgbV9hbHRLZXk7CisgICAg
Ym9vbCBtX3NoaWZ0S2V5OworICAgIGJvb2wgbV9tZXRhS2V5OworfTsKKworY2xhc3MgR2VzdHVy
ZVJlY29nbml6ZXJDaHJvbWl1bSA6IHB1YmxpYyBQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyICB7
CitwdWJsaWM6CisKKyAgICBHZXN0dXJlUmVjb2duaXplckNocm9taXVtKCk7CisgICAgdmlydHVh
bCB+R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0
KCkKKyAgICB7CisgICAgICAgIG1faW5uZXJHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOworICAg
IH07CisgCisgICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIEV2ZW50SGFuZGxlciogZXZlbnRIYW5k
bGVyLCBib29sIGhhbmRsZWQpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbm5lckdlc3R1cmVS
ZWNvZ25pemVyLnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZSh0b3VjaEV2ZW50LCBldmVudEhh
bmRsZXIsIGhhbmRsZWQpOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5uZXJHZXN0dXJlUmVjb2du
aXplciBtX2lubmVyR2VzdHVyZVJlY29nbml6ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMGEzYTFkODBjODM1ZWUzZjNlOWVkMjhjYmNkNmJlYzRlM2FlMjMw
MC4uNjI5ZWYwNzExZTg0MjNkYzEyOTg5OTNmNGUwNTQ1ZTcwYWY1Mzk1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNi0wMSAgUm9iZXJ0IEtyb2Vn
ZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgYSBiYXNpYyBnZXN0dXJlIHJlY29n
bml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisgICAgICAgIEFkZGVkIHVuaXQgdGVzdHMg
Zm9yIHRoZSBiYXNpYyBjaHJvbWl1bSBwbGF0Zm9ybSBnZXN0dXJlIHJlY29nbml6ZXIuCisKKyAg
ICAgICAgKiB0ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpJbnNwZWN0
YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFi
bGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpzaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpmaXJzdFRvdWNoUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpzZXRG
aXJzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OmZpcnN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rh
YmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2V0TGFzdFRvdWNoVGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6Omxhc3RUb3VjaFRpbWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpl
ZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjp1cGRhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjphZGRFZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpzZXRYKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludDo6c2V0WSk6CisgICAgICAgIChXZWJDb3JlOjpC
dWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlRlc3RHZXN0dXJlUmVj
b2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0R2VzdHVyZVJlY29nbml6ZXI6OlNldFVw
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6VGVhckRvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjg3Nzg4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNDRlM2EwYjJl
NTFjZDdmZWQyZDAzMjk5NjVlMTE3ZDk3ZjdiODA4OC4uMjIyZDU4N2MyMDY3M2QxMmVkZjliNmNj
YjY4MzJiYjc2Y2MwYmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Myw2
ICs1Myw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBb
CiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0
ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Jbm5lckdlc3R1cmVSZWNv
Z25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lubmVyR2VzdHVy
ZVJlY29nbml6ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDhjNjkxZTAxMDk4NWYzMzlkYjZmOTFk
OThmNGZkN2QwYWRlN2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAKQEAgLTAsMCArMSwyNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVt
LmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25p
emVyIDogcHVibGljIElubmVyR2VzdHVyZVJlY29nbml6ZXIgeworcHVibGljOgorICAgIEluc3Bl
Y3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcigpCisgICAgICAgIDogV2ViQ29yZTo6SW5uZXJH
ZXN0dXJlUmVjb2duaXplcigpCisgICAgeworICAgIH0KKworICAgIGludCBzaWduYXR1cmUoU3Rh
dGUgZ2VzdHVyZVN0YXRlLCB1bnNpZ25lZCBpZCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSB0
b3VjaFR5cGUsIGJvb2wgaGFuZGxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjpzaWduYXR1cmUoZ2VzdHVyZVN0YXRlLCBpZCwgdG91Y2hUeXBlLCBoYW5k
bGVkKTsKKyAgICB9OworCisgICAgSW50UG9pbnQgZmlyc3RUb3VjaFBvc2l0aW9uKCkgeyByZXR1
cm4gbV9maXJzdFRvdWNoUG9zaXRpb247IH07CisKKyAgICB2b2lkIHNldEZpcnN0VG91Y2hUaW1l
KGRvdWJsZSB0KSB7IG1fZmlyc3RUb3VjaFRpbWUgPSB0OyB9OworICAgIGRvdWJsZSBmaXJzdFRv
dWNoVGltZSgpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFRpbWU7IH07CisKKyAgICB2b2lkIHNldExh
c3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9sYXN0VG91Y2hUaW1lID0gdDsgfTsKKyAgICBkb3Vi
bGUgbGFzdFRvdWNoVGltZSgpIHsgcmV0dXJuIG1fbGFzdFRvdWNoVGltZTsgfTsKKworICAgIElu
bmVyR2VzdHVyZVJlY29nbml6ZXI6Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZWRnZUZ1bmN0
aW9uKGludCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZUZ1bmN0aW9ucy5nZXQo
aGFzaCk7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWYWx1ZXMoZG91YmxlIGQs
IGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCAmcCkKKyAgICB7CisgICAgICAgIElubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OnVwZGF0ZVZhbHVlcyhkLCBwKTsKKyAgICB9OworCisgICAgdm9pZCBhZGRF
ZGdlRnVuY3Rpb24oU3RhdGUgc3RhdGUsIHVuc2lnbmVkIGZpbmdlciwgUGxhdGZvcm1Ub3VjaFBv
aW50OjpTdGF0ZSB0b3VjaFN0YXRlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgR2Vz
dHVyZVRyYW5zaXRpb25GdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIElubmVyR2Vz
dHVyZVJlY29nbml6ZXI6OmFkZEVkZ2VGdW5jdGlvbihzdGF0ZSwgZmluZ2VyLCB0b3VjaFN0YXRl
LCB0b3VjaEhhbmRsZWRCeUphdmFTY3JpcHQsIGZ1bmN0aW9uKTsKKyAgICB9OworfTsKKworY2xh
c3MgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3Jt
VG91Y2hQb2ludCB7CitwdWJsaWM6CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KCk7
CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KGludCB4LCBpbnQgeSk7CisKKyAgICB2
b2lkIHNldFgoaW50IHgpCisgICAgeworICAgICAgICBtX3Bvcy5zZXRYKHgpOworICAgICAgICBt
X3NjcmVlblBvcy5zZXRYKHgpOworICAgIH07CisKKyAgICB2b2lkIHNldFkoaW50IHkpCisgICAg
eworICAgICAgICBtX3Bvcy5zZXRZKHkpOworICAgICAgICBtX3NjcmVlblBvcy5zZXRZKHkpOwor
ICAgIH07Cit9OworCitCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRm
b3JtVG91Y2hQb2ludCgpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRmb3Jt
VG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQ6Onplcm8o
KTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50Ojp6ZXJvKCk7Cit9OworCitCdWlsZGFibGVQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludChpbnQgeCwgaW50
IHkpCit7CisgICAgbV9pZCA9IDA7CisgICAgbV9zdGF0ZSA9IFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hTdGF0aW9uYXJ5OworICAgIG1fcG9zID0gSW50UG9pbnQoeCwgeSk7CisgICAgbV9zY3Jl
ZW5Qb3MgPSBJbnRQb2ludCh4LCB5KTsKK307CisKKworY2xhc3MgVGVzdEdlc3R1cmVSZWNvZ25p
emVyIDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFRlc3RHZXN0dXJlUmVj
b2duaXplcigpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeyB9Cit9OworCitURVNUX0YoVGVzdEdlc3R1
cmVSZWNvZ25pemVyLCBoYXNoKQoreworICAgIEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2du
aXplciB0ZXN0R207CisgICAgY29uc3QgdW5zaWduZWQgRmlyc3RGaW5nZXIgPSAwOworICAgIGNv
bnN0IHVuc2lnbmVkIFNlY29uZEZpbmdlciA9IDE7CisKKyAgICBBU1NFUlRfRVEoMSArIDAsIHRl
c3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJlLCBGaXJzdEZp
bmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCBmYWxzZSkpOworCisgICAg
QVNTRVJUX0VRKDEgKyAoKDggfCAxKSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlRvdWNoUHJlc3NlZCwgdHJ1ZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoKDB4MTAwMDAgfCAy
KSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpQZW5kaW5n
U3ludGhldGljQ2xpY2ssIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92
ZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgweDIwMDAwIDw8IDEpLCB0ZXN0R20u
c2lnbmF0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlNjcm9sbCwgRmlyc3RGaW5nZXIsIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9F
USgxICsgKCgweDIwMDAwIHwgMSkgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJl
UmVjb2duaXplcjo6U2Nyb2xsLCBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFByZXNzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgoMHgyMDAwMCB8IDB4MTAg
fCA4IHwgMSkgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
U2Nyb2xsLCBTZWNvbmRGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCB0
cnVlKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIHN0YXRlKQoreworICAg
IEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplciB0ZXN0R207CisKKyAgICBBU1NFUlRf
RVEoMCwgdGVzdEdtLnN0YXRlKCkpOworICAgIHRlc3RHbS5zZXRTdGF0ZShJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIEFTU0VSVF9FUShJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2ssIHRlc3RHbS5zdGF0ZSgpKTsK
K30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaXNJbnNpZGVNYW5oYXR0YW5TcXVh
cmUpCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyIGdtOworICAgIEJ1
aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwOworCisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmly
c3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNo
UG9zaXRpb24oKS55KCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAgcC5zZXRZKDE5Ljk5OSk7
CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAg
cC5zZXRYKDE5Ljk5OSk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJ
bnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDIwLjApOworICAgIHAuc2V0
WSgwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7
CisKKyAgICBwLnNldFgoMC4wKTsKKyAgICBwLnNldFkoMjAuMCk7CisgICAgQVNTRVJUX0ZBTFNF
KGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgtMjAuMCk7Cisg
ICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1
YXJlKHApKTsKKworICAgIHAuc2V0WCgwLjApOworICAgIHAuc2V0WSgtMjAuMCk7CisgICAgQVNT
RVJUX0ZBTFNFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKK30KKworVEVTVF9GKFRl
c3RHZXN0dXJlUmVjb2duaXplciwgaXNJbkNsaWNrVGltZVdpbmRvdykKK3sKKyAgICBJbnNwZWN0
YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXIgZ207CisKKyAgICBnbS5zZXRGaXJzdFRvdWNoVGlt
ZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAu
MCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjAxMDAwMSk7CisgICAgQVNTRVJUX1RSVUUo
Z20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsKKworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAu
MCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgwLjggLSAuMDAwMDAwMDEpOworICAgIEFTU0VS
VF9UUlVFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7CisKKyAgICBnbS5zZXRGaXJzdFRvdWNo
VGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRpbWUoMC44MDAwMSk7CisgICAgQVNTRVJU
X0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVy
ZVJlY29nbml6ZXIsIGFkZEVkZ2VGdW5jdGlvbikKK3sKKyAgICBJbnNwZWN0YWJsZUlubmVyR2Vz
dHVyZVJlY29nbml6ZXIgZ207CisgICAgZ20uYWRkRWRnZUZ1bmN0aW9uKElubmVyR2VzdHVyZVJl
Y29nbml6ZXI6OlNjcm9sbCwgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCB0
cnVlLCAoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik0
MDk2KTsKKworICAgIEFTU0VSVF9FUSgoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6R2VzdHVyZVRy
YW5zaXRpb25GdW5jdGlvbik0MDk2LCBnbS5lZGdlRnVuY3Rpb24oZ20uc2lnbmF0dXJlKElubmVy
R2VzdHVyZVJlY29nbml6ZXI6OlNjcm9sbCwgMCwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJl
bGVhc2VkLCB0cnVlKSkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCB1cGRh
dGVWYWx1ZXMpCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyIGdtOwor
CisgICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VR
KDAuMCwgZ20ubGFzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NFUlRfRVEoSW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6Tm9HZXN0dXJlLCBnbS5zdGF0ZSgpKTsKKworICAgIEJ1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludCBwMSgxMCwgMTEpOworICAgIGdtLnVwZGF0ZVZhbHVlcygxLjEsIHAxKTsKKwor
ICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAgICBBU1NF
UlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJUX0VRKDEu
MSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFzdFRvdWNo
VGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRv
dWNoUG9pbnQgcDIoMTMsIDE0KTsKKyAgICBnbS5zZXRTdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25p
emVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgIGdtLnVwZGF0ZVZhbHVlcygyLjAsIHAy
KTsKKworICAgIEFTU0VSVF9FUSgxMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAg
ICBBU1NFUlRfRVEoMTEsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJU
X0VRKDEuMSwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDIuMCAtIDEuMSwg
Z20ubGFzdFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisKKyAgICBCdWlsZGFi
bGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDMoMjMsIDM0KTsKKyAgICBnbS5zZXRTdGF0ZShJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUpOworICAgIGdtLnVwZGF0ZVZhbHVlcygzLjAsIHAz
KTsKKworICAgIEFTU0VSVF9FUSgyMywgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueCgpKTsKKyAg
ICBBU1NFUlRfRVEoMzQsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisgICAgQVNTRVJU
X0VRKDMuMCwgZ20uZmlyc3RUb3VjaFRpbWUoKSk7CisgICAgQVNTRVJUX0VRKDAuMCwgZ20ubGFz
dFRvdWNoVGltZSgpIC0gZ20uZmlyc3RUb3VjaFRpbWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95759</attachid>
            <date>2011-06-02 06:43:46 -0700</date>
            <delta_ts>2011-06-07 14:56:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110602093744.patch</filename>
            <type>text/plain</type>
            <size>46650</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc5MDIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMjcxYWY1YTQ4OTIyNTM2MTI1Y2Qx
ZWEyOTQ0N2U0MzI0ODMxMWZjLi5mNzRlMWZkYTA4ODZjMzk5YjljNmNmZGMxMTJiMDZhZmIxNDkw
YWQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMDIgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBTaG93cyB0aGF0IHRoZSBiYXNpYyBD
aHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3RseSBjb252ZXJ0IGEgdG91Y2gKKyAg
ICAgICAgZXZlbnQgc2VxdWVuY2UgaW50byBhIHNlcXVlbmNlIG9mIHN5bnRoZXRpYyBtb3VzZSBl
dmVudHMgZm9yIGNsaWNraW5nIGFuZAorICAgICAgICBzY3JvbGxpbmcuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0
dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDExLTA2LTAyICBKb2huIEtub3R0
ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNs
aWNrLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOGRlYmFiOTRmMTg5MGM4ZDdi
YTlmNzA1NGUzNjIxZmI1OGY0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDEwIEBACitUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJlIGdlbmVyYXRpb24u
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1hbmFnZXIgbm90IGlt
cGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1MDdlNGEyOWFk
NzVhYjIyZjMwZjg3NDE0OTc1OWE0ZjIyZDJlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwKQEAgLTAsMCAr
MSwxMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0
ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAw
cHg7CisgIGJhY2tncm91bmQ6IGJsdWU7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4KKworPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK3ZhciBj
bGlja0V2ZW50c1JlY2VpdmVkID0gMDsKK3ZhciBleHBlY3RlZE1vdXNlRXZlbnRzID0gNDsKK3Zh
ciB0b3VjaEV2ZW50c1JlY2VpdmVkID0gMDsKK3ZhciBtb3VzZUV2ZW50c1JlY2VpdmVkID0gMDsK
K3ZhciBldmVudFR5cGVzID0gWyAnbW91c2Vtb3ZlJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywg
J2NsaWNrJyBdOworCitmdW5jdGlvbiBnZXN0dXJlRXZlbnRDYWxsYmFjayhldmVudCkKK3sKKyAg
ICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnZXZlbnQudHlwZScsIGV2ZW50VHlwZXNbbW91c2VFdmVudHNSZWNlaXZlZF0pOworICAgICAg
ICBzaG91bGRCZSgnZXZlbnQuY2xpZW50WCcsICcxMCcpOworICAgICAgICBzaG91bGRCZSgnZXZl
bnQuY2xpZW50WScsICcxMicpOworICAgICAgICBzaG91bGRCZSgiZXZlbnQuc2hpZnRLZXkiLCAi
dHJ1ZSIpOworICAgICAgICBzaG91bGRCZSgiZXZlbnQuYWx0S2V5IiwgInRydWUiKTsKKyAgICAg
ICAgc2hvdWxkQmUoImV2ZW50LmN0cmxLZXkiLCAiZmFsc2UiKTsKKyAgICAgICAgc2hvdWxkQmUo
ImV2ZW50Lm1ldGFLZXkiLCAiZmFsc2UiKTsKKyAgICAgICAgbW91c2VFdmVudHNSZWNlaXZlZCsr
OworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKGV2ZW50LnR5cGUpOworICAgICAgICBkZWJ1
ZyhldmVudC5jbGllbnRYKTsKKyAgICAgICAgZGVidWcoZXZlbnQuY2xpZW50WSk7CisgICAgfQor
fQorCisvLyBCZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBhIGdlc3R1cmUgcmVjb2duaXplciwgd2Ug
c2VuZCBhIGtleSBwcmVzcworLy8gZXZlbnQgdG8gZW5kIHRoZSB0ZXN0IHdpdGhvdXQgdGVtcG9y
YWwgZmxha2luZXNzLgorZnVuY3Rpb24gcXVpdEtleVRvRW5kVGVzdChldmVudCkgeworICAgIGVu
ZFRlc3QoKTsKK30KKworLy8gTG9nIHRoYXQgd2Ugc3RpbGwgZ290IHRoZSB0b3VjaCBldmVudHMu
CitmdW5jdGlvbiB0b3VjaEV2ZW50Q2FsbGJhY2soZXZlbnQpIHsKKyAgICB0b3VjaEV2ZW50c1Jl
Y2VpdmVkKys7CisgICAgZGVidWcoJ2hhdmUgcmVjZWl2ZWQ6ICcgKyB0b3VjaEV2ZW50c1JlY2Vp
dmVkICsgJyB0b3VjaCBldmVudHMnKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24g
c2luZ2xlVG91Y2hTZXF1ZW5jZSgpCit7CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50
cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNoUG9pbnQoMTAsIDEyKTsKKyAgICBldmVudFNl
bmRlci50b3VjaFN0YXJ0KCk7CisKKyAgICAvLyBJbnNlcnQgc29tZSBkZWxheS4gTkI6IHRoaXMg
dmFsdWUgZGVwZW5kcyBvbiBtaW5DbGlja0Rvd25UaW1lLAorICAgIC8vIG1heENsaWNrRG93blRp
bWUgZnJvbSBHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNwcAorICAgIGV2ZW50U2VuZGVyLmxl
YXBGb3J3YXJkKDIwKTsKKyAgICBldmVudFNlbmRlci5zZXRUb3VjaE1vZGlmaWVyKCJzaGlmdCIs
IHRydWUpOworICAgIGV2ZW50U2VuZGVyLnNldFRvdWNoTW9kaWZpZXIoImFsdCIsIHRydWUpOwor
CisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIu
dG91Y2hFbmQoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgaWYgKG1vdXNlRXZl
bnRzUmVjZWl2ZWQgPCBleHBlY3RlZE1vdXNlRXZlbnRzKSB7CisgICAgICAgIGRlYnVnKCdHZXN0
dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uJyk7CisgICAgfQor
ICAgIC8vIEJhaWwuCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3RvdWNodGFyZ2V0Jyk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgZ2VzdHVyZUV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7Cisg
ICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGdlc3R1cmVFdmVudENhbGxiYWNr
LCBmYWxzZSk7CisgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHF1aXRL
ZXlUb0VuZFRlc3QsIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFy
dCIsIHRvdWNoRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVy
KCJ0b3VjaG1vdmUiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZl
bnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICAgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNoIGdlc3R1
cmUgZ2VuZXJhdGlvbi4iKTsKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2lu
dHMpIHsKKyAgICAgICAgICAgIHNpbmdsZVRvdWNoU2VxdWVuY2UoKTsKKyAgICAgICAgICAgIGV2
ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDEwKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURv
d24oJyAnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVt
cFJlbmRlclRyZWUuICBUYXAgb24gdGhlIGJsdWUgcmVjdCB0byBsb2cuIikKKyAgICB9Cit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40YmJiNjZhNWUxMDgwYTliMGNhYmNmMTNiOWFmNDM0YWQyZDg4YjE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVy
ZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgc2Nyb2xs
IGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJlIGlzIChtb3N0bHkp
IGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0dlc3R1cmUg
bWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBicm9rZW4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMTc5MzMyNDdiMWY2NDRkODA1NzQ0YmU2M2I0NmVjMDJlYTg1ZTNhCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2Vz
dHVyZS1zY3JvbGwuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyN0b3VjaHRhcmdldCB7CisgIHdp
ZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiAxMDBweDsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBi
YWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworI21vdmluZ2JveCB7CisgIHdpZHRoOiAxMDAlOworICBo
ZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd29yZC13cmFwOiBicmVhay13
b3JkOworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIG92ZXJmbG93LXg6IHNjcm9sbDsKKyAgZGlz
cGxheTogYmxvY2s7Cit9CisKKyNncmVlbmJveCB7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0
OiAxMDBweDsKKyAgYmFja2dyb3VuZDogZ3JlZW47CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2lu
OiAwcHg7Cit9CisKKyNyZWRib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7
CisgIGJhY2tncm91bmQ6IHJlZDsKKyAgcGFkZGluZzogMHB4OworICBtYXJnaW46IDBweDsKK30K
KwordGQgeworICBwYWRkaW5nOiAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgc3R5
bGU9Im1hcmdpbjowIiBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0idG91Y2h0YXJnZXQi
PgorICA8ZGl2IGlkPSJtb3Zpbmdib3giPgorICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFj
aW5nPSIwcHgiPgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0icmVkYm94Ij48L2Rp
dj48L3RkPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAg
ICA8L3RyPgorICAgICAgPHRyPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2
PjwvdGQ+CisgICAgICAgIDx0ZD48ZGl2IGlkPSJncmVlbmJveCI+PC9kaXY+PC90ZD4KKyAgICAg
IDwvdHI+CisgICAgPC90YWJsZT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKwordmFyIG1vdmluZ2RpdjsKK3ZhciBleHBlY3RlZFNjcm9sbHNUb3RhbCA9
IDI7Cit2YXIgc2Nyb2xsc09jY3VycmVkID0gMDsKK3ZhciBzY3JvbGxBbW91bnRYID0gWyc5MCcs
ICc5MCddOwordmFyIHNjcm9sbEFtb3VudFkgPSBbJzAnLCAnOTUnXTsKKworZnVuY3Rpb24gY2hl
Y2tTY3JvbGxPZmZzZXQoKQoreworICAgIG1vdmluZ2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdtb3Zpbmdib3gnKTsKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAg
IHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsVG9wJywgc2Nyb2xsQW1vdW50WVtzY3JvbGxzT2Nj
dXJyZWRdKTsKKyAgICAgICAgc2hvdWxkQmUoJ21vdmluZ2Rpdi5zY3JvbGxMZWZ0Jywgc2Nyb2xs
QW1vdW50WFtzY3JvbGxzT2NjdXJyZWRdKTsKKyAgICAgICAgc2Nyb2xsc09jY3VycmVkKys7Cisg
ICAgfQorCisgICAgaWYgKHNjcm9sbHNPY2N1cnJlZCA9PSBleHBlY3RlZFNjcm9sbHNUb3RhbCkg
eworICAgICAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgICAgICBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgp
OworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiBmaW5nZXJV
cChldmVudCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgZGVidWcoJ21vdmVkOiAnICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxUb3AgKyAnLCAn
ICsgZXZlbnQuY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0KTsKKyAgICByZXR1cm4gdHJ1ZTsgIC8v
IFdhbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorfQorCitmdW5jdGlvbiBmaXJzdFRvdWNoRHJh
Z1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1ZygiZmlyc3QgZ2VzdHVyZSIpOworICAgIGV2ZW50U2Vu
ZGVyLmNsZWFyVG91Y2hQb2ludHMoKTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDk1
LCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gU2Nyb2xsIHRo
ZSBkaXYgdG8gdGhlIGxlZnQuCisgICAgZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCA1
LCAxMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisKKyAgICBldmVudFNlbmRlci5y
ZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworCisgICAg
Ly8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zmc2V0KCk7Cit9CisKK2Z1bmN0
aW9uIHNlY29uZFRvdWNoRHJhZ1NlcXVlbmNlKCkKK3sKKyAgICBkZWJ1Zygic2Vjb25kIGdlc3R1
cmUiKTsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5k
ZXIuYWRkVG91Y2hQb2ludCgxMiwgOTcpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsK
KworICAgIC8vIFNjcm9sbCB0aGUgcmVjdGFuZ2xlIGRvd24uCisgICAgZXZlbnRTZW5kZXIudXBk
YXRlVG91Y2hQb2ludCgwLCAxMiwgMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisK
KyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci50
b3VjaEVuZCgpOworCisgICAgLy8gV2FpdCBmb3IgbGF5b3V0LgorICAgIGNoZWNrU2Nyb2xsT2Zm
c2V0KCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ0dl
c3R1cmUgbWFuYWdlciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBicm9rZW4n
KTsKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFy
c2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIG1vdmluZ2RpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdtb3Zpbmdib3gnKTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIp
IHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZ2VuZXJh
dGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gJyArCisgICAgICAgICAgICAnU3F1YXJlIGlzIChtb3N0
bHkpIGdyZWVuIG9uIHBhc3MnKTsKKworICAgICAgICBpZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3Vj
aFBvaW50cykKKyAgICAgICAgICAgIGZpcnN0VG91Y2hEcmFnU2VxdWVuY2UoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZS4gIFRvdWNoIHNjcm9s
bCB0aGUgcmVkIHJlY3QgdG8gbG9nLiIpOworICAgICAgICBtb3ZpbmdkaXYuYWRkRXZlbnRMaXN0
ZW5lcigndG91Y2hlbmQnLCBmaW5nZXJVcCwgZmFsc2UpOworICAgIH0KK30KKzwvc2NyaXB0Pgor
CisKKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3Vj
aC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjA4NDc4MzVlYjg1YjI2
MDFmZmVlNGI0Y2ZhODAzOGUxNTIzMmYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwzOSBAQAorVGhpcyB0ZXN0cyBiYXNpYyBzaW5nbGUgdG91
Y2ggZ2VzdHVyZSBnZW5lcmF0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
aGF2ZSByZWNlaXZlZDogMSB0b3VjaCBldmVudHMKK2hhdmUgcmVjZWl2ZWQ6IDIgdG91Y2ggZXZl
bnRzCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNlbW92ZSIKK1BBU1MgZXZlbnQuY2xpZW50WCBp
cyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlzIDEyCitQQVNTIGV2ZW50LnNoaWZ0S2V5IGlzIHRy
dWUKK1BBU1MgZXZlbnQuYWx0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuY3RybEtleSBpcyBmYWxz
ZQorUEFTUyBldmVudC5tZXRhS2V5IGlzIGZhbHNlCitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNl
ZG93biIKK1BBU1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlzIDEy
CitQQVNTIGV2ZW50LnNoaWZ0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuYWx0S2V5IGlzIHRydWUK
K1BBU1MgZXZlbnQuY3RybEtleSBpcyBmYWxzZQorUEFTUyBldmVudC5tZXRhS2V5IGlzIGZhbHNl
CitQQVNTIGV2ZW50LnR5cGUgaXMgIm1vdXNldXAiCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAK
K1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtleSBpcyB0cnVlCitQ
QVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkgaXMgZmFsc2UKK1BB
U1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50eXBlIGlzICJjbGljayIKK1BB
U1MgZXZlbnQuY2xpZW50WCBpcyAxMAorUEFTUyBldmVudC5jbGllbnRZIGlzIDEyCitQQVNTIGV2
ZW50LnNoaWZ0S2V5IGlzIHRydWUKK1BBU1MgZXZlbnQuYWx0S2V5IGlzIHRydWUKK1BBU1MgZXZl
bnQuY3RybEtleSBpcyBmYWxzZQorUEFTUyBldmVudC5tZXRhS2V5IGlzIGZhbHNlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2Vz
dHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkxZjk4YmRiMGI1ZGU3YTIyMjkxODZkZmRlYzg2MDZhZjBmNTc4NDMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3Vj
aC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAorVGhp
cyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBnZW5lcmF0aW9uIGZyb20gdG91Y2ggZXZlbnRzLiBTcXVh
cmUgaXMgKG1vc3RseSkgZ3JlZW4gb24gcGFzcworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworZmlyc3QgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYuc2Nyb2xsVG9wIGlzIDAKK1BBU1Mg
bW92aW5nZGl2LnNjcm9sbExlZnQgaXMgOTAKK3NlY29uZCBnZXN0dXJlCitQQVNTIG1vdmluZ2Rp
di5zY3JvbGxUb3AgaXMgOTUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbExlZnQgaXMgOTAKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZDM5ZDE0YzkzNjBhZDA4NTQ0YmUyMGJmM2EzNzRlNTEyMTNlNTE0Yi4uM2QxY2NjMjRhMjVj
YTQwOGFiMzgyODgzYjQxNzc2OTk2MjA1OGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBA
CisyMDExLTA2LTAyICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1d
IEFkZCBhIGJhc2ljIGdlc3R1cmUgcmVjb2duaXplciB0byB0aGUgQ2hyb21pdW0gcGxhdGZvcm0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NDE3CisK
KyAgICAgICAgQWRkcyBhIGJhc2ljIGdlc3R1cmUgcmVjb2duaXplciB0byB0aGUgQ2hyb21pdW0g
cGxhdGZvcm0uIEFkZHMgYW4gZW50cnkKKyAgICAgICAgcG9pbnQgdG8gdGhlIEdlc3R1cmVSZWNv
Z25pemVyIHRvIHJlc2V0IGFueSBpbnRlcm5hbCBzdGF0ZSBvbiBhIHBhZ2UgcmVzZXQuCisgICAg
ICAgIFJlc2V0dGluZyB0aGUgZ2VzdHVyZSByZWNvZ25pemVyIG9uIHBhZ2UgbG9hZCBpcyBuZWNl
c2FyeSBmb3IgcmVsaWFibGUKKyAgICAgICAgbGF5b3V0IHRlc3QgZXhlY3V0aW9uIGFuZCBpbXBy
b3ZlcyBnZXN0dXJlIHJlY29nbml6ZXIgb3BlcmF0aW9uYWwKKyAgICAgICAgcm9idXN0bmVzcy4K
KworICAgICAgICBBZGRlZCBhbiBhZGRpdGlvbmFsIGNvbnN0cnVjdG9yIHRvIHBlcm1pdCBidWls
ZGluZyBhIHN5bnRoZXRpYworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQuCisKKyAgICAgICAg
U21hbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUgUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplciBhcyBy
ZXF1aXJlZCB0bworICAgICAgICBpbXBsZW1lbnQgdGhlIHNpbXBsZSBDaHJvbWl1bSBwbGF0Zm9y
bSBnZXN0dXJlIHJlY29nbml6ZXIuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLWdlc3R1cmUtY2xpY2suaHRtbAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNv
Z25pemVyLmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6SW5uZXJH
ZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25p
emVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyOjp+
SW5uZXJHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjphZGRFZGdlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0
dXJlUmVjb2duaXplcjo6aXNJbkNsaWNrVGltZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjppc0luc2lkZU1hbmhhdHRhblNxdWFyZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpkaXNwYXRjaFN5bnRoZXRpY0NsaWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6OnByb2Nlc3NUb3Vj
aEV2ZW50Rm9yR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25p
emVyOjpzY3JvbGxWaWFUb3VjaE1vdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjp1cGRhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0
dXJlUmVjb2duaXplcjo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvdWNoRG93bik6
CisgICAgICAgIChXZWJDb3JlOjpub0dlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xpY2sp
OgorICAgICAgICAoV2ViQ29yZTo6aXNDbGlja09yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OmluU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpQ
bGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXI6On5QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKFdl
YkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6fkdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpHZXN0dXJlUmVjb2duaXplckNo
cm9taXVtOjpwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1cmUpOgorCiAyMDExLTA2LTAyICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QnJhZHkgRWlkc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDEwMDNiOWFlMTdkMjUzOGQ1ZTA2ZWZi
N2YwMTQwY2YxN2ZhMWFmN2EuLjQ3Yjc2YTM2MjYxNDlmZmYyZDYzZWMwYjBmOWJiMDY5YWMwMzc1
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTc2Nyw3ICs3NjcsNiBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vTm90SW1w
bGVtZW50ZWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlRXZlbnQu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgnLApAQCAtMzgxMyw2ICszODEy
LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9GcmFtZWxlc3NTY3JvbGxWaWV3
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xsVmll
dy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9GcmFtZWxlc3NTY3JvbGxWaWV3
Q2xpZW50LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25p
emVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJl
UmVjb2duaXplckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0tl
eUNvZGVDb252ZXJzaW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0tleUNv
ZGVDb252ZXJzaW9uR3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vS2V5
Ym9hcmRDb2Rlcy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjOTg5
Y2QwMWY2ODhkMGE5ZWE2NzY2Njg0YjVhNmE3MmI3NWU0ODU3Li5iZGZhZjhhOTY4OTdkNGZiZjA1
ZDcyNzQ3NTMwY2VjZmI3YjU2NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CkBAIC0zMjc1LDYgKzMyNzUsMTYgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKIAogICAgIHJldHVybiBkZWZhdWx0
UHJldmVudGVkOwogfQorCisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKK3ZvaWQgRXZl
bnRIYW5kbGVyOjpyZXNldEdlc3R1cmVSZWNvZ25pemVyKCkKK3sKKyAgICBpZiAobV9nZXN0dXJl
UmVjb2duaXplcikKKyAgICAgICAgbV9nZXN0dXJlUmVjb2duaXplci0+cmVzZXQoKTsKK30KKyNl
bmRpZgorCisKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBk
YzQzZTNkODI5MjRmYzgzYTVhYjk1MDVjZjBmNDlkZmIwMzYwMWJiLi43NDVlZGRhNGQyZTBkZTFj
M2VlNWQxMjkwMTVjMTc3YWFmNWQ4NTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
QEAgLTE2Niw2ICsxNjYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxlR2VzdHVyZUV2ZW50
KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHRVNU
VVJFX1JFQ09HTklaRVIpCisgICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25pemVyKCk7CisjZW5k
aWYKKwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogICAgIGJvb2wgc2VuZENvbnRleHRNZW51
RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAgICAgYm9vbCBzZW5kQ29udGV4dE1l
bnVFdmVudEZvcktleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGVmN2QyMTUw
NTI3NGU2YjY5ODIwMzljYWI2MGUxMzIyZTAxZTk5ZWIuLmZkMjk5MmIxZTRkMjBjMTJjYzc5MDRh
OGFhMzg2MDQ4Nzc3ZDM3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTIzNCw2
ICsyMzQsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnJlc2V0KCkKICAgICBtX2lzVmlzdWFsbHlOb25F
bXB0eSA9IGZhbHNlOwogICAgIG1fZmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2tQ
ZW5kaW5nID0gdHJ1ZTsKICAgICBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNob3IgPSAwOwor
CisjaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKKyAgICBmcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+cmVzZXRHZXN0dXJlUmVjb2duaXplcigpOworI2VuZGlmCiB9CiAKIGJvb2wgRnJhbWVW
aWV3Ojppc0ZyYW1lVmlldygpIGNvbnN0IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5oCmluZGV4IDgwMjU4M2YyYTA1NTNiYjdjYTcz
Yzc4NWVkZjVhZjhhYzAxYjBhNTAuLjJmODA1YmQyNjI3MWRjMTRkMzkwNDUzZTNjOTA2Y2UwYTE0
M2I1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVy
ZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1
cmVSZWNvZ25pemVyLmgKQEAgLTU3LDYgKzU3LDkgQEAgcHVibGljOgogICAgIC8vIHNwZWNpZmll
cyBpZiB0aGUgfGV2ZW50fCB3YXMgYWN0dWFsbHkgaGFuZGxlZCBieSB8c291cmNlfCAoYnkgdGhl
IEphdmFTY3JpcHQpCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCByZXN1bHRlZCBp
biBmaXJpbmcgYSBzeW50aGV0aWMgZXZlbnQuCiAgICAgdmlydHVhbCBib29sIHByb2Nlc3NUb3Vj
aEV2ZW50Rm9yR2VzdHVyZShjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmLCBFdmVudEhhbmRsZXIq
LCBib29sIGhhbmRsZWQpID0gMDsKKworICAgIC8vIENsZWFycyB0aGUgR2VzdHVyZVJlY29nbml6
ZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUuCisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAzNzY1NTUzM2JkNDhlMzFmNTUxY2VkMmQzMzA0NGE5
YmU4ODdlMDBjLi5hNmI3YzUwNzJmZGNjM2Q0NzI0YmQzODQ0MWYyNmZhYTBlZGNkNjQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaApAQCAtMTA2LDYg
KzEwNiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisg
ICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChJbnRQb2ludCBwb3NpdGlvbiwgSW50UG9pbnQgZ2xv
YmFsUG9zaXRpb24sIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZLCBmbG9hdCB3aGVlbFRpY2tz
WCwgZmxvYXQgd2hlZWxUaWNrc1ksIFBsYXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIGlzQWNjZXB0ZWQsIGJvb2wgc2hpZnRLZXksIGJvb2wgY3RybEtleSwgYm9v
bCBhbHRLZXksIGJvb2wgbWV0YUtleSkKKyAgICAgICAgICAgIDogbV9wb3NpdGlvbihwb3NpdGlv
bikKKyAgICAgICAgICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKKyAgICAg
ICAgICAgICwgbV9kZWx0YVgoZGVsdGFYKQorICAgICAgICAgICAgLCBtX2RlbHRhWShkZWx0YVkp
CisgICAgICAgICAgICAsIG1fd2hlZWxUaWNrc1god2hlZWxUaWNrc1gpCisgICAgICAgICAgICAs
IG1fd2hlZWxUaWNrc1kod2hlZWxUaWNrc1kpCisgICAgICAgICAgICAsIG1fZ3JhbnVsYXJpdHko
Z3JhbnVsYXJpdHkpCisgICAgICAgICAgICAsIG1faXNBY2NlcHRlZChpc0FjY2VwdGVkKQorICAg
ICAgICAgICAgLCBtX3NoaWZ0S2V5KHNoaWZ0S2V5KQorICAgICAgICAgICAgLCBtX2N0cmxLZXko
Y3RybEtleSkKKyAgICAgICAgICAgICwgbV9hbHRLZXkoYWx0S2V5KQorICAgICAgICAgICAgLCBt
X21ldGFLZXkobWV0YUtleSkKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICAsIG1faGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcyhmYWxzZSkKKyAgICAgICAgICAgICwgbV9waGFzZShQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCisgICAgICAgICAgICAsIG1fbW9tZW50dW1QaGFzZShQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpCisgICAgICAgICAgICAsIG1fdGltZXN0YW1wKDAp
CisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisKICAgICAgICAgY29uc3QgSW50UG9pbnQm
IHBvcygpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0gLy8gUGxhdGZvcm1XaW5kb3cgY29v
cmRpbmF0ZXMuCiAgICAgICAgIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3MoKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9IC8vIFNjcmVlbiBjb29yZGluYXRlcy4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVj
b2duaXplckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NWUzMmUzOTMzYjY4NDQwZGU2MGI5ZDAy
NjMzMWEyYmRiM2NhYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSwyMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW0uaCIKKworI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBib29sIGNsaWNrKElubmVyR2VzdHVyZVJlY29nbml6ZXIqLCBj
b25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIGlzQ2xpY2tPclNjcm9sbChJ
bm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CitzdGF0
aWMgYm9vbCBpblNjcm9sbChJbm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50Jik7CitzdGF0aWMgYm9vbCBub0dlc3R1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXpl
ciosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wgdG91Y2hEb3duKElu
bmVyR2VzdHVyZVJlY29nbml6ZXIqLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKworLy8g
RklYTUU6IE1ha2UgdGhlc2UgY29uZmlndXJhYmxlIHByb2dyYW1tYXRpY2FsbHkuCitzdGF0aWMg
Y29uc3QgZG91YmxlIG1heGltdW1Ub3VjaERvd25EdXJhdGlvbkluU2Vjb25kc0ZvckNsaWNrID0g
MC44Oworc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVG91Y2hEb3duRHVyYXRpb25JblNlY29u
ZHNGb3JDbGljayA9IDAuMDE7CitzdGF0aWMgY29uc3QgaW50IG1heGltdW1Ub3VjaE1vdmVJblBp
eGVsc0ZvckNsaWNrID0gMjA7CisKK0lubmVyR2VzdHVyZVJlY29nbml6ZXI6OklubmVyR2VzdHVy
ZVJlY29nbml6ZXIoKQorICAgIDogbV9maXJzdFRvdWNoVGltZSgwLjApCisgICAgLCBtX3N0YXRl
KElubmVyR2VzdHVyZVJlY29nbml6ZXI6Ok5vR2VzdHVyZSkKKyAgICAsIG1fbGFzdFRvdWNoVGlt
ZSgwLjApCisgICAgLCBtX2V2ZW50SGFuZGxlcigwKQorICAgICwgbV9jdHJsS2V5KGZhbHNlKQor
ICAgICwgbV9hbHRLZXkoZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQorICAgICwgbV9t
ZXRhS2V5KGZhbHNlKQoreworICAgIGNvbnN0IHVuc2lnbmVkIEZpcnN0RmluZ2VyID0gMDsKKyAg
ICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIFJlbGVhc2VkID0gUGxhdGZvcm1Ub3Vj
aFBvaW50OjpUb3VjaFJlbGVhc2VkOworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3Rh
dGUgUHJlc3NlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOworICAgIGNvbnN0
IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgTW92ZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRv
dWNoTW92ZWQ7CisgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBTdGF0aW9uYXJ5
ID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk7CisgICAgY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50OjpTdGF0ZSBDYW5jZWxsZWQgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
Q2FuY2VsbGVkOworCisgICAgYWRkRWRnZUZ1bmN0aW9uKE5vR2VzdHVyZSwgRmlyc3RGaW5nZXIs
IFByZXNzZWQsIGZhbHNlLCB0b3VjaERvd24pOworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5n
U3ludGhldGljQ2xpY2ssIEZpcnN0RmluZ2VyLCBDYW5jZWxsZWQsIGZhbHNlLCBub0dlc3R1cmUp
OworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhldGljQ2xpY2ssIEZpcnN0RmluZ2Vy
LCBSZWxlYXNlZCwgZmFsc2UsIGNsaWNrKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5
bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBpc0NsaWNrT3JTY3JvbGwp
OworICAgIGFkZEVkZ2VGdW5jdGlvbihQZW5kaW5nU3ludGhldGljQ2xpY2ssIEZpcnN0RmluZ2Vy
LCBTdGF0aW9uYXJ5LCBmYWxzZSwgaXNDbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdlRnVuY3Rp
b24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgTW92ZWQsIGZhbHNlLCBpblNjcm9sbCk7CisgICAgYWRk
RWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIFJlbGVhc2VkLCBmYWxzZSwgbm9HZXN0
dXJlKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oU2Nyb2xsLCBGaXJzdEZpbmdlciwgQ2FuY2VsbGVk
LCBmYWxzZSwgbm9HZXN0dXJlKTsKK30KKwordm9pZCBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpy
ZXNldCgpCit7CisgICAgbV9maXJzdFRvdWNoVGltZSA9IDAuMDsKKyAgICBtX3N0YXRlID0gSW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJlOworICAgIG1fbGFzdFRvdWNoVGltZSA9IDAu
MDsKKyAgICBtX2V2ZW50SGFuZGxlciA9IDA7Cit9CisKK0lubmVyR2VzdHVyZVJlY29nbml6ZXI6
On5Jbm5lckdlc3R1cmVSZWNvZ25pemVyKCkKK3sKK30KKwordm9pZCBJbm5lckdlc3R1cmVSZWNv
Z25pemVyOjphZGRFZGdlRnVuY3Rpb24oU3RhdGUgc3RhdGUsIHVuc2lnbmVkIGZpbmdlcklkLCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwgYm9vbCB0b3VjaEhhbmRsZWRCeUph
dmFTY3JpcHQsIEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZikKK3sKKyAgICBtX2VkZ2VGdW5j
dGlvbnMuYWRkKHNpZ25hdHVyZShzdGF0ZSwgZmluZ2VySWQsIHRvdWNoVHlwZSwgdG91Y2hIYW5k
bGVkQnlKYXZhU2NyaXB0KSwgZik7Cit9CisKK2Jvb2wgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
aXNJbkNsaWNrVGltZVdpbmRvdygpCit7CisgICAgZG91YmxlIGR1cmF0aW9uKG1fbGFzdFRvdWNo
VGltZSAtIG1fZmlyc3RUb3VjaFRpbWUpOworICAgIHJldHVybiBkdXJhdGlvbiA+PSBtaW5pbXVt
VG91Y2hEb3duRHVyYXRpb25JblNlY29uZHNGb3JDbGljayAmJiBkdXJhdGlvbiA8IG1heGltdW1U
b3VjaERvd25EdXJhdGlvbkluU2Vjb25kc0ZvckNsaWNrOworfQorCitib29sIElubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hQ
b2ludCYgcG9pbnQpCit7CisgICAgaW50IG1hbmhhdHRhbkRpc3RhbmNlID0gYWJzKHBvaW50LnBv
cygpLngoKSAtIG1fZmlyc3RUb3VjaFBvc2l0aW9uLngoKSkgKyBhYnMocG9pbnQucG9zKCkueSgp
IC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueSgpKTsKKyAgICByZXR1cm4gbWFuaGF0dGFuRGlzdGFu
Y2UgPCBtYXhpbXVtVG91Y2hNb3ZlSW5QaXhlbHNGb3JDbGljazsKK30KKwordm9pZCBJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpkaXNwYXRjaFN5bnRoZXRpY0NsaWNrKGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYgcG9pbnQpCit7CisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZU1vdmUo
cG9pbnQucG9zKCksIHBvaW50LnNjcmVlblBvcygpLCBOb0J1dHRvbiwgTW91c2VFdmVudE1vdmVk
LCAvKiBjbGlja0NvdW50ICovIDEsIG1fc2hpZnRLZXksIG1fY3RybEtleSwgbV9hbHRLZXksIG1f
bWV0YUtleSwgbV9sYXN0VG91Y2hUaW1lKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1v
dXNlRG93bihwb2ludC5wb3MoKSwgcG9pbnQuc2NyZWVuUG9zKCksIExlZnRCdXR0b24sIE1vdXNl
RXZlbnRQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIG1fc2hpZnRLZXksIG1fY3RybEtleSwg
bV9hbHRLZXksIG1fbWV0YUtleSwgbV9sYXN0VG91Y2hUaW1lKTsKKyAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgZmFrZU1vdXNlVXAocG9pbnQucG9zKCksIHBvaW50LnNjcmVlblBvcygpLCBMZWZ0QnV0
dG9uLCBNb3VzZUV2ZW50UmVsZWFzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgbV9zaGlmdEtleSwg
bV9jdHJsS2V5LCBtX2FsdEtleSwgbV9tZXRhS2V5LCBtX2xhc3RUb3VjaFRpbWUpOworCisgICAg
bV9ldmVudEhhbmRsZXItPm1vdXNlTW92ZWQoZmFrZU1vdXNlTW92ZSk7CisgICAgbV9ldmVudEhh
bmRsZXItPmhhbmRsZU1vdXNlUHJlc3NFdmVudChmYWtlTW91c2VEb3duKTsKKyAgICBtX2V2ZW50
SGFuZGxlci0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZmFrZU1vdXNlVXApOworfQorCitib29s
IElubmVyR2VzdHVyZVJlY29nbml6ZXI6OnByb2Nlc3NUb3VjaEV2ZW50Rm9yR2VzdHVyZShjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50LCBFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlciwg
Ym9vbCBoYW5kbGVkKQoreworICAgIG1fZXZlbnRIYW5kbGVyID0gZXZlbnRIYW5kbGVyOworICAg
IG1fY3RybEtleSA9IGV2ZW50LmN0cmxLZXkoKTsKKyAgICBtX2FsdEtleSA9IGV2ZW50LmFsdEtl
eSgpOworICAgIG1fc2hpZnRLZXkgPSBldmVudC5zaGlmdEtleSgpOworICAgIG1fbWV0YUtleSA9
IGV2ZW50Lm1ldGFLZXkoKTsKKworICAgIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybVRvdWNoUG9pbnQ+
JiBwb2ludHMgPSBldmVudC50b3VjaFBvaW50cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwb2ludHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgUGxhdGZvcm1Ub3VjaFBv
aW50JiBwID0gcG9pbnRzW2ldOworICAgICAgICB1cGRhdGVWYWx1ZXMoZXZlbnQudGltZXN0YW1w
KCksIHApOworCisgICAgICAgIGlmIChHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGVmID0gbV9l
ZGdlRnVuY3Rpb25zLmdldChzaWduYXR1cmUobV9zdGF0ZSwgcC5pZCgpLCBwLnN0YXRlKCksIGhh
bmRsZWQpKSkKKyAgICAgICAgICAgIGhhbmRsZWQgPSAoKmVmKSh0aGlzLCBwKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2Ny
b2xsVmlhVG91Y2hNb3Rpb24oY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0b3VjaFBvaW50KQor
eworICAgIGZsb2F0IGRlbHRhWCh0b3VjaFBvaW50LnBvcygpLngoKSAtIG1fZmlyc3RUb3VjaFBv
c2l0aW9uLngoKSk7CisgICAgZmxvYXQgZGVsdGFZKHRvdWNoUG9pbnQucG9zKCkueSgpIC0gbV9m
aXJzdFRvdWNoUG9zaXRpb24ueSgpKTsKKworICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRvIGdlc3R1
cmUgZXZlbnRzIHdoZW4gdGhleSBoYW5kbGUgc3ViZnJhbWVzLgorICAgIFBsYXRmb3JtV2hlZWxF
dmVudCBzeW50aGV0aWNXaGVlbEV2ZW50KHRvdWNoUG9pbnQucG9zKCksIHRvdWNoUG9pbnQuc2Ny
ZWVuUG9zKCksIGRlbHRhWCwgZGVsdGFZLCBkZWx0YVggLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIw
KSwgZGVsdGFZIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDEyMCksIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2
ZW50LCAvKiBpc0FjY2VwdGVkICovIGZhbHNlLCBtX3NoaWZ0S2V5LCBtX2N0cmxLZXksIG1fYWx0
S2V5LCBtX21ldGFLZXkpOworICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVXaGVlbEV2ZW50KHN5
bnRoZXRpY1doZWVsRXZlbnQpOworICAgIG1fZmlyc3RUb3VjaFBvc2l0aW9uID0gdG91Y2hQb2lu
dC5wb3MoKTsKK30KKwordm9pZCBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGVWYWx1ZXMo
Y29uc3QgZG91YmxlIHRvdWNoVGltZSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiB0b3VjaFBv
aW50KQoreworICAgIG1fbGFzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsKKyAgICBpZiAoc3RhdGUo
KSA9PSBOb0dlc3R1cmUpIHsKKyAgICAgICAgbV9maXJzdFRvdWNoVGltZSA9IHRvdWNoVGltZTsK
KyAgICAgICAgbV9maXJzdFRvdWNoUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworICAgIH0K
K30KKworLy8gQnVpbGRzIGEgc2lnbmF0dXJlLiBTaWduYXR1cmVzIGFyZSBhc3NlbWJsZWQgYnkg
am9pbmluZyB0b2dldGhlciBtdWx0aXBsZSBiaXRzLgorLy8gMSBMU0IgYml0IGZvciBzaWduYXR1
cmUgPj0gMQorLy8gMyBiaXRzIGZvciB0aGUgfHRvdWNoVHlwZXwuCisvLyAxIGJpdCBmb3IgfGhh
bmRsZWR8CisvLyAxMiBiaXRzIGZvciB8aWR8CisvLyAxNSBiaXRzIGZvciB0aGUgfGdlc3R1cmVT
dGF0ZXwuCit1bnNpZ25lZCBpbnQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2lnbmF0dXJlKFN0
YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWduZWQgaWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUg
dG91Y2hUeXBlLCBib29sIGhhbmRsZWQpCit7CisgICAgQVNTRVJUKChpZCAmIDB4ZmZmKSA9PSBp
ZCk7CisgICAgcmV0dXJuIDEgKyAoKHRvdWNoVHlwZSAmIDB4NykgPDwgMSB8IChoYW5kbGVkID8g
MSA8PCA0IDogMCkgfCAoKGlkICYgMHhmZmYpIDw8IDUgKSB8IChnZXN0dXJlU3RhdGUgPDwgMTcp
KTsKK30KKworc3RhdGljIGJvb2wgdG91Y2hEb3duKElubmVyR2VzdHVyZVJlY29nbml6ZXIqIGdl
c3R1cmVSZWNvZ25pemVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAgIGdlc3R1
cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpQZW5kaW5nU3lu
dGhldGljQ2xpY2spOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBub0dlc3R1cmUoSW5u
ZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYpCit7CisgICAgZ2VzdHVyZVJlY29nbml6ZXItPnJlc2V0KCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjbGljayhJbm5lckdlc3R1cmVSZWNvZ25pemVyKiBn
ZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAg
ICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJl
UmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdl
c3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1
cmUpOworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+ZGlzcGF0Y2hTeW50aGV0aWNDbGljayhw
b2ludCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbm9HZXN0dXJl
KGdlc3R1cmVSZWNvZ25pemVyLCBwb2ludCk7Cit9CisKK3N0YXRpYyBib29sIGlzQ2xpY2tPclNj
cm9sbChJbm5lckdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlz
SW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0
YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaE1vdmVkICYmICFnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5o
YXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zY3JvbGxW
aWFUb3VjaE1vdGlvbihwb2ludCk7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0
ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpTY3JvbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpblNjcm9sbChJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JiBwb2ludCkKK3sKKyAgICBnZXN0dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hN
b3Rpb24ocG9pbnQpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzT3duUHRyPFBsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXI+IFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgpCit7
CisgICAgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXIgPSBuZXcg
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIHJldHVybiBhZG9wdFB0cihnZXN0dXJl
UmVjb2duaXplcik7Cit9CisKK1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OlBsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXIoKQoreworfQorCitQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjp+UGxh
dGZvcm1HZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisKK0dlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQorICAgIDogbV9pbm5lckdlc3R1cmVSZWNv
Z25pemVyKCkKK3sKK30KKworR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6fkdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2du
aXplckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY0ZTg1ZmJiNWNjZGUwNDM0OTQ5YjIxODk4NzA0
YWMwMDhlOWIzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1faAorI2RlZmluZSBHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCIKKwor
I2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElubmVyR2VzdHVyZVJlY29nbml6ZXIgeworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAg
ICAgTm9HZXN0dXJlLAorICAgICAgUGVuZGluZ1N5bnRoZXRpY0NsaWNrLAorICAgICAgU2Nyb2xs
CisgICAgfTsKKworICAgIHR5cGVkZWYgYm9vbCAoKkdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24p
KElubmVyR2VzdHVyZVJlY29nbml6ZXIqLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKwor
ICAgIH5Jbm5lckdlc3R1cmVSZWNvZ25pemVyKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoU3ludGhl
dGljQ2xpY2soY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHJl
c2V0KCk7CisgICAgYm9vbCBpc0luQ2xpY2tUaW1lV2luZG93KCk7CisgICAgYm9vbCBpc0luc2lk
ZU1hbmhhdHRhblNxdWFyZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVu
dCYsIEV2ZW50SGFuZGxlciosIGJvb2wgaGFuZGxlZCk7CisgICAgdm9pZCBzY3JvbGxWaWFUb3Vj
aE1vdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIHNldFN0YXRlKFN0
YXRlIHZhbHVlKSB7IG1fc3RhdGUgPSB2YWx1ZTsgfQorICAgIFN0YXRlIHN0YXRlKCkgeyByZXR1
cm4gbV9zdGF0ZTsgfQorcHJvdGVjdGVkOgorICAgIElubmVyR2VzdHVyZVJlY29nbml6ZXIoKTsK
KyAgICB2b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlN0YXRlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgR2VzdHVy
ZVRyYW5zaXRpb25GdW5jdGlvbik7CisgICAgdm9pZCB1cGRhdGVWYWx1ZXMoZG91YmxlIHRvdWNo
VGltZSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBzaWduYXR1cmUoU3RhdGUsIHVuc2lnbmVkLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlLCBi
b29sKTsKKworICAgIGZyaWVuZCBjbGFzcyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtOworCisg
ICAgV1RGOjpIYXNoTWFwPGludCwgR2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbj4gbV9lZGdlRnVu
Y3Rpb25zOworICAgIEludFBvaW50IG1fZmlyc3RUb3VjaFBvc2l0aW9uOworICAgIGRvdWJsZSBt
X2ZpcnN0VG91Y2hUaW1lOworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgZG91YmxlIG1fbGFzdFRv
dWNoVGltZTsKKyAgICBFdmVudEhhbmRsZXIqIG1fZXZlbnRIYW5kbGVyOworCisgICAgYm9vbCBt
X2N0cmxLZXk7CisgICAgYm9vbCBtX2FsdEtleTsKKyAgICBib29sIG1fc2hpZnRLZXk7CisgICAg
Ym9vbCBtX21ldGFLZXk7Cit9OworCitjbGFzcyBHZXN0dXJlUmVjb2duaXplckNocm9taXVtIDog
cHVibGljIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgIHsKK3B1YmxpYzoKKworICAgIEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW0oKTsKKyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgbV9p
bm5lckdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgfTsKKyAKKyAgICB2aXJ0dWFsIGJv
b2wgcHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYg
dG91Y2hFdmVudCwgRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxlZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2lubmVyR2VzdHVyZVJlY29nbml6ZXIucHJvY2Vzc1RvdWNo
RXZlbnRGb3JHZXN0dXJlKHRvdWNoRXZlbnQsIGV2ZW50SGFuZGxlciwgaGFuZGxlZCk7CisgICAg
fQorcHJpdmF0ZToKKyAgICBJbm5lckdlc3R1cmVSZWNvZ25pemVyIG1faW5uZXJHZXN0dXJlUmVj
b2duaXplcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEdlc3R1
cmVSZWNvZ25pemVyQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4MDNm
YzE5ODdmZmRmZmE2NDg1MDIyMDk2ODJjMDBjMGQzYTFhNGFkLi41MmYzZjE1YWFmYjZkN2UyMzdi
MjNmYzRiODc1ZDE5NTg1MDdlMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDMxIEBACisyMDExLTA2LTAyICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIEFkZCBhIGJhc2ljIGdlc3R1cmUgcmVjb2duaXplciB0byB0aGUgQ2hyb21pdW0g
cGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0NDE3CisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0cyBmb3IgdGhlIGJhc2ljIGNocm9taXVt
IHBsYXRmb3JtIGdlc3R1cmUgcmVjb2duaXplci4KKworICAgICAgICAqIHRlc3RzL0lubmVyR2Vz
dHVyZVJlY29nbml6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6Okluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2du
aXplcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6
ZXI6OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OmZpcnN0VG91Y2hQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6OnNldEZpcnN0VG91Y2hUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6Zmlyc3RUb3Vj
aFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25p
emVyOjpzZXRMYXN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlSW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6bGFzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6OmVkZ2VGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6
OmFkZEVkZ2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCdWlsZGFibGVQbGF0Zm9ybVRv
dWNoUG9pbnQ6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6QnVpbGRhYmxlUGxhdGZvcm1Ub3Vj
aFBvaW50OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQ
b2ludDo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RHZXN0dXJlUmVjb2duaXplcjo6VGVzdEdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6U2V0VXApOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdEdlc3R1cmVSZWNvZ25pemVyOjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpURVNU
X0YpOgorCiAyMDExLTA2LTAxICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCA0NGUzYTBiMmU1MWNkN2ZlZDJkMDMyOTk2NWUxMTdkOTdmN2I4MDg4Li4y
MjJkNTg3YzIwNjczZDEyZWRmOWI2Y2NiNjgzMmJiNzZjYzBiYmI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTUzLDYgKzUzLDcgQEAKICAgICAgICAgXSwKICAgICAgICAgJ3dl
YmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxw
ZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0lubmVyR2VzdHVyZVJlY29nbml6ZXJUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRp
bmdVdGlsaXRpZXNUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0lubmVyR2VzdHVyZVJlY29nbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvSW5uZXJHZXN0dXJlUmVjb2duaXplclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUw
OGM2OTFlMDEwOTg1ZjMzOWRiNmY5MWQ5OGY0ZmQ3ZDBhZGU3ZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lubmVyR2VzdHVyZVJlY29nbml6ZXJUZXN0
LmNwcApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBJbnNwZWN0
YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMgSW5uZXJHZXN0dXJlUmVjb2duaXpl
ciB7CitwdWJsaWM6CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyKCkKKyAg
ICAgICAgOiBXZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyKCkKKyAgICB7CisgICAgfQor
CisgICAgaW50IHNpZ25hdHVyZShTdGF0ZSBnZXN0dXJlU3RhdGUsIHVuc2lnbmVkIGlkLCBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoVHlwZSwgYm9vbCBoYW5kbGVkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIElubmVyR2VzdHVyZVJlY29nbml6ZXI6OnNpZ25hdHVyZShnZXN0dXJlU3Rh
dGUsIGlkLCB0b3VjaFR5cGUsIGhhbmRsZWQpOworICAgIH07CisKKyAgICBJbnRQb2ludCBmaXJz
dFRvdWNoUG9zaXRpb24oKSB7IHJldHVybiBtX2ZpcnN0VG91Y2hQb3NpdGlvbjsgfTsKKworICAg
IHZvaWQgc2V0Rmlyc3RUb3VjaFRpbWUoZG91YmxlIHQpIHsgbV9maXJzdFRvdWNoVGltZSA9IHQ7
IH07CisgICAgZG91YmxlIGZpcnN0VG91Y2hUaW1lKCkgeyByZXR1cm4gbV9maXJzdFRvdWNoVGlt
ZTsgfTsKKworICAgIHZvaWQgc2V0TGFzdFRvdWNoVGltZShkb3VibGUgdCkgeyBtX2xhc3RUb3Vj
aFRpbWUgPSB0OyB9OworICAgIGRvdWJsZSBsYXN0VG91Y2hUaW1lKCkgeyByZXR1cm4gbV9sYXN0
VG91Y2hUaW1lOyB9OworCisgICAgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6R2VzdHVyZVRyYW5z
aXRpb25GdW5jdGlvbiBlZGdlRnVuY3Rpb24oaW50IGhhc2gpCisgICAgeworICAgICAgICByZXR1
cm4gbV9lZGdlRnVuY3Rpb25zLmdldChoYXNoKTsKKyAgICB9OworCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVZhbHVlcyhkb3VibGUgZCwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50ICZwKQorICAg
IHsKKyAgICAgICAgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlVmFsdWVzKGQsIHApOwor
ICAgIH07CisKKyAgICB2b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSBzdGF0ZSwgdW5zaWduZWQg
ZmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHRvdWNoU3RhdGUsIGJvb2wgdG91Y2hI
YW5kbGVkQnlKYXZhU2NyaXB0LCBHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6YWRkRWRnZUZ1bmN0aW9uKHN0
YXRlLCBmaW5nZXIsIHRvdWNoU3RhdGUsIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwgZnVuY3Rp
b24pOworICAgIH07Cit9OworCitjbGFzcyBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgOiBw
dWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaFBvaW50IHsKK3B1YmxpYzoKKyAgICBCdWlsZGFi
bGVQbGF0Zm9ybVRvdWNoUG9pbnQoKTsKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQo
aW50IHgsIGludCB5KTsKKworICAgIHZvaWQgc2V0WChpbnQgeCkKKyAgICB7CisgICAgICAgIG1f
cG9zLnNldFgoeCk7CisgICAgICAgIG1fc2NyZWVuUG9zLnNldFgoeCk7CisgICAgfTsKKworICAg
IHZvaWQgc2V0WShpbnQgeSkKKyAgICB7CisgICAgICAgIG1fcG9zLnNldFkoeSk7CisgICAgICAg
IG1fc2NyZWVuUG9zLnNldFkoeSk7CisgICAgfTsKK307CisKK0J1aWxkYWJsZVBsYXRmb3JtVG91
Y2hQb2ludDo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KCkKK3sKKyAgICBtX2lkID0gMDsK
KyAgICBtX3N0YXRlID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk7CisgICAg
bV9wb3MgPSBJbnRQb2ludDo6emVybygpOworICAgIG1fc2NyZWVuUG9zID0gSW50UG9pbnQ6Onpl
cm8oKTsKK307CisKK0J1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludDo6QnVpbGRhYmxlUGxhdGZv
cm1Ub3VjaFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICBtX2lkID0gMDsKKyAgICBtX3N0YXRl
ID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnk7CisgICAgbV9wb3MgPSBJbnRQ
b2ludCh4LCB5KTsKKyAgICBtX3NjcmVlblBvcyA9IEludFBvaW50KHgsIHkpOworfTsKKworCitj
bGFzcyBUZXN0R2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJs
aWM6CisgICAgVGVzdEdlc3R1cmVSZWNvZ25pemVyKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgU2V0VXAoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKSB7IH0K
K307CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGhhc2gpCit7CisgICAgSW5zcGVj
dGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyIHRlc3RHbTsKKyAgICBjb25zdCB1bnNpZ25lZCBG
aXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgU2Vjb25kRmluZ2VyID0gMTsKKwor
ICAgIEFTU0VSVF9FUSgxICsgMCwgdGVzdEdtLnNpZ25hdHVyZShJbm5lckdlc3R1cmVSZWNvZ25p
emVyOjpOb0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVs
ZWFzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgoOCB8IDEpIDw8IDEpLCB0ZXN0
R20uc2lnbmF0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6Ok5vR2VzdHVyZSwgRmlyc3RGaW5n
ZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCB0cnVlKSk7CisKKyAgICBBU1NF
UlRfRVEoMSArICgoMHgxMDAwMCB8IDIpIDw8IDEpLCB0ZXN0R20uc2lnbmF0dXJlKElubmVyR2Vz
dHVyZVJlY29nbml6ZXI6OlBlbmRpbmdTeW50aGV0aWNDbGljaywgRmlyc3RGaW5nZXIsIFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9FUSgxICsg
KDB4MjAwMDAgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6
U2Nyb2xsLCBGaXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkLCBm
YWxzZSkpOworCisgICAgQVNTRVJUX0VRKDEgKyAoKDB4MjAwMDAgfCAxKSA8PCAxKSwgdGVzdEdt
LnNpZ25hdHVyZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpTY3JvbGwsIEZpcnN0RmluZ2VyLCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9F
USgxICsgKCgweDIwMDAwIHwgMHgxMCB8IDggfCAxKSA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjpTY3JvbGwsIFNlY29uZEZpbmdlciwgUGxhdGZvcm1Ub3Vj
aFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsKK30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVj
b2duaXplciwgc3RhdGUpCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVy
IHRlc3RHbTsKKworICAgIEFTU0VSVF9FUSgwLCB0ZXN0R20uc3RhdGUoKSk7CisgICAgdGVzdEdt
LnNldFN0YXRlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlBlbmRpbmdTeW50aGV0aWNDbGljayk7
CisgICAgQVNTRVJUX0VRKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlBlbmRpbmdTeW50aGV0aWND
bGljaywgdGVzdEdtLnN0YXRlKCkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVy
LCBpc0luc2lkZU1hbmhhdHRhblNxdWFyZSkKK3sKKyAgICBJbnNwZWN0YWJsZUlubmVyR2VzdHVy
ZVJlY29nbml6ZXIgZ207CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHA7CisKKyAg
ICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNoUG9zaXRpb24oKS54KCkpOworICAgIEFTU0VS
VF9FUSgwLjAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLnkoKSk7CisKKyAgICBwLnNldFgoMC4w
KTsKKyAgICBwLnNldFkoMTkuOTk5KTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luc2lkZU1hbmhh
dHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNldFgoMTkuOTk5KTsKKyAgICBwLnNldFkoMC4wKTsK
KyAgICBBU1NFUlRfVFJVRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisKKyAgICBw
LnNldFgoMjAuMCk7CisgICAgcC5zZXRZKDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5z
aWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgwLjApOworICAgIHAuc2V0WSgy
MC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOwor
CisgICAgcC5zZXRYKC0yMC4wKTsKKyAgICBwLnNldFkoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAg
cC5zZXRZKC0yMC4wKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbnNpZGVNYW5oYXR0YW5TcXVh
cmUocCkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBpc0luQ2xpY2tUaW1l
V2luZG93KQoreworICAgIEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplciBnbTsKKwor
ICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGltZSgw
LjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luQ2xpY2tUaW1lV2luZG93KCkpOworCisgICAg
Z20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91Y2hUaW1lKDAuMDEw
MDAxKTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luQ2xpY2tUaW1lV2luZG93KCkpOworCisgICAg
Z20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91Y2hUaW1lKDAuOCAt
IC4wMDAwMDAwMSk7CisgICAgQVNTRVJUX1RSVUUoZ20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsK
KworICAgIGdtLnNldEZpcnN0VG91Y2hUaW1lKDAuMCk7CisgICAgZ20uc2V0TGFzdFRvdWNoVGlt
ZSgwLjgwMDAxKTsKKyAgICBBU1NFUlRfRkFMU0UoZ20uaXNJbkNsaWNrVGltZVdpbmRvdygpKTsK
K30KKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgYWRkRWRnZUZ1bmN0aW9uKQorewor
ICAgIEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplciBnbTsKKyAgICBnbS5hZGRFZGdl
RnVuY3Rpb24oSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6U2Nyb2xsLCAwLCBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoUmVsZWFzZWQsIHRydWUsIChJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpHZXN0
dXJlVHJhbnNpdGlvbkZ1bmN0aW9uKTQwOTYpOworCisgICAgQVNTRVJUX0VRKChJbm5lckdlc3R1
cmVSZWNvZ25pemVyOjpHZXN0dXJlVHJhbnNpdGlvbkZ1bmN0aW9uKTQwOTYsIGdtLmVkZ2VGdW5j
dGlvbihnbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6U2Nyb2xsLCAwLCBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQsIHRydWUpKSk7Cit9CisKK1RFU1RfRihUZXN0
R2VzdHVyZVJlY29nbml6ZXIsIHVwZGF0ZVZhbHVlcykKK3sKKyAgICBJbnNwZWN0YWJsZUlubmVy
R2VzdHVyZVJlY29nbml6ZXIgZ207CisKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5maXJzdFRvdWNo
VGltZSgpKTsKKyAgICBBU1NFUlRfRVEoMC4wLCBnbS5sYXN0VG91Y2hUaW1lKCkpOworICAgIEFT
U0VSVF9FUShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1cmUsIGdtLnN0YXRlKCkpOwor
CisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHAxKDEwLCAxMSk7CisgICAgZ20udXBk
YXRlVmFsdWVzKDEuMSwgcDEpOworCisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRvdWNoUG9z
aXRpb24oKS54KCkpOworICAgIEFTU0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCku
eSgpKTsKKyAgICBBU1NFUlRfRVEoMS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAgICBBU1NF
UlRfRVEoMC4wLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgpKTsKKwor
ICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMigxMywgMTQpOworICAgIGdtLnNldFN0
YXRlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlBlbmRpbmdTeW50aGV0aWNDbGljayk7CisgICAg
Z20udXBkYXRlVmFsdWVzKDIuMCwgcDIpOworCisgICAgQVNTRVJUX0VRKDEwLCBnbS5maXJzdFRv
dWNoUG9zaXRpb24oKS54KCkpOworICAgIEFTU0VSVF9FUSgxMSwgZ20uZmlyc3RUb3VjaFBvc2l0
aW9uKCkueSgpKTsKKyAgICBBU1NFUlRfRVEoMS4xLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAg
ICBBU1NFUlRfRVEoMi4wIC0gMS4xLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNo
VGltZSgpKTsKKworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCBwMygyMywgMzQpOwor
ICAgIGdtLnNldFN0YXRlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6Ok5vR2VzdHVyZSk7CisgICAg
Z20udXBkYXRlVmFsdWVzKDMuMCwgcDMpOworCisgICAgQVNTRVJUX0VRKDIzLCBnbS5maXJzdFRv
dWNoUG9zaXRpb24oKS54KCkpOworICAgIEFTU0VSVF9FUSgzNCwgZ20uZmlyc3RUb3VjaFBvc2l0
aW9uKCkueSgpKTsKKyAgICBBU1NFUlRfRVEoMy4wLCBnbS5maXJzdFRvdWNoVGltZSgpKTsKKyAg
ICBBU1NFUlRfRVEoMC4wLCBnbS5sYXN0VG91Y2hUaW1lKCkgLSBnbS5maXJzdFRvdWNoVGltZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96303</attachid>
            <date>2011-06-07 14:56:47 -0700</date>
            <delta_ts>2011-06-07 18:18:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54417-20110607174935.patch</filename>
            <type>text/plain</type>
            <size>46715</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyNjYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjNDA2ZWVhMDc3ZDBiOWJkZTViNTBk
NjYxYzNkMjBmYTM2OTI5NDU0Li40NzEwNGM1NDVkMzUzNGQ5ZGRmMzU5N2QyMGQ5MjZlMWFlOTVh
ODg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDYtMDcgIFJvYmVydCBLcm9lZ2VyICA8
cmprcm9lZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGEgYmFzaWMgZ2VzdHVyZSByZWNvZ25pemVy
IHRvIHRoZSBDaHJvbWl1bSBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTcKKworICAgICAgICBTaG93cyB0aGF0IHRoZSBiYXNpYyBD
aHJvbWl1bSBnZXN0dXJlIG1hbmFnZXIgY2FuIGNvcnJlY3RseSBjb252ZXJ0IGEgdG91Y2gKKyAg
ICAgICAgZXZlbnQgc2VxdWVuY2UgaW50byBhIHNlcXVlbmNlIG9mIHN5bnRoZXRpYyBtb3VzZSBl
dmVudHMgZm9yIGNsaWNraW5nIGFuZAorICAgICAgICBzY3JvbGxpbmcuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLWNsaWNrLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdl
c3R1cmUtc2Nyb2xsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0
dXJlLXNjcm9sbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDExLTA2LTA3ICBSb2IgQnVpcyAg
PHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGlj
ay1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0
dXJlLWNsaWNrLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjhkZWJhYjk0ZjE4OTBjOGQ3YmE5
ZjcwNTRlMzYyMWZiNThmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MCBAQAorVGhpcyB0ZXN0cyBiYXNpYyBzaW5nbGUgdG91Y2ggZ2VzdHVyZSBnZW5lcmF0aW9uLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworR2VzdHVyZSBtYW5hZ2VyIG5vdCBpbXBs
ZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTA3ZTRhMjlhZDc1
YWIyMmYzMGY4NzQxNDk3NTlhNGYyMmQyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1jbGljay5odG1sCkBAIC0wLDAgKzEs
MTE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4
dC9jc3MiPgorI3RvdWNodGFyZ2V0IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4
OworICBiYWNrZ3JvdW5kOiBibHVlOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgpOyI+Cis8ZGl2IGlkPSJ0b3VjaHRhcmdldCI+CisKKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cit2YXIgY2xp
Y2tFdmVudHNSZWNlaXZlZCA9IDA7Cit2YXIgZXhwZWN0ZWRNb3VzZUV2ZW50cyA9IDQ7Cit2YXIg
dG91Y2hFdmVudHNSZWNlaXZlZCA9IDA7Cit2YXIgbW91c2VFdmVudHNSZWNlaXZlZCA9IDA7Cit2
YXIgZXZlbnRUeXBlcyA9IFsgJ21vdXNlbW92ZScsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdj
bGljaycgXTsKKworZnVuY3Rpb24gZ2VzdHVyZUV2ZW50Q2FsbGJhY2soZXZlbnQpCit7CisgICAg
aWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2V2ZW50LnR5cGUnLCBldmVudFR5cGVzW21vdXNlRXZlbnRzUmVjZWl2ZWRdKTsKKyAgICAgICAg
c2hvdWxkQmUoJ2V2ZW50LmNsaWVudFgnLCAnMTAnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50
LmNsaWVudFknLCAnMTInKTsKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LnNoaWZ0S2V5IiwgInRy
dWUiKTsKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LmFsdEtleSIsICJ0cnVlIik7CisgICAgICAg
IHNob3VsZEJlKCJldmVudC5jdHJsS2V5IiwgImZhbHNlIik7CisgICAgICAgIHNob3VsZEJlKCJl
dmVudC5tZXRhS2V5IiwgImZhbHNlIik7CisgICAgICAgIG1vdXNlRXZlbnRzUmVjZWl2ZWQrKzsK
KyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhldmVudC50eXBlKTsKKyAgICAgICAgZGVidWco
ZXZlbnQuY2xpZW50WCk7CisgICAgICAgIGRlYnVnKGV2ZW50LmNsaWVudFkpOworICAgIH0KK30K
KworLy8gQmVjYXVzZSB3ZSBtYXkgbm90IGhhdmUgYSBnZXN0dXJlIHJlY29nbml6ZXIsIHdlIHNl
bmQgYSBrZXkgcHJlc3MKKy8vIGV2ZW50IHRvIGVuZCB0aGUgdGVzdCB3aXRob3V0IHRlbXBvcmFs
IGZsYWtpbmVzcy4KK2Z1bmN0aW9uIHF1aXRLZXlUb0VuZFRlc3QoZXZlbnQpIHsKKyAgICBlbmRU
ZXN0KCk7Cit9CisKKy8vIExvZyB0aGF0IHdlIHN0aWxsIGdvdCB0aGUgdG91Y2ggZXZlbnRzLgor
ZnVuY3Rpb24gdG91Y2hFdmVudENhbGxiYWNrKGV2ZW50KSB7CisgICAgdG91Y2hFdmVudHNSZWNl
aXZlZCsrOworICAgIGRlYnVnKCdoYXZlIHJlY2VpdmVkOiAnICsgdG91Y2hFdmVudHNSZWNlaXZl
ZCArICcgdG91Y2ggZXZlbnRzJyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHNp
bmdsZVRvdWNoU2VxdWVuY2UoKQoreworICAgIGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMo
KTsKKyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDEwLCAxMik7CisgICAgZXZlbnRTZW5k
ZXIudG91Y2hTdGFydCgpOworCisgICAgLy8gSW5zZXJ0IHNvbWUgZGVsYXkuIE5COiB0aGlzIHZh
bHVlIGRlcGVuZHMgb24gbWluQ2xpY2tEb3duVGltZSwKKyAgICAvLyBtYXhDbGlja0Rvd25UaW1l
IGZyb20gR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5jcHAKKyAgICBldmVudFNlbmRlci5sZWFw
Rm9yd2FyZCgyMCk7CisgICAgZXZlbnRTZW5kZXIuc2V0VG91Y2hNb2RpZmllcigic2hpZnQiLCB0
cnVlKTsKKyAgICBldmVudFNlbmRlci5zZXRUb3VjaE1vZGlmaWVyKCJhbHQiLCB0cnVlKTsKKwor
ICAgIGV2ZW50U2VuZGVyLnJlbGVhc2VUb3VjaFBvaW50KDApOworICAgIGV2ZW50U2VuZGVyLnRv
dWNoRW5kKCk7Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGlmIChtb3VzZUV2ZW50
c1JlY2VpdmVkIDwgZXhwZWN0ZWRNb3VzZUV2ZW50cykgeworICAgICAgICBkZWJ1ZygnR2VzdHVy
ZSBtYW5hZ2VyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLicpOworICAgIH0KKyAg
ICAvLyBCYWlsLgorICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0b3VjaHRhcmdldCcpOworICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRv
d24iLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAgIGRpdi5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIGdlc3R1cmVFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywgZmFsc2UpOworICAg
IGRpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBnZXN0dXJlRXZlbnRDYWxsYmFjaywg
ZmFsc2UpOworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBxdWl0S2V5
VG9FbmRUZXN0LCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQi
LCB0b3VjaEV2ZW50Q2FsbGJhY2ssIGZhbHNlKTsKKyAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigi
dG91Y2htb3ZlIiwgdG91Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisgICAgZGl2LmFkZEV2ZW50
TGlzdGVuZXIoInRvdWNoZW5kIiwgdG91Y2hFdmVudENhbGxiYWNrLCBmYWxzZSk7CisKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Cisg
ICAgICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGJhc2ljIHNpbmdsZSB0b3VjaCBnZXN0dXJl
IGdlbmVyYXRpb24uIik7CisgICAgICAgIGlmIChldmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRz
KSB7CisgICAgICAgICAgICBzaW5nbGVUb3VjaFNlcXVlbmNlKCk7CisgICAgICAgICAgICBldmVu
dFNlbmRlci5sZWFwRm9yd2FyZCgxMCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3du
KCcgJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBS
ZW5kZXJUcmVlLiAgVGFwIG9uIHRoZSBibHVlIHJlY3QgdG8gbG9nLiIpCisgICAgfQorfQorPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC1nZXN0dXJlLXNjcm9sbC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGJiYjY2YTVlMTA4MGE5YjBjYWJjZjEzYjlhZjQzNGFkMmQ4OGIxNgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUt
c2Nyb2xsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHNjcm9sbCBn
ZXN0dXJlIGdlbmVyYXRpb24gZnJvbSB0b3VjaCBldmVudHMuIFNxdWFyZSBpcyAobW9zdGx5KSBn
cmVlbiBvbiBwYXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZXN0dXJlIG1h
bmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtZ2VzdHVyZS1zY3JvbGwuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDE3OTMzMjQ3YjFmNjQ0ZDgwNTc0NGJlNjNiNDZlYzAyZWE4NWUzYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLmh0bWwKQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48
L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisjdG91Y2h0YXJnZXQgeworICB3aWR0
aDogMTAwcHg7CisgIGhlaWdodDogMTAwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYmFj
a2dyb3VuZDogd2hpdGU7Cit9CisKKyNtb3Zpbmdib3ggeworICB3aWR0aDogMTAwJTsKKyAgaGVp
Z2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHdvcmQtd3JhcDogYnJlYWstd29y
ZDsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBvdmVyZmxvdy14OiBzY3JvbGw7CisgIGRpc3Bs
YXk6IGJsb2NrOworfQorCisjZ3JlZW5ib3ggeworICB3aWR0aDogMTAwcHg7CisgIGhlaWdodDog
MTAwcHg7CisgIGJhY2tncm91bmQ6IGdyZWVuOworICBwYWRkaW5nOiAwcHg7CisgIG1hcmdpbjog
MHB4OworfQorCisjcmVkYm94IHsKKyAgd2lkdGg6IDEwMHB4OworICBoZWlnaHQ6IDEwMHB4Owor
ICBiYWNrZ3JvdW5kOiByZWQ7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisK
K3RkIHsKKyAgcGFkZGluZzogMHB4OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxl
PSJtYXJnaW46MCIgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InRvdWNodGFyZ2V0Ij4K
KyAgPGRpdiBpZD0ibW92aW5nYm94Ij4KKyAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2lu
Zz0iMHB4Ij4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9InJlZGJveCI+PC9kaXY+
PC90ZD4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48L3RkPgorICAgICAg
PC90cj4KKyAgICAgIDx0cj4KKyAgICAgICAgPHRkPjxkaXYgaWQ9ImdyZWVuYm94Ij48L2Rpdj48
L3RkPgorICAgICAgICA8dGQ+PGRpdiBpZD0iZ3JlZW5ib3giPjwvZGl2PjwvdGQ+CisgICAgICA8
L3RyPgorICAgIDwvdGFibGU+CisgIDwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisKK3ZhciBtb3ZpbmdkaXY7Cit2YXIgZXhwZWN0ZWRTY3JvbGxzVG90YWwgPSAy
OwordmFyIHNjcm9sbHNPY2N1cnJlZCA9IDA7Cit2YXIgc2Nyb2xsQW1vdW50WCA9IFsnOTAnLCAn
OTAnXTsKK3ZhciBzY3JvbGxBbW91bnRZID0gWycwJywgJzk1J107CisKK2Z1bmN0aW9uIGNoZWNr
U2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbW92aW5nYm94Jyk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBz
aG91bGRCZSgnbW92aW5nZGl2LnNjcm9sbFRvcCcsIHNjcm9sbEFtb3VudFlbc2Nyb2xsc09jY3Vy
cmVkXSk7CisgICAgICAgIHNob3VsZEJlKCdtb3ZpbmdkaXYuc2Nyb2xsTGVmdCcsIHNjcm9sbEFt
b3VudFhbc2Nyb2xsc09jY3VycmVkXSk7CisgICAgICAgIHNjcm9sbHNPY2N1cnJlZCsrOworICAg
IH0KKworICAgIGlmIChzY3JvbGxzT2NjdXJyZWQgPT0gZXhwZWN0ZWRTY3JvbGxzVG90YWwpIHsK
KyAgICAgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICAgICAgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
ZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gZmluZ2VyVXAo
ZXZlbnQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGRlYnVnKCdtb3ZlZDogJyArIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wICsgJywgJyAr
IGV2ZW50LmN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCk7CisgICAgcmV0dXJuIHRydWU7ICAvLyBX
YW50IHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KK30KKworZnVuY3Rpb24gZmlyc3RUb3VjaERyYWdT
ZXF1ZW5jZSgpCit7CisgICAgZGVidWcoImZpcnN0IGdlc3R1cmUiKTsKKyAgICBldmVudFNlbmRl
ci5jbGVhclRvdWNoUG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg5NSwg
MTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoU3RhcnQoKTsKKworICAgIC8vIFNjcm9sbCB0aGUg
ZGl2IHRvIHRoZSBsZWZ0LgorICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgNSwg
MTIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVs
ZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKKworICAgIC8v
IFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNldCgpOworfQorCitmdW5jdGlv
biBzZWNvbmRUb3VjaERyYWdTZXF1ZW5jZSgpCit7CisgICAgZGVidWcoInNlY29uZCBnZXN0dXJl
Iik7CisgICAgZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVy
LmFkZFRvdWNoUG9pbnQoMTIsIDk3KTsKKyAgICBldmVudFNlbmRlci50b3VjaFN0YXJ0KCk7CisK
KyAgICAvLyBTY3JvbGwgdGhlIHJlY3RhbmdsZSBkb3duLgorICAgIGV2ZW50U2VuZGVyLnVwZGF0
ZVRvdWNoUG9pbnQoMCwgMTIsIDIpOworICAgIGV2ZW50U2VuZGVyLnRvdWNoTW92ZSgpOworCisg
ICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMCk7CisgICAgZXZlbnRTZW5kZXIudG91
Y2hFbmQoKTsKKworICAgIC8vIFdhaXQgZm9yIGxheW91dC4KKyAgICBjaGVja1Njcm9sbE9mZnNl
dCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0
dXJlIG1hbmFnZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7
CisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZhciBtb3ZpbmdkaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbW92aW5nYm94Jyk7CisKKyAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGdlbmVyYXRp
b24gZnJvbSB0b3VjaCBldmVudHMuICcgKworICAgICAgICAgICAgJ1NxdWFyZSBpcyAobW9zdGx5
KSBncmVlbiBvbiBwYXNzJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQ
b2ludHMpCisgICAgICAgICAgICBmaXJzdFRvdWNoRHJhZ1NlcXVlbmNlKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRyZWUuICBUb3VjaCBzY3JvbGwg
dGhlIHJlZCByZWN0IHRvIGxvZy4iKTsKKyAgICAgICAgbW92aW5nZGl2LmFkZEV2ZW50TGlzdGVu
ZXIoJ3RvdWNoZW5kJywgZmluZ2VyVXAsIGZhbHNlKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKwor
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gt
Z2VzdHVyZS1jbGljay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDYwODQ3ODM1ZWI4NWIyNjAx
ZmZlZTRiNGNmYTgwMzhlMTUyMzJmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtY2xpY2stZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgdGVzdHMgYmFzaWMgc2luZ2xlIHRvdWNo
IGdlc3R1cmUgZ2VuZXJhdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2hh
dmUgcmVjZWl2ZWQ6IDEgdG91Y2ggZXZlbnRzCitoYXZlIHJlY2VpdmVkOiAyIHRvdWNoIGV2ZW50
cworUEFTUyBldmVudC50eXBlIGlzICJtb3VzZW1vdmUiCitQQVNTIGV2ZW50LmNsaWVudFggaXMg
MTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVudC5zaGlmdEtleSBpcyB0cnVl
CitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmN0cmxLZXkgaXMgZmFsc2UK
K1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBldmVudC50eXBlIGlzICJtb3VzZWRv
d24iCitQQVNTIGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgor
UEFTUyBldmVudC5zaGlmdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQ
QVNTIGV2ZW50LmN0cmxLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQor
UEFTUyBldmVudC50eXBlIGlzICJtb3VzZXVwIgorUEFTUyBldmVudC5jbGllbnRYIGlzIDEwCitQ
QVNTIGV2ZW50LmNsaWVudFkgaXMgMTIKK1BBU1MgZXZlbnQuc2hpZnRLZXkgaXMgdHJ1ZQorUEFT
UyBldmVudC5hbHRLZXkgaXMgdHJ1ZQorUEFTUyBldmVudC5jdHJsS2V5IGlzIGZhbHNlCitQQVNT
IGV2ZW50Lm1ldGFLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQudHlwZSBpcyAiY2xpY2siCitQQVNT
IGV2ZW50LmNsaWVudFggaXMgMTAKK1BBU1MgZXZlbnQuY2xpZW50WSBpcyAxMgorUEFTUyBldmVu
dC5zaGlmdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50LmFsdEtleSBpcyB0cnVlCitQQVNTIGV2ZW50
LmN0cmxLZXkgaXMgZmFsc2UKK1BBU1MgZXZlbnQubWV0YUtleSBpcyBmYWxzZQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1
cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MWY5OGJkYjBiNWRlN2EyMjI5MTg2ZGZkZWM4NjA2YWYwZjU3ODQzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtZ2VzdHVyZS1zY3JvbGwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMg
dGVzdHMgc2Nyb2xsIGdlc3R1cmUgZ2VuZXJhdGlvbiBmcm9tIHRvdWNoIGV2ZW50cy4gU3F1YXJl
IGlzIChtb3N0bHkpIGdyZWVuIG9uIHBhc3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK2ZpcnN0IGdlc3R1cmUKK1BBU1MgbW92aW5nZGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1v
dmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitzZWNvbmQgZ2VzdHVyZQorUEFTUyBtb3ZpbmdkaXYu
c2Nyb2xsVG9wIGlzIDk1CitQQVNTIG1vdmluZ2Rpdi5zY3JvbGxMZWZ0IGlzIDkwCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGU3OWZlNTEyMWZjNGQ2OGNmMGIwNDYyZTFhY2MyMGUyODJkZWVjZDkuLjcwMTBmY2Y0YmI1MjFk
MDk2NTUxMTUzZmU4OGQyODRlYjNkYzQ5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MSBAQAor
MjAxMS0wNi0wNyAgUm9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBB
ZGQgYSBiYXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBsYXRmb3JtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxNworCisg
ICAgICAgIEFkZHMgYSBiYXNpYyBnZXN0dXJlIHJlY29nbml6ZXIgdG8gdGhlIENocm9taXVtIHBs
YXRmb3JtLiBBZGRzIGFuIGVudHJ5CisgICAgICAgIHBvaW50IHRvIHRoZSBHZXN0dXJlUmVjb2du
aXplciB0byByZXNldCBhbnkgaW50ZXJuYWwgc3RhdGUgb24gYSBwYWdlIHJlc2V0LgorICAgICAg
ICBSZXNldHRpbmcgdGhlIGdlc3R1cmUgcmVjb2duaXplciBvbiBwYWdlIGxvYWQgaXMgbmVjZXNh
cnkgZm9yIHJlbGlhYmxlCisgICAgICAgIGxheW91dCB0ZXN0IGV4ZWN1dGlvbiBhbmQgaW1wcm92
ZXMgZ2VzdHVyZSByZWNvZ25pemVyIG9wZXJhdGlvbmFsCisgICAgICAgIHJvYnVzdG5lc3MuCisK
KyAgICAgICAgQWRkZWQgYW4gYWRkaXRpb25hbCBjb25zdHJ1Y3RvciB0byBwZXJtaXQgYnVpbGRp
bmcgYSBzeW50aGV0aWMKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50LgorCisgICAgICAgIFNt
YWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgYXMgcmVx
dWlyZWQgdG8KKyAgICAgICAgaW1wbGVtZW50IHRoZSBzaW1wbGUgQ2hyb21pdW0gcGxhdGZvcm0g
Z2VzdHVyZSByZWNvZ25pemVyLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC1nZXN0dXJlLWNsaWNrLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnJlc2V0R2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpyZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2du
aXplci5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXI6OklubmVyR2Vz
dHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXpl
cjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6fklu
bmVyR2VzdHVyZVJlY29nbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVj
b2duaXplcjo6YWRkRWRnZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OmlzSW5DbGlja1RpbWVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5u
ZXJHZXN0dXJlUmVjb2duaXplcjo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6ZGlzcGF0Y2hTeW50aGV0aWNDbGljayk6
CisgICAgICAgIChXZWJDb3JlOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpwcm9jZXNzVG91Y2hF
dmVudEZvckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJlUmVjb2duaXpl
cjo6c2Nyb2xsVmlhVG91Y2hNb3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJl
UmVjb2duaXplcjo6dXBkYXRlVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklubmVyR2VzdHVy
ZVJlY29nbml6ZXI6OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp0b3VjaERvd24pOgor
ICAgICAgICAoV2ViQ29yZTo6bm9HZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsaWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzQ2xpY2tPclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpp
blNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcjo6UGxh
dGZvcm1HZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdlc3R1
cmVSZWNvZ25pemVyOjp+UGxhdGZvcm1HZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVtOjpHZXN0dXJlUmVjb2duaXplckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW06On5HZXN0dXJl
UmVjb2duaXplckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJl
UmVjb2duaXplckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0
dXJlUmVjb2duaXplcjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5uZXJHZXN0dXJl
UmVjb2duaXplcjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJD
aHJvbWl1bTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bTo6cHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKToKKwogMjAxMS0wNi0wNyAgUm9iIEJ1
aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA3ODRkMGE5NTAwZDU4NTZhOTNlODJmMjY1ZjViYjFmNmQ5YTFk
MTVjLi5hNzlhZjEzYTM2NGRlODEzODUwYjc1ODkzZDM3MzUxNmVkMTllZDIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC03NjcsNyArNzY3LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL05vdEltcGxlbWVudGVkLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZUV2ZW50LmgnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Q
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oJywKQEAgLTM4MDksNiArMzgwOCw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXcuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xsVmlld0NsaWVudC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJv
bWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lv
bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9LZXlDb2RlQ29udmVyc2lvbkd0
ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0tleWJvYXJkQ29kZXMuaCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMjhlNTc1OTllMjcwNmUwNzkx
NzllNGRkODAxZDA5MGZkMTEyNDA0ZS4uMjc3NWI0MTQ1MWVlZTk3ZTEwOGU5YjE5NDNhYjZmODZm
YzNlMDkzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzI5Miw2ICsz
MjkyLDE2IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRm
b3JtVG91Y2hFdmVudCYgZXZlbnQpCiAKICAgICByZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0K
KworI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCit2b2lkIEV2ZW50SGFuZGxlcjo6cmVz
ZXRHZXN0dXJlUmVjb2duaXplcigpCit7CisgICAgaWYgKG1fZ2VzdHVyZVJlY29nbml6ZXIpCisg
ICAgICAgIG1fZ2VzdHVyZVJlY29nbml6ZXItPnJlc2V0KCk7Cit9CisjZW5kaWYKKworCiAjZW5k
aWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggMWRhNThkOTE2OTQ4ZTQ5
MzEzMTZhNzVjMzM5N2JmOTUwZDRmYjU5My4uOGFiNzQzN2U2YTIxMTY1ODE2MmIwNDlhYzg5MTc2
ZjgwNjJhOTgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNjYsNiArMTY2
LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVS
KQorICAgIHZvaWQgcmVzZXRHZXN0dXJlUmVjb2duaXplcigpOworI2VuZGlmCisKICNpZiBFTkFC
TEUoQ09OVEVYVF9NRU5VUykKICAgICBib29sIHNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYpOwogICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXko
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBlMzljNTJmNTExNWJlMWQzMzUwY2Ri
ZDc4MzdlMjhhMWNkYzEyZmZlLi43Y2NkOWExYmIwYWE4NDY1OWQwNGMwMjJhYjk3NDA3NzZkM2Ex
ZjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yMzUsNiArMjM1LDEwIEBAIHZv
aWQgRnJhbWVWaWV3OjpyZXNldCgpCiAgICAgbV9pc1Zpc3VhbGx5Tm9uRW1wdHkgPSBmYWxzZTsK
ICAgICBtX2ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dENhbGxiYWNrUGVuZGluZyA9IHRydWU7
CiAgICAgbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yID0gMDsKKworI2lmIEVOQUJMRShH
RVNUVVJFX1JFQ09HTklaRVIpCisgICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnJlc2V0R2Vz
dHVyZVJlY29nbml6ZXIoKTsKKyNlbmRpZgogfQogCiBib29sIEZyYW1lVmlldzo6aXNGcmFtZVZp
ZXcoKSBjb25zdCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXIuaAppbmRleCA4MDI1ODNmMmEwNTUzYmI3Y2E3M2M3ODVlZGY1YWY4YWMw
MWIwYTUwLi4yZjgwNWJkMjYyNzFkYzE0ZDM5MDQ1M2UzYzkwNmNlMGExNDNiNWM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HZXN0dXJlUmVjb2duaXplci5o
CkBAIC01Nyw2ICs1Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBzcGVjaWZpZXMgaWYgdGhlIHxldmVu
dHwgd2FzIGFjdHVhbGx5IGhhbmRsZWQgYnkgfHNvdXJjZXwgKGJ5IHRoZSBKYXZhU2NyaXB0KQog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgcmVzdWx0ZWQgaW4gZmlyaW5nIGEgc3lu
dGhldGljIGV2ZW50LgogICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzVG91Y2hFdmVudEZvckdlc3R1
cmUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiwgRXZlbnRIYW5kbGVyKiwgYm9vbCBoYW5kbGVk
KSA9IDA7CisKKyAgICAvLyBDbGVhcnMgdGhlIEdlc3R1cmVSZWNvZ25pemVyIHRvIGl0cyBpbml0
aWFsIHN0YXRlLgorICAgIHZpcnR1YWwgdm9pZCByZXNldCgpID0gMDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2
ZW50LmgKaW5kZXggMzc2NTU1MzNiZDQ4ZTMxZjU1MWNlZDJkMzMwNDRhOWJlODg3ZTAwYy4uYTZi
N2M1MDcyZmRjYzNkNDcyNGJkMzg0NDFmMjZmYWEwZWRjZDY0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTEwNiw2ICsxMDYsMjggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBQbGF0Zm9y
bVdoZWVsRXZlbnQoSW50UG9pbnQgcG9zaXRpb24sIEludFBvaW50IGdsb2JhbFBvc2l0aW9uLCBm
bG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSwgZmxvYXQgd2hlZWxUaWNrc1gsIGZsb2F0IHdoZWVs
VGlja3NZLCBQbGF0Zm9ybVdoZWVsRXZlbnRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBp
c0FjY2VwdGVkLCBib29sIHNoaWZ0S2V5LCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29s
IG1ldGFLZXkpCisgICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAg
ICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZGVs
dGFYKGRlbHRhWCkKKyAgICAgICAgICAgICwgbV9kZWx0YVkoZGVsdGFZKQorICAgICAgICAgICAg
LCBtX3doZWVsVGlja3NYKHdoZWVsVGlja3NYKQorICAgICAgICAgICAgLCBtX3doZWVsVGlja3NZ
KHdoZWVsVGlja3NZKQorICAgICAgICAgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQor
ICAgICAgICAgICAgLCBtX2lzQWNjZXB0ZWQoaXNBY2NlcHRlZCkKKyAgICAgICAgICAgICwgbV9z
aGlmdEtleShzaGlmdEtleSkKKyAgICAgICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAg
ICAgICAgICAsIG1fYWx0S2V5KGFsdEtleSkKKyAgICAgICAgICAgICwgbV9tZXRhS2V5KG1ldGFL
ZXkpCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgLCBtX2hhc1ByZWNpc2VTY3JvbGxp
bmdEZWx0YXMoZmFsc2UpCisgICAgICAgICAgICAsIG1fcGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lKQorICAgICAgICAgICAgLCBtX21vbWVudHVtUGhhc2UoUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VOb25lKQorICAgICAgICAgICAgLCBtX3RpbWVzdGFtcCgwKQorI2VuZGlmCisgICAg
ICAgIHsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IEludFBvaW50JiBwb3MoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9IC8vIFBsYXRmb3JtV2luZG93IGNvb3JkaW5hdGVzLgogICAg
ICAgICBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQ
b3NpdGlvbjsgfSAvLyBTY3JlZW4gY29vcmRpbmF0ZXMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1
bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDBmZTg5ZjRhYWY0YzI5ZDZhMTQyZDRlZWM5MDEzMGNiMWQzMmNj
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0dl
c3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHZXN0dXJlUmVjb2duaXplckNocm9taXVtLmgiCisKKyNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgYm9vbCBjbGljayhJbm5lckdlc3R1cmVSZWNvZ25pemVyKiwgY29uc3QgUGxhdGZvcm1U
b3VjaFBvaW50Jik7CitzdGF0aWMgYm9vbCBpc0NsaWNrT3JTY3JvbGwoSW5uZXJHZXN0dXJlUmVj
b2duaXplciosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOworc3RhdGljIGJvb2wgaW5TY3Jv
bGwoSW5uZXJHZXN0dXJlUmVjb2duaXplciosIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludCYpOwor
c3RhdGljIGJvb2wgbm9HZXN0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXIqLCBjb25zdCBQbGF0
Zm9ybVRvdWNoUG9pbnQmKTsKK3N0YXRpYyBib29sIHRvdWNoRG93bihJbm5lckdlc3R1cmVSZWNv
Z25pemVyKiwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisKKy8vIEZJWE1FOiBNYWtlIHRo
ZXNlIGNvbmZpZ3VyYWJsZSBwcm9ncmFtbWF0aWNhbGx5Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBt
YXhpbXVtVG91Y2hEb3duRHVyYXRpb25JblNlY29uZHNGb3JDbGljayA9IDAuODsKK3N0YXRpYyBj
b25zdCBkb3VibGUgbWluaW11bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2sgPSAw
LjAxOworc3RhdGljIGNvbnN0IGludCBtYXhpbXVtVG91Y2hNb3ZlSW5QaXhlbHNGb3JDbGljayA9
IDIwOworCitJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpJbm5lckdlc3R1cmVSZWNvZ25pemVyKCkK
KyAgICA6IG1fZmlyc3RUb3VjaFRpbWUoMC4wKQorICAgICwgbV9zdGF0ZShJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjpOb0dlc3R1cmUpCisgICAgLCBtX2xhc3RUb3VjaFRpbWUoMC4wKQorICAgICwg
bV9ldmVudEhhbmRsZXIoMCkKKyAgICAsIG1fY3RybEtleShmYWxzZSkKKyAgICAsIG1fYWx0S2V5
KGZhbHNlKQorICAgICwgbV9zaGlmdEtleShmYWxzZSkKKyAgICAsIG1fbWV0YUtleShmYWxzZSkK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBGaXJzdEZpbmdlciA9IDA7CisgICAgY29uc3QgUGxhdGZv
cm1Ub3VjaFBvaW50OjpTdGF0ZSBSZWxlYXNlZCA9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hS
ZWxlYXNlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIFByZXNzZWQgPSBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZDsKKyAgICBjb25zdCBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlN0YXRlIE1vdmVkID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOworICAg
IGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgU3RhdGlvbmFyeSA9IFBsYXRmb3JtVG91
Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5OworICAgIGNvbnN0IFBsYXRmb3JtVG91Y2hQb2ludDo6
U3RhdGUgQ2FuY2VsbGVkID0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDsKKwor
ICAgIGFkZEVkZ2VGdW5jdGlvbihOb0dlc3R1cmUsIEZpcnN0RmluZ2VyLCBQcmVzc2VkLCBmYWxz
ZSwgdG91Y2hEb3duKTsKKyAgICBhZGRFZGdlRnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNr
LCBGaXJzdEZpbmdlciwgQ2FuY2VsbGVkLCBmYWxzZSwgbm9HZXN0dXJlKTsKKyAgICBhZGRFZGdl
RnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgUmVsZWFzZWQsIGZh
bHNlLCBjbGljayk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFBlbmRpbmdTeW50aGV0aWNDbGljaywg
Rmlyc3RGaW5nZXIsIE1vdmVkLCBmYWxzZSwgaXNDbGlja09yU2Nyb2xsKTsKKyAgICBhZGRFZGdl
RnVuY3Rpb24oUGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdlciwgU3RhdGlvbmFyeSwg
ZmFsc2UsIGlzQ2xpY2tPclNjcm9sbCk7CisgICAgYWRkRWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmly
c3RGaW5nZXIsIE1vdmVkLCBmYWxzZSwgaW5TY3JvbGwpOworICAgIGFkZEVkZ2VGdW5jdGlvbihT
Y3JvbGwsIEZpcnN0RmluZ2VyLCBSZWxlYXNlZCwgZmFsc2UsIG5vR2VzdHVyZSk7CisgICAgYWRk
RWRnZUZ1bmN0aW9uKFNjcm9sbCwgRmlyc3RGaW5nZXIsIENhbmNlbGxlZCwgZmFsc2UsIG5vR2Vz
dHVyZSk7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQoreworICAg
IG1fZmlyc3RUb3VjaFRpbWUgPSAwLjA7CisgICAgbV9zdGF0ZSA9IElubmVyR2VzdHVyZVJlY29n
bml6ZXI6Ok5vR2VzdHVyZTsKKyAgICBtX2xhc3RUb3VjaFRpbWUgPSAwLjA7CisgICAgbV9ldmVu
dEhhbmRsZXIgPSAwOworfQorCitJbm5lckdlc3R1cmVSZWNvZ25pemVyOjp+SW5uZXJHZXN0dXJl
UmVjb2duaXplcigpCit7Cit9CisKK3ZvaWQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6YWRkRWRn
ZUZ1bmN0aW9uKFN0YXRlIHN0YXRlLCB1bnNpZ25lZCBmaW5nZXJJZCwgUGxhdGZvcm1Ub3VjaFBv
aW50OjpTdGF0ZSB0b3VjaFR5cGUsIGJvb2wgdG91Y2hIYW5kbGVkQnlKYXZhU2NyaXB0LCBHZXN0
dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIHRyYW5zaXRpb25GdW5jdGlvbikKK3sKKyAgICBtX2VkZ2VG
dW5jdGlvbnMuYWRkKHNpZ25hdHVyZShzdGF0ZSwgZmluZ2VySWQsIHRvdWNoVHlwZSwgdG91Y2hI
YW5kbGVkQnlKYXZhU2NyaXB0KSwgdHJhbnNpdGlvbkZ1bmN0aW9uKTsKK30KKworYm9vbCBJbm5l
ckdlc3R1cmVSZWNvZ25pemVyOjppc0luQ2xpY2tUaW1lV2luZG93KCkKK3sKKyAgICBkb3VibGUg
ZHVyYXRpb24obV9sYXN0VG91Y2hUaW1lIC0gbV9maXJzdFRvdWNoVGltZSk7CisgICAgcmV0dXJu
IGR1cmF0aW9uID49IG1pbmltdW1Ub3VjaERvd25EdXJhdGlvbkluU2Vjb25kc0ZvckNsaWNrICYm
IGR1cmF0aW9uIDwgbWF4aW11bVRvdWNoRG93bkR1cmF0aW9uSW5TZWNvbmRzRm9yQ2xpY2s7Cit9
CisKK2Jvb2wgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUo
Y29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpbnQgbWFuaGF0dGFuRGlz
dGFuY2UgPSBhYnMocG9pbnQucG9zKCkueCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKSAr
IGFicyhwb2ludC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworICAgIHJl
dHVybiBtYW5oYXR0YW5EaXN0YW5jZSA8IG1heGltdW1Ub3VjaE1vdmVJblBpeGVsc0ZvckNsaWNr
OworfQorCit2b2lkIElubmVyR2VzdHVyZVJlY29nbml6ZXI6OmRpc3BhdGNoU3ludGhldGljQ2xp
Y2soY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgZmFrZU1vdXNlTW92ZShwb2ludC5wb3MoKSwgcG9pbnQuc2NyZWVuUG9zKCksIE5vQnV0
dG9uLCBNb3VzZUV2ZW50TW92ZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgbV9zaGlmdEtleSwgbV9j
dHJsS2V5LCBtX2FsdEtleSwgbV9tZXRhS2V5LCBtX2xhc3RUb3VjaFRpbWUpOworICAgIFBsYXRm
b3JtTW91c2VFdmVudCBmYWtlTW91c2VEb3duKHBvaW50LnBvcygpLCBwb2ludC5zY3JlZW5Qb3Mo
KSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8gMSwgbV9z
aGlmdEtleSwgbV9jdHJsS2V5LCBtX2FsdEtleSwgbV9tZXRhS2V5LCBtX2xhc3RUb3VjaFRpbWUp
OworICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChwb2ludC5wb3MoKSwgcG9pbnQu
c2NyZWVuUG9zKCksIExlZnRCdXR0b24sIE1vdXNlRXZlbnRSZWxlYXNlZCwgLyogY2xpY2tDb3Vu
dCAqLyAxLCBtX3NoaWZ0S2V5LCBtX2N0cmxLZXksIG1fYWx0S2V5LCBtX21ldGFLZXksIG1fbGFz
dFRvdWNoVGltZSk7CisKKyAgICBtX2V2ZW50SGFuZGxlci0+bW91c2VNb3ZlZChmYWtlTW91c2VN
b3ZlKTsKKyAgICBtX2V2ZW50SGFuZGxlci0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGZha2VNb3Vz
ZURvd24pOworICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChmYWtl
TW91c2VVcCk7Cit9CisKK2Jvb2wgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6cHJvY2Vzc1RvdWNo
RXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQsIEV2ZW50SGFu
ZGxlciogZXZlbnRIYW5kbGVyLCBib29sIGhhbmRsZWQpCit7CisgICAgbV9ldmVudEhhbmRsZXIg
PSBldmVudEhhbmRsZXI7CisgICAgbV9jdHJsS2V5ID0gZXZlbnQuY3RybEtleSgpOworICAgIG1f
YWx0S2V5ID0gZXZlbnQuYWx0S2V5KCk7CisgICAgbV9zaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5
KCk7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQubWV0YUtleSgpOworCisgICAgY29uc3QgVmVjdG9y
PFBsYXRmb3JtVG91Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50LnRvdWNoUG9pbnRzKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7IGkrKykgeworICAgICAgICBj
b25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHAgPSBwb2ludHNbaV07CisgICAgICAgIHVwZGF0ZVZh
bHVlcyhldmVudC50aW1lc3RhbXAoKSwgcCk7CisKKyAgICAgICAgaWYgKEdlc3R1cmVUcmFuc2l0
aW9uRnVuY3Rpb24gZWYgPSBtX2VkZ2VGdW5jdGlvbnMuZ2V0KHNpZ25hdHVyZShtX3N0YXRlLCBw
LmlkKCksIHAuc3RhdGUoKSwgaGFuZGxlZCkpKQorICAgICAgICAgICAgaGFuZGxlZCA9ICgqZWYp
KHRoaXMsIHApOworICAgIH0KKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwordm9pZCBJbm5lckdl
c3R1cmVSZWNvZ25pemVyOjpzY3JvbGxWaWFUb3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNo
UG9pbnQmIHRvdWNoUG9pbnQpCit7CisgICAgZmxvYXQgZGVsdGFYKHRvdWNoUG9pbnQucG9zKCku
eCgpIC0gbV9maXJzdFRvdWNoUG9zaXRpb24ueCgpKTsKKyAgICBmbG9hdCBkZWx0YVkodG91Y2hQ
b2ludC5wb3MoKS55KCkgLSBtX2ZpcnN0VG91Y2hQb3NpdGlvbi55KCkpOworCisgICAgLy8gRklY
TUU6IENvbnZlcnQgdG8gZ2VzdHVyZSBldmVudHMgd2hlbiB0aGV5IGhhbmRsZSBzdWJmcmFtZXMu
CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHN5bnRoZXRpY1doZWVsRXZlbnQodG91Y2hQb2ludC5w
b3MoKSwgdG91Y2hQb2ludC5zY3JlZW5Qb3MoKSwgZGVsdGFYLCBkZWx0YVksIGRlbHRhWCAvIHN0
YXRpY19jYXN0PGZsb2F0PigxMjApLCBkZWx0YVkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oMTIwKSwg
U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIC8qIGlzQWNjZXB0ZWQgKi8gZmFsc2UsIG1fc2hpZnRL
ZXksIG1fY3RybEtleSwgbV9hbHRLZXksIG1fbWV0YUtleSk7CisgICAgbV9ldmVudEhhbmRsZXIt
PmhhbmRsZVdoZWVsRXZlbnQoc3ludGhldGljV2hlZWxFdmVudCk7CisgICAgbV9maXJzdFRvdWNo
UG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworfQorCit2b2lkIElubmVyR2VzdHVyZVJlY29n
bml6ZXI6OnVwZGF0ZVZhbHVlcyhjb25zdCBkb3VibGUgdG91Y2hUaW1lLCBjb25zdCBQbGF0Zm9y
bVRvdWNoUG9pbnQmIHRvdWNoUG9pbnQpCit7CisgICAgbV9sYXN0VG91Y2hUaW1lID0gdG91Y2hU
aW1lOworICAgIGlmIChzdGF0ZSgpID09IE5vR2VzdHVyZSkgeworICAgICAgICBtX2ZpcnN0VG91
Y2hUaW1lID0gdG91Y2hUaW1lOworICAgICAgICBtX2ZpcnN0VG91Y2hQb3NpdGlvbiA9IHRvdWNo
UG9pbnQucG9zKCk7CisgICAgfQorfQorCisvLyBCdWlsZHMgYSBzaWduYXR1cmUuIFNpZ25hdHVy
ZXMgYXJlIGFzc2VtYmxlZCBieSBqb2luaW5nIHRvZ2V0aGVyIG11bHRpcGxlIGJpdHMuCisvLyAx
IExTQiBiaXQgc28gdGhhdCB0aGUgY29tcHV0ZWQgc2lnbmF0dXJlIGlzIGFsd2F5cyBncmVhdGVy
IHRoYW4gMAorLy8gMyBiaXRzIGZvciB0aGUgfHRvdWNoVHlwZXwuCisvLyAxIGJpdCBmb3IgfGhh
bmRsZWR8CisvLyAxMiBiaXRzIGZvciB8aWR8CisvLyAxNSBiaXRzIGZvciB0aGUgfGdlc3R1cmVT
dGF0ZXwuCit1bnNpZ25lZCBpbnQgSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2lnbmF0dXJlKFN0
YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWduZWQgaWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUg
dG91Y2hUeXBlLCBib29sIGhhbmRsZWQpCit7CisgICAgQVNTRVJUKChpZCAmIDB4ZmZmKSA9PSBp
ZCk7CisgICAgcmV0dXJuIDEgKyAoKHRvdWNoVHlwZSAmIDB4NykgPDwgMSB8IChoYW5kbGVkID8g
MSA8PCA0IDogMCkgfCAoKGlkICYgMHhmZmYpIDw8IDUgKSB8IChnZXN0dXJlU3RhdGUgPDwgMTcp
KTsKK30KKworc3RhdGljIGJvb2wgdG91Y2hEb3duKElubmVyR2VzdHVyZVJlY29nbml6ZXIqIGdl
c3R1cmVSZWNvZ25pemVyLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKQoreworICAgIGdlc3R1
cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpQZW5kaW5nU3lu
dGhldGljQ2xpY2spOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBub0dlc3R1cmUoSW5u
ZXJHZXN0dXJlUmVjb2duaXplciogZ2VzdHVyZVJlY29nbml6ZXIsIGNvbnN0IFBsYXRmb3JtVG91
Y2hQb2ludCYpCit7CisgICAgZ2VzdHVyZVJlY29nbml6ZXItPnJlc2V0KCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjbGljayhJbm5lckdlc3R1cmVSZWNvZ25pemVyKiBn
ZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAg
ICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlzSW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJl
UmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdl
c3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpOb0dlc3R1
cmUpOworICAgICAgICBnZXN0dXJlUmVjb2duaXplci0+ZGlzcGF0Y2hTeW50aGV0aWNDbGljayhw
b2ludCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbm9HZXN0dXJl
KGdlc3R1cmVSZWNvZ25pemVyLCBwb2ludCk7Cit9CisKK3N0YXRpYyBib29sIGlzQ2xpY2tPclNj
cm9sbChJbm5lckdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxh
dGZvcm1Ub3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoZ2VzdHVyZVJlY29nbml6ZXItPmlz
SW5DbGlja1RpbWVXaW5kb3coKSAmJiBnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5oYXR0
YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0ZShJ
bm5lckdlc3R1cmVSZWNvZ25pemVyOjpQZW5kaW5nU3ludGhldGljQ2xpY2spOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1U
b3VjaFBvaW50OjpUb3VjaE1vdmVkICYmICFnZXN0dXJlUmVjb2duaXplci0+aXNJbnNpZGVNYW5o
YXR0YW5TcXVhcmUocG9pbnQpKSB7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zY3JvbGxW
aWFUb3VjaE1vdGlvbihwb2ludCk7CisgICAgICAgIGdlc3R1cmVSZWNvZ25pemVyLT5zZXRTdGF0
ZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpTY3JvbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpblNjcm9sbChJbm5l
ckdlc3R1cmVSZWNvZ25pemVyKiBnZXN0dXJlUmVjb2duaXplciwgY29uc3QgUGxhdGZvcm1Ub3Vj
aFBvaW50JiBwb2ludCkKK3sKKyAgICBnZXN0dXJlUmVjb2duaXplci0+c2Nyb2xsVmlhVG91Y2hN
b3Rpb24ocG9pbnQpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzT3duUHRyPFBsYXRmb3Jt
R2VzdHVyZVJlY29nbml6ZXI+IFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OmNyZWF0ZSgpCit7
CisgICAgR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSogZ2VzdHVyZVJlY29nbml6ZXIgPSBuZXcg
R2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bSgpOworICAgIHJldHVybiBhZG9wdFB0cihnZXN0dXJl
UmVjb2duaXplcik7Cit9CisKK1BsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXI6OlBsYXRmb3JtR2Vz
dHVyZVJlY29nbml6ZXIoKQoreworfQorCitQbGF0Zm9ybUdlc3R1cmVSZWNvZ25pemVyOjp+UGxh
dGZvcm1HZXN0dXJlUmVjb2duaXplcigpCit7Cit9CisKK0dlc3R1cmVSZWNvZ25pemVyQ2hyb21p
dW06Okdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKQorICAgIDogbV9pbm5lckdlc3R1cmVSZWNv
Z25pemVyKCkKK3sKK30KKworR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bTo6fkdlc3R1cmVSZWNv
Z25pemVyQ2hyb21pdW0oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2duaXplckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9HZXN0dXJlUmVjb2du
aXplckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTFjYWNhOWRkZWY0YjliOTY2YjExNjVmNWY4Zjk1
NmY2YjI3YWU0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0dlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDEwNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1faAorI2RlZmluZSBHZXN0dXJlUmVjb2duaXpl
ckNocm9taXVtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIuaCIKKwor
I2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElubmVyR2VzdHVyZVJlY29nbml6ZXIgeworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAg
ICAgICBOb0dlc3R1cmUsCisgICAgICAgIFBlbmRpbmdTeW50aGV0aWNDbGljaywKKyAgICAgICAg
U2Nyb2xsCisgICAgfTsKKworICAgIHR5cGVkZWYgYm9vbCAoKkdlc3R1cmVUcmFuc2l0aW9uRnVu
Y3Rpb24pKElubmVyR2VzdHVyZVJlY29nbml6ZXIqLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQm
KTsKKworICAgIH5Jbm5lckdlc3R1cmVSZWNvZ25pemVyKCk7CisKKyAgICB2b2lkIGRpc3BhdGNo
U3ludGhldGljQ2xpY2soY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHJlc2V0KCk7CisgICAgYm9vbCBpc0luQ2xpY2tUaW1lV2luZG93KCk7CisgICAgYm9vbCBp
c0luc2lkZU1hbmhhdHRhblNxdWFyZShjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91
Y2hFdmVudCYsIEV2ZW50SGFuZGxlciosIGJvb2wgaGFuZGxlZCk7CisgICAgdm9pZCBzY3JvbGxW
aWFUb3VjaE1vdGlvbihjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIHNldFN0
YXRlKFN0YXRlIHZhbHVlKSB7IG1fc3RhdGUgPSB2YWx1ZTsgfQorICAgIFN0YXRlIHN0YXRlKCkg
eyByZXR1cm4gbV9zdGF0ZTsgfQorcHJvdGVjdGVkOgorICAgIElubmVyR2VzdHVyZVJlY29nbml6
ZXIoKTsKKyAgICB2b2lkIGFkZEVkZ2VGdW5jdGlvbihTdGF0ZSwgdW5zaWduZWQgZmluZ2VyLCBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlLCBib29sIHRvdWNoSGFuZGxlZEJ5SmF2YVNjcmlwdCwg
R2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbik7CisgICAgdm9pZCB1cGRhdGVWYWx1ZXMoZG91Ymxl
IHRvdWNoVGltZSwgY29uc3QgUGxhdGZvcm1Ub3VjaFBvaW50Jik7CisgICAgc3RhdGljIHVuc2ln
bmVkIGludCBzaWduYXR1cmUoU3RhdGUsIHVuc2lnbmVkLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0
YXRlLCBib29sKTsKKworICAgIGZyaWVuZCBjbGFzcyBHZXN0dXJlUmVjb2duaXplckNocm9taXVt
OworCisgICAgV1RGOjpIYXNoTWFwPGludCwgR2VzdHVyZVRyYW5zaXRpb25GdW5jdGlvbj4gbV9l
ZGdlRnVuY3Rpb25zOworICAgIEludFBvaW50IG1fZmlyc3RUb3VjaFBvc2l0aW9uOworICAgIGRv
dWJsZSBtX2ZpcnN0VG91Y2hUaW1lOworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgZG91YmxlIG1f
bGFzdFRvdWNoVGltZTsKKyAgICBFdmVudEhhbmRsZXIqIG1fZXZlbnRIYW5kbGVyOworCisgICAg
Ym9vbCBtX2N0cmxLZXk7CisgICAgYm9vbCBtX2FsdEtleTsKKyAgICBib29sIG1fc2hpZnRLZXk7
CisgICAgYm9vbCBtX21ldGFLZXk7Cit9OworCitjbGFzcyBHZXN0dXJlUmVjb2duaXplckNocm9t
aXVtIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZVJlY29nbml6ZXIgIHsKK3B1YmxpYzoKKworICAg
IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW0oKTsKKyAgICB2aXJ0dWFsIH5HZXN0dXJlUmVjb2du
aXplckNocm9taXVtKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAg
ICAgbV9pbm5lckdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgfTsKKyAKKyAgICB2aXJ0
dWFsIGJvb2wgcHJvY2Vzc1RvdWNoRXZlbnRGb3JHZXN0dXJlKGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYgdG91Y2hFdmVudCwgRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIsIGJvb2wgaGFuZGxl
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lubmVyR2VzdHVyZVJlY29nbml6ZXIucHJvY2Vz
c1RvdWNoRXZlbnRGb3JHZXN0dXJlKHRvdWNoRXZlbnQsIGV2ZW50SGFuZGxlciwgaGFuZGxlZCk7
CisgICAgfQorcHJpdmF0ZToKKyAgICBJbm5lckdlc3R1cmVSZWNvZ25pemVyIG1faW5uZXJHZXN0
dXJlUmVjb2duaXplcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEdlc3R1cmVSZWNvZ25pemVyQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAzNjM1NzgxNjY3ZTViOTZiNWZiMTAyMjZmYzRhOWRkMjYxMTAzM2Y0Li40NDIxMjljYjU2YjRj
NWM2YzFiZDI3ZGU2NmFmNjIzZmYzYjliM2IxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMxIEBACisyMDExLTA2LTA3ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbY2hyb21pdW1dIEFkZCBhIGJhc2ljIGdlc3R1cmUgcmVjb2duaXplciB0byB0aGUgQ2hy
b21pdW0gcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0NDE3CisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0cyBmb3IgdGhlIGJhc2ljIGNo
cm9taXVtIHBsYXRmb3JtIGdlc3R1cmUgcmVjb2duaXplci4KKworICAgICAgICAqIHRlc3RzL0lu
bmVyR2VzdHVyZVJlY29nbml6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6Okluc3BlY3RhYmxlSW5uZXJHZXN0dXJl
UmVjb2duaXplcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJl
Y29nbml6ZXI6OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVy
R2VzdHVyZVJlY29nbml6ZXI6OmZpcnN0VG91Y2hQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6OnNldEZpcnN0VG91Y2hUaW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6Zmly
c3RUb3VjaFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdGFibGVJbm5lckdlc3R1cmVS
ZWNvZ25pemVyOjpzZXRMYXN0VG91Y2hUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rh
YmxlSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6bGFzdFRvdWNoVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6OmVkZ2VGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0
ZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29n
bml6ZXI6OmFkZEVkZ2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCdWlsZGFibGVQbGF0
Zm9ybVRvdWNoUG9pbnQ6OnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6QnVpbGRhYmxlUGxhdGZv
cm1Ub3VjaFBvaW50OjpzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1aWxkYWJsZVBsYXRmb3Jt
VG91Y2hQb2ludDo6QnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6VGVzdEdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RHZXN0dXJlUmVjb2duaXplcjo6U2V0VXApOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdEdlc3R1cmVSZWNvZ25pemVyOjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUX0YpOgorCiAyMDExLTA2LTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQXR0ZW1wdCB0byBmaXggdGhlIGNyLXdpbiBidWlsZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCmluZGV4IDQ0ZTNhMGIyZTUxY2Q3ZmVkMmQwMzI5OTY1ZTExN2Q5N2Y3
YjgwODguLjIyMmQ1ODdjMjA2NzNkMTJlZGY5YjZjY2I2ODMyYmI3NmNjMGJiYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICBdLAogICAg
ICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5h
VGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvSW5uZXJHZXN0dXJlUmVjb2duaXpl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
SURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSW5uZXJHZXN0dXJlUmVjb2duaXplclRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9Jbm5lckdlc3R1cmVSZWNvZ25pemVyVGVzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTA4YzY5MWUwMTA5ODVmMzM5ZGI2ZjkxZDk4ZjRmZDdkMGFkZTdlZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW5uZXJHZXN0dXJlUmVjb2du
aXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiR2VzdHVyZVJlY29nbml6ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IEluc3BlY3RhYmxlSW5uZXJHZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyBJbm5lckdlc3R1cmVS
ZWNvZ25pemVyIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6
ZXIoKQorICAgICAgICA6IFdlYkNvcmU6OklubmVyR2VzdHVyZVJlY29nbml6ZXIoKQorICAgIHsK
KyAgICB9CisKKyAgICBpbnQgc2lnbmF0dXJlKFN0YXRlIGdlc3R1cmVTdGF0ZSwgdW5zaWduZWQg
aWQsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgdG91Y2hUeXBlLCBib29sIGhhbmRsZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6c2lnbmF0dXJlKGdl
c3R1cmVTdGF0ZSwgaWQsIHRvdWNoVHlwZSwgaGFuZGxlZCk7CisgICAgfTsKKworICAgIEludFBv
aW50IGZpcnN0VG91Y2hQb3NpdGlvbigpIHsgcmV0dXJuIG1fZmlyc3RUb3VjaFBvc2l0aW9uOyB9
OworCisgICAgdm9pZCBzZXRGaXJzdFRvdWNoVGltZShkb3VibGUgdCkgeyBtX2ZpcnN0VG91Y2hU
aW1lID0gdDsgfTsKKyAgICBkb3VibGUgZmlyc3RUb3VjaFRpbWUoKSB7IHJldHVybiBtX2ZpcnN0
VG91Y2hUaW1lOyB9OworCisgICAgdm9pZCBzZXRMYXN0VG91Y2hUaW1lKGRvdWJsZSB0KSB7IG1f
bGFzdFRvdWNoVGltZSA9IHQ7IH07CisgICAgZG91YmxlIGxhc3RUb3VjaFRpbWUoKSB7IHJldHVy
biBtX2xhc3RUb3VjaFRpbWU7IH07CisKKyAgICBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpHZXN0
dXJlVHJhbnNpdGlvbkZ1bmN0aW9uIGVkZ2VGdW5jdGlvbihpbnQgaGFzaCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2VkZ2VGdW5jdGlvbnMuZ2V0KGhhc2gpOworICAgIH07CisKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVmFsdWVzKGRvdWJsZSBkLCBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQg
JnApCisgICAgeworICAgICAgICBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGVWYWx1ZXMo
ZCwgcCk7CisgICAgfTsKKworICAgIHZvaWQgYWRkRWRnZUZ1bmN0aW9uKFN0YXRlIHN0YXRlLCB1
bnNpZ25lZCBmaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgdG91Y2hTdGF0ZSwgYm9v
bCB0b3VjaEhhbmRsZWRCeUphdmFTY3JpcHQsIEdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24gZnVu
Y3Rpb24pCisgICAgeworICAgICAgICBJbm5lckdlc3R1cmVSZWNvZ25pemVyOjphZGRFZGdlRnVu
Y3Rpb24oc3RhdGUsIGZpbmdlciwgdG91Y2hTdGF0ZSwgdG91Y2hIYW5kbGVkQnlKYXZhU2NyaXB0
LCBmdW5jdGlvbik7CisgICAgfTsKK307CisKK2NsYXNzIEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQ
b2ludCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoUG9pbnQgeworcHVibGljOgorICAg
IEJ1aWxkYWJsZVBsYXRmb3JtVG91Y2hQb2ludCgpOworICAgIEJ1aWxkYWJsZVBsYXRmb3JtVG91
Y2hQb2ludChpbnQgeCwgaW50IHkpOworCisgICAgdm9pZCBzZXRYKGludCB4KQorICAgIHsKKyAg
ICAgICAgbV9wb3Muc2V0WCh4KTsKKyAgICAgICAgbV9zY3JlZW5Qb3Muc2V0WCh4KTsKKyAgICB9
OworCisgICAgdm9pZCBzZXRZKGludCB5KQorICAgIHsKKyAgICAgICAgbV9wb3Muc2V0WSh5KTsK
KyAgICAgICAgbV9zY3JlZW5Qb3Muc2V0WSh5KTsKKyAgICB9OworfTsKKworQnVpbGRhYmxlUGxh
dGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQoKQoreworICAgIG1f
aWQgPSAwOworICAgIG1fc3RhdGUgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFy
eTsKKyAgICBtX3BvcyA9IEludFBvaW50Ojp6ZXJvKCk7CisgICAgbV9zY3JlZW5Qb3MgPSBJbnRQ
b2ludDo6emVybygpOworfTsKKworQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50OjpCdWlsZGFi
bGVQbGF0Zm9ybVRvdWNoUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIG1faWQgPSAwOworICAg
IG1fc3RhdGUgPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGlvbmFyeTsKKyAgICBtX3Bv
cyA9IEludFBvaW50KHgsIHkpOworICAgIG1fc2NyZWVuUG9zID0gSW50UG9pbnQoeCwgeSk7Cit9
OworCisKK2NsYXNzIFRlc3RHZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICBUZXN0R2VzdHVyZVJlY29nbml6ZXIoKSB7IH0KKworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93
bigpIHsgfQorfTsKKworVEVTVF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgaGFzaCkKK3sKKyAg
ICBJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJlY29nbml6ZXIgdGVzdEdtOworICAgIGNvbnN0IHVu
c2lnbmVkIEZpcnN0RmluZ2VyID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBTZWNvbmRGaW5nZXIg
PSAxOworCisgICAgQVNTRVJUX0VRKDEgKyAwLCB0ZXN0R20uc2lnbmF0dXJlKElubmVyR2VzdHVy
ZVJlY29nbml6ZXI6Ok5vR2VzdHVyZSwgRmlyc3RGaW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hSZWxlYXNlZCwgZmFsc2UpKTsKKworICAgIEFTU0VSVF9FUSgxICsgKCg4IHwgMSkgPDwg
MSksIHRlc3RHbS5zaWduYXR1cmUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJlLCBG
aXJzdEZpbmdlciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQsIHRydWUpKTsKKwor
ICAgIEFTU0VSVF9FUSgxICsgKCgweDEwMDAwIHwgMikgPDwgMSksIHRlc3RHbS5zaWduYXR1cmUo
SW5uZXJHZXN0dXJlUmVjb2duaXplcjo6UGVuZGluZ1N5bnRoZXRpY0NsaWNrLCBGaXJzdEZpbmdl
ciwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkLCBmYWxzZSkpOworCisgICAgQVNTRVJU
X0VRKDEgKyAoMHgyMDAwMCA8PCAxKSwgdGVzdEdtLnNpZ25hdHVyZShJbm5lckdlc3R1cmVSZWNv
Z25pemVyOjpTY3JvbGwsIEZpcnN0RmluZ2VyLCBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVs
ZWFzZWQsIGZhbHNlKSk7CisKKyAgICBBU1NFUlRfRVEoMSArICgoMHgyMDAwMCB8IDEpIDw8IDEp
LCB0ZXN0R20uc2lnbmF0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlNjcm9sbCwgRmlyc3RG
aW5nZXIsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCBmYWxzZSkpOworCisgICAg
QVNTRVJUX0VRKDEgKyAoKDB4MjAwMDAgfCAweDEwIHwgOCB8IDEpIDw8IDEpLCB0ZXN0R20uc2ln
bmF0dXJlKElubmVyR2VzdHVyZVJlY29nbml6ZXI6OlNjcm9sbCwgU2Vjb25kRmluZ2VyLCBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCwgdHJ1ZSkpOworfQorCitURVNUX0YoVGVzdEdl
c3R1cmVSZWNvZ25pemVyLCBzdGF0ZSkKK3sKKyAgICBJbnNwZWN0YWJsZUlubmVyR2VzdHVyZVJl
Y29nbml6ZXIgdGVzdEdtOworCisgICAgQVNTRVJUX0VRKDAsIHRlc3RHbS5zdGF0ZSgpKTsKKyAg
ICB0ZXN0R20uc2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6UGVuZGluZ1N5bnRoZXRp
Y0NsaWNrKTsKKyAgICBBU1NFUlRfRVEoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6UGVuZGluZ1N5
bnRoZXRpY0NsaWNrLCB0ZXN0R20uc3RhdGUoKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJl
Y29nbml6ZXIsIGlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKQoreworICAgIEluc3BlY3RhYmxlSW5u
ZXJHZXN0dXJlUmVjb2duaXplciBnbTsKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQg
cDsKKworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmZpcnN0VG91Y2hQb3NpdGlvbigpLngoKSk7Cisg
ICAgQVNTRVJUX0VRKDAuMCwgZ20uZmlyc3RUb3VjaFBvc2l0aW9uKCkueSgpKTsKKworICAgIHAu
c2V0WCgwLjApOworICAgIHAuc2V0WSgxOS45OTkpOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5z
aWRlTWFuaGF0dGFuU3F1YXJlKHApKTsKKworICAgIHAuc2V0WCgxOS45OTkpOworICAgIHAuc2V0
WSgwLjApOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5zaWRlTWFuaGF0dGFuU3F1YXJlKHApKTsK
KworICAgIHAuc2V0WCgyMC4wKTsKKyAgICBwLnNldFkoMC4wKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z20uaXNJbnNpZGVNYW5oYXR0YW5TcXVhcmUocCkpOworCisgICAgcC5zZXRYKDAuMCk7CisgICAg
cC5zZXRZKDIwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFy
ZShwKSk7CisKKyAgICBwLnNldFgoLTIwLjApOworICAgIHAuc2V0WSgwLjApOworICAgIEFTU0VS
VF9GQUxTRShnbS5pc0luc2lkZU1hbmhhdHRhblNxdWFyZShwKSk7CisKKyAgICBwLnNldFgoMC4w
KTsKKyAgICBwLnNldFkoLTIwLjApOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luc2lkZU1hbmhh
dHRhblNxdWFyZShwKSk7Cit9CisKK1RFU1RfRihUZXN0R2VzdHVyZVJlY29nbml6ZXIsIGlzSW5D
bGlja1RpbWVXaW5kb3cpCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVy
IGdtOworCisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0VG91
Y2hUaW1lKDAuMCk7CisgICAgQVNTRVJUX0ZBTFNFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7
CisKKyAgICBnbS5zZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRp
bWUoMC4wMTAwMDEpOworICAgIEFTU0VSVF9UUlVFKGdtLmlzSW5DbGlja1RpbWVXaW5kb3coKSk7
CisKKyAgICBnbS5zZXRGaXJzdFRvdWNoVGltZSgwLjApOworICAgIGdtLnNldExhc3RUb3VjaFRp
bWUoMC44IC0gLjAwMDAwMDAxKTsKKyAgICBBU1NFUlRfVFJVRShnbS5pc0luQ2xpY2tUaW1lV2lu
ZG93KCkpOworCisgICAgZ20uc2V0Rmlyc3RUb3VjaFRpbWUoMC4wKTsKKyAgICBnbS5zZXRMYXN0
VG91Y2hUaW1lKDAuODAwMDEpOworICAgIEFTU0VSVF9GQUxTRShnbS5pc0luQ2xpY2tUaW1lV2lu
ZG93KCkpOworfQorCitURVNUX0YoVGVzdEdlc3R1cmVSZWNvZ25pemVyLCBhZGRFZGdlRnVuY3Rp
b24pCit7CisgICAgSW5zcGVjdGFibGVJbm5lckdlc3R1cmVSZWNvZ25pemVyIGdtOworICAgIGdt
LmFkZEVkZ2VGdW5jdGlvbihJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpTY3JvbGwsIDAsIFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgdHJ1ZSwgKElubmVyR2VzdHVyZVJlY29nbml6
ZXI6Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pNDA5Nik7CisKKyAgICBBU1NFUlRfRVEoKElu
bmVyR2VzdHVyZVJlY29nbml6ZXI6Okdlc3R1cmVUcmFuc2l0aW9uRnVuY3Rpb24pNDA5NiwgZ20u
ZWRnZUZ1bmN0aW9uKGdtLnNpZ25hdHVyZShJbm5lckdlc3R1cmVSZWNvZ25pemVyOjpTY3JvbGws
IDAsIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCwgdHJ1ZSkpKTsKK30KKworVEVT
VF9GKFRlc3RHZXN0dXJlUmVjb2duaXplciwgdXBkYXRlVmFsdWVzKQoreworICAgIEluc3BlY3Rh
YmxlSW5uZXJHZXN0dXJlUmVjb2duaXplciBnbTsKKworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmZp
cnN0VG91Y2hUaW1lKCkpOworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmxhc3RUb3VjaFRpbWUoKSk7
CisgICAgQVNTRVJUX0VRKElubmVyR2VzdHVyZVJlY29nbml6ZXI6Ok5vR2VzdHVyZSwgZ20uc3Rh
dGUoKSk7CisKKyAgICBCdWlsZGFibGVQbGF0Zm9ybVRvdWNoUG9pbnQgcDEoMTAsIDExKTsKKyAg
ICBnbS51cGRhdGVWYWx1ZXMoMS4xLCBwMSk7CisKKyAgICBBU1NFUlRfRVEoMTAsIGdtLmZpcnN0
VG91Y2hQb3NpdGlvbigpLngoKSk7CisgICAgQVNTRVJUX0VRKDExLCBnbS5maXJzdFRvdWNoUG9z
aXRpb24oKS55KCkpOworICAgIEFTU0VSVF9FUSgxLjEsIGdtLmZpcnN0VG91Y2hUaW1lKCkpOwor
ICAgIEFTU0VSVF9FUSgwLjAsIGdtLmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZpcnN0VG91Y2hUaW1l
KCkpOworCisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHAyKDEzLCAxNCk7CisgICAg
Z20uc2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6UGVuZGluZ1N5bnRoZXRpY0NsaWNr
KTsKKyAgICBnbS51cGRhdGVWYWx1ZXMoMi4wLCBwMik7CisKKyAgICBBU1NFUlRfRVEoMTAsIGdt
LmZpcnN0VG91Y2hQb3NpdGlvbigpLngoKSk7CisgICAgQVNTRVJUX0VRKDExLCBnbS5maXJzdFRv
dWNoUG9zaXRpb24oKS55KCkpOworICAgIEFTU0VSVF9FUSgxLjEsIGdtLmZpcnN0VG91Y2hUaW1l
KCkpOworICAgIEFTU0VSVF9FUSgyLjAgLSAxLjEsIGdtLmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZp
cnN0VG91Y2hUaW1lKCkpOworCisgICAgQnVpbGRhYmxlUGxhdGZvcm1Ub3VjaFBvaW50IHAzKDIz
LCAzNCk7CisgICAgZ20uc2V0U3RhdGUoSW5uZXJHZXN0dXJlUmVjb2duaXplcjo6Tm9HZXN0dXJl
KTsKKyAgICBnbS51cGRhdGVWYWx1ZXMoMy4wLCBwMyk7CisKKyAgICBBU1NFUlRfRVEoMjMsIGdt
LmZpcnN0VG91Y2hQb3NpdGlvbigpLngoKSk7CisgICAgQVNTRVJUX0VRKDM0LCBnbS5maXJzdFRv
dWNoUG9zaXRpb24oKS55KCkpOworICAgIEFTU0VSVF9FUSgzLjAsIGdtLmZpcnN0VG91Y2hUaW1l
KCkpOworICAgIEFTU0VSVF9FUSgwLjAsIGdtLmxhc3RUb3VjaFRpbWUoKSAtIGdtLmZpcnN0VG91
Y2hUaW1lKCkpOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>