<?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>75874</bug_id>
          
          <creation_ts>2012-01-09 11:23:42 -0800</creation_ts>
          <short_desc>[chromium] Plumb from GraphicsLayer to the cc thread animation code</short_desc>
          <delta_ts>2012-02-22 18:23:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>76468</blocked>
    
    <blocked>77229</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>anewpage.media</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>klobag</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>532355</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-09 11:23:42 -0800</bug_when>
    <thetext>Lets get GraphicsLayer::add/pause/cancel animation hooked up to CC.

We&apos;ll use this as a meta-bug to track progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536810</commentid>
    <comment_count>1</comment_count>
      <attachid>122694</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-16 17:02:15 -0800</bug_when>
    <thetext>Created attachment 122694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536814</commentid>
    <comment_count>2</comment_count>
      <attachid>122696</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-16 17:08:45 -0800</bug_when>
    <thetext>Created attachment 122696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538905</commentid>
    <comment_count>3</comment_count>
      <attachid>122696</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-19 12:08:43 -0800</bug_when>
    <thetext>Comment on attachment 122696
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:214
&gt; +    CCLayerAnimationController* animationController() const { return m_animationController.get(); }

On this side, can we avoid exposing the controller? I&apos;d like either to expose methods for manipulating animations, or the controller, but not both.

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:52
&gt; +PassRefPtr&lt;CCLayerImpl&gt; TreeSynchronizer::synchronizeTreeRecursive(LayerChromium* layer, double currentTimeMs, CCLayerImplMap&amp; map, bool&amp; activatedAnimation)

erm, help me understand this. I wasn&apos;t expecting to see either.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:325
&gt; +        hostImpl-&gt;setRootLayer(newRootLayer.release());

Lets do this separately. SynchronizeTrees should push trees. Nothign else.

Activation should be done entirely impl-thread side. I dont think you need anything specific to activation because every commit leads to a animate and draw. So in animate, you should just always call animate on all the layer controllers. Maybe you can have that path compute whether the there are any animations still pending and use that to drive another frame.

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:96
&gt; +class FakeFloatAnimation : public CCFloatAnimationCurve {

FakeFloatAnimationCurve.

iirw, you have a fake float animaiton in another test file too.

Two options:
1. decide you&apos;ll have a common class that gets used in a few places for animation tests and make Then, make a CCAnimatonTestsCommon.h and use it.

Or, decide the test case here is specific, and name this something that is specific to this test...

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:334
&gt; +TEST(TreeSynchronizerTest, syncAnimations)

These feel like different TESTs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541950</commentid>
    <comment_count>4</comment_count>
      <attachid>123871</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-24 18:43:44 -0800</bug_when>
    <thetext>Created attachment 123871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541952</commentid>
    <comment_count>5</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-01-24 18:46:46 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 122696 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122696&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:214
&gt; &gt; +    CCLayerAnimationController* animationController() const { return m_animationController.get(); }
&gt; 
&gt; On this side, can we avoid exposing the controller? I&apos;d like either to expose methods for manipulating animations, or the controller, but not both.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:52
&gt; &gt; +PassRefPtr&lt;CCLayerImpl&gt; TreeSynchronizer::synchronizeTreeRecursive(LayerChromium* layer, double currentTimeMs, CCLayerImplMap&amp; map, bool&amp; activatedAnimation)
&gt; 
&gt; erm, help me understand this. I wasn&apos;t expecting to see either.
Both are now gone.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:325
&gt; &gt; +        hostImpl-&gt;setRootLayer(newRootLayer.release());
&gt; 
&gt; Lets do this separately. SynchronizeTrees should push trees. Nothign else.
&gt; 
&gt; Activation should be done entirely impl-thread side. I dont think you need anything specific to activation because every commit leads to a animate and draw. So in animate, you should just always call animate on all the layer controllers. Maybe you can have that path compute whether the there are any animations still pending and use that to drive another frame.
Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:96
&gt; &gt; +class FakeFloatAnimation : public CCFloatAnimationCurve {
&gt; 
&gt; FakeFloatAnimationCurve.
Done.
&gt; 
&gt; iirw, you have a fake float animaiton in another test file too.
&gt; 
&gt; Two options:
&gt; 1. decide you&apos;ll have a common class that gets used in a few places for animation tests and make Then, make a CCAnimatonTestsCommon.h and use it.
&gt; 
&gt; Or, decide the test case here is specific, and name this something that is specific to this test...
&gt; 

Done. (Added CCAnimationTestCommon.h)

&gt; &gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:334
&gt; &gt; +TEST(TreeSynchronizerTest, syncAnimations)
&gt; 
&gt; These feel like different TESTs

Done. They are now separate TESTs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543872</commentid>
    <comment_count>6</comment_count>
      <attachid>123871</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-27 01:02:23 -0800</bug_when>
    <thetext>Comment on attachment 123871
Patch

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

Do we have naming confusion around hasActiveAnimation and&quot;I need my animate to be called?&quot; I&apos;d rather we be explciit about this and say what we mean: needsAnimate or something.

So, the one thing that still is funky here is the activeAnimation --- and as you noted in our chat earlier, we still need to do the finished plumbing. I&apos;m fine doing that as a followup tbh.

Lets talk about the active stuff tomrrow, actually. I think maybe we want a tristate &quot;yes,no,not_sure&quot;?

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:95
&gt; +    virtual bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; /*boxSize*/, const Animation*, const String&amp; /*animationName*/, double /*timeOffset*/);

why /* */ here?
Typically, you&apos;ll just use the full name on the ones that are nonobvious, which is all of them.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:250
&gt; +    CCLayerAnimationController* animationController() const { return m_animationController.get(); }

Maybe I&apos;m being pedantic, but I prefer const-preserving getters. E.g. on the const accessor, return const X*, or make the method non const.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:100
&gt; +    OwnPtr&lt;CCActiveAnimation&gt; toReturn(adoptPtr(new CCActiveAnimation(m_animationCurve.release(), m_group, m_targetProperty)));

Hmmm, I think its bad that the clone function is mutating the this pointer as part of clone. It should really have a const signature.

Pass the animation curve in? E.g. clone(CurveForImplThread*)?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:113
&gt; +    other-&gt;m_startTime = m_startTime;

Any way to get common code between this and the prev function? Easy to miss a field if we add one...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:38
&gt; +    // FIXME: implement.

Delete this. Pretty obvious we need to implement it. :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:63
&gt; +// are kept in sync. This function does not take ownership of the impl thread controller.

2 or 3 sentence summary of how this syncing operation works.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:64
&gt; +bool CCLayerAnimationController::pushAnimationsTo(CCLayerAnimationControllerImpl* controller)

controller-&gt; controllerImpl so we can tell directionality of command.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:68
&gt; +    size_t i = 0;

any reason you&apos;re declaring i up here rather than in the for body? I&apos;d rather you declare it in the body...

since this has phases, does it make sense to break up into sub functions like you did on the impl?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:71
&gt; +

Why are we clearing this here? I woudl have expected that we clear this earlier on in the frame lifetime...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:81
&gt; +    // Each iteration, controller-&gt;m_activeAnimations.size() is decremented or i is incremented

Comment explaining what this loop does. It took me a fair amount of time to realize this removes animations on the impl side.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82
&gt; +    // guaranteeing progress towards loop termination.

Is there a way to write this so its not so bizarre of a loop? Its cool if not, but this is fragile.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:93
&gt; +    return addedAnimation;

Why are we still returning addedAnimation? It looks like we ignore the return value...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:52
&gt; +    bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; /*boxSize*/, const Animation*, const String&amp; /*animationName*/, double /*timeOffset*/);

/* */ -&gt; actual names where non redundant, which is all.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:53
&gt; +    void pauseAnimation(const String&amp; /*animationName*/, double /*timeOffset*/);

timeOffset --- use whatever convention we established before for time. Maybe its timeOffset? /me forgets

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:-181
&gt; -        if (allAnimsWithSameIdAreFinished)

It seems to me that the animate function could pass in a data structure called AnimationResults which coudl itself have a vector of finished animations, as well as whehter you have to tick next frame. Then pass it down to this function as well, and push finished things onto the reults. You&apos;d have one AnimationResults object that&apos;d be stack allocated up in the CCLayerTreeHostImpl, etc etc etc

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:70
&gt; +    typedef std::pair&lt;CCActiveAnimation::GroupID, CCActiveAnimation::TargetProperty&gt; AnimationSignature;

Struct? Hard to remember what first and second are...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:111
&gt; +    // CCLayerAnimationControllerImplClient implementation.

Rearrange so that the implementation is up at the top of the class. The template for our classes is usually

class Foo : public X {
   static Foo create();
   // X implementation

   // Foo stuff
}

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:205
&gt; +    CCLayerAnimationControllerImpl* animationController() const { return m_animationController.get(); }

Const preserving ... either drop the const or make two functions one that preserves constness and one that doesnt.

E.g. 
const Foo* foo()  const;
Foo* foo();

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:315
&gt; +    // Manages animations targeting this layer.

targeting --&gt; for

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:158
&gt; +        hostImpl-&gt;setMayHaveActiveAnimationController(true);

See comment below.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:323
&gt; +        hostImpl-&gt;setMayHaveActiveAnimationController(true);

setActiveAnimationsChanged()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:60
&gt; +    , m_mayHaveActiveAnimationController(true)

Lets talk about the CCLayer::hasActiveAnimation trick I proposed and see if we can do that.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:252
&gt; +    TRACE_EVENT(&quot;CCLayerTreeHostImpl::animateLayers&quot;, this, 0);

So we stop ticking when we go to a background tab, but CSS requires that we deliver end events when that happens. page/AnimationController has a lot of complexity around &quot;nextServiceTime&quot; to handle this. How can we get this correct but not do something so complex? How about we have a CCTimer on the Impl class that we active/deactive when the impl tree goes invisible/visible. That timer can fire at a low rate --- every quarter second or something. WDYT?

(This implies that we need to send the animation finished events separate from the beginFrameAndCommit message, because frames dont begin when you&apos;re backgrounded)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:258
&gt; +    while (toProcess.size()) {

Any reason for this vs recursion?

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:405
&gt; +}

I&apos;m a little brain fried but do we have tests for the cclthi actually animating when we add layerimpls in ways that might defeat our hasActiveAnimation stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547187</commentid>
    <comment_count>7</comment_count>
      <attachid>124966</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-01 10:33:16 -0800</bug_when>
    <thetext>Created attachment 124966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547205</commentid>
    <comment_count>8</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-01 10:54:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 123871 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123871&amp;action=review
&gt; 
&gt; Do we have naming confusion around hasActiveAnimation and&quot;I need my animate to be called?&quot; I&apos;d rather we be explciit about this and say what we mean: needsAnimate or something.
&gt; 
&gt; So, the one thing that still is funky here is the activeAnimation --- and as you noted in our chat earlier, we still need to do the finished plumbing. I&apos;m fine doing that as a followup tbh.
&gt; 
&gt; Lets talk about the active stuff tomrrow, actually. I think maybe we want a tristate &quot;yes,no,not_sure&quot;?

CCLayerTreeHostImpl now has a boolean m_needsAnimateLayers field. Please let me know if you&apos;d like any name changes.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:95
&gt; &gt; +    virtual bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; /*boxSize*/, const Animation*, const String&amp; /*animationName*/, double /*timeOffset*/);
&gt; 
&gt; why /* */ here?
&gt; Typically, you&apos;ll just use the full name on the ones that are nonobvious, which is all of them.
Fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:250
&gt; &gt; +    CCLayerAnimationController* animationController() const { return m_animationController.get(); }
&gt; 
&gt; Maybe I&apos;m being pedantic, but I prefer const-preserving getters. E.g. on the const accessor, return const X*, or make the method non const.
Was following the lead of layerTreeHost() :)  I&apos;ve made the function non-const, since it effectively is.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:100
&gt; &gt; +    OwnPtr&lt;CCActiveAnimation&gt; toReturn(adoptPtr(new CCActiveAnimation(m_animationCurve.release(), m_group, m_targetProperty)));
&gt; 
&gt; Hmmm, I think its bad that the clone function is mutating the this pointer as part of clone. It should really have a const signature.

Fixed. The curves can now be cloned.

&gt; 
&gt; Pass the animation curve in? E.g. clone(CurveForImplThread*)?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:113
&gt; &gt; +    other-&gt;m_startTime = m_startTime;
&gt; 
&gt; Any way to get common code between this and the prev function? Easy to miss a field if we add one...

Turns out that the functions are quite different.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:38
&gt; &gt; +    // FIXME: implement.
&gt; 
&gt; Delete this. Pretty obvious we need to implement it. :)

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:63
&gt; &gt; +// are kept in sync. This function does not take ownership of the impl thread controller.
&gt; 
&gt; 2 or 3 sentence summary of how this syncing operation works.
I&apos;ve refactored the function into 4 helper functions with self documenting names. Please let me know if anything needs to be clarified.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:64
&gt; &gt; +bool CCLayerAnimationController::pushAnimationsTo(CCLayerAnimationControllerImpl* controller)
&gt; 
&gt; controller-&gt; controllerImpl so we can tell directionality of command.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:68
&gt; &gt; +    size_t i = 0;
&gt; 
&gt; any reason you&apos;re declaring i up here rather than in the for body? I&apos;d rather you declare it in the body...
&gt; 
&gt; since this has phases, does it make sense to break up into sub functions like you did on the impl?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:71
&gt; &gt; +
&gt; 
&gt; Why are we clearing this here? I woudl have expected that we clear this earlier on in the frame lifetime...

We need to hang onto the collection of finished animations until the next commit. Once we&apos;ve sync&apos;d the controllers, we&apos;re done with this list and it can be cleared.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:81
&gt; &gt; +    // Each iteration, controller-&gt;m_activeAnimations.size() is decremented or i is incremented
&gt; 
&gt; Comment explaining what this loop does. It took me a fair amount of time to realize this removes animations on the impl side.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82
&gt; &gt; +    // guaranteeing progress towards loop termination.
&gt; 
&gt; Is there a way to write this so its not so bizarre of a loop? Its cool if not, but this is fragile.
The loop has been simplified slightly, but it&apos;s effectively the same. This seemed like a simple way of iterating through a collection, conditionally deleting elements, that does not require a copy of the collection. If you know of a preferred way to do this, I would be happy to change the code.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:93
&gt; &gt; +    return addedAnimation;
&gt; 
&gt; Why are we still returning addedAnimation? It looks like we ignore the return value...
Fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:52
&gt; &gt; +    bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; /*boxSize*/, const Animation*, const String&amp; /*animationName*/, double /*timeOffset*/);
&gt; 
&gt; /* */ -&gt; actual names where non redundant, which is all.
Fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:53
&gt; &gt; +    void pauseAnimation(const String&amp; /*animationName*/, double /*timeOffset*/);
&gt; 
&gt; timeOffset --- use whatever convention we established before for time. Maybe its timeOffset? /me forgets
This is the variable name from the signatures in GraphicsLayer. For consistency, I was hoping to retain this name until we translate it for use by the cc animation code.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:-181
&gt; &gt; -        if (allAnimsWithSameIdAreFinished)
&gt; 
&gt; It seems to me that the animate function could pass in a data structure called AnimationResults which coudl itself have a vector of finished animations, as well as whehter you have to tick next frame. Then pass it down to this function as well, and push finished things onto the reults. You&apos;d have one AnimationResults object that&apos;d be stack allocated up in the CCLayerTreeHostImpl, etc etc etc
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:70
&gt; &gt; +    typedef std::pair&lt;CCActiveAnimation::GroupID, CCActiveAnimation::TargetProperty&gt; AnimationSignature;
&gt; 
&gt; Struct? Hard to remember what first and second are...
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:111
&gt; &gt; +    // CCLayerAnimationControllerImplClient implementation.
&gt; 
&gt; Rearrange so that the implementation is up at the top of the class. The template for our classes is usually
&gt; 
&gt; class Foo : public X {
&gt;    static Foo create();
&gt;    // X implementation
&gt; 
&gt;    // Foo stuff
&gt; }
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:205
&gt; &gt; +    CCLayerAnimationControllerImpl* animationController() const { return m_animationController.get(); }
&gt; 
&gt; Const preserving ... either drop the const or make two functions one that preserves constness and one that doesnt.
&gt; 
&gt; E.g. 
&gt; const Foo* foo()  const;
&gt; Foo* foo();
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:315
&gt; &gt; +    // Manages animations targeting this layer.
&gt; 
&gt; targeting --&gt; for
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:158
&gt; &gt; +        hostImpl-&gt;setMayHaveActiveAnimationController(true);
&gt; 
&gt; See comment below.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:323
&gt; &gt; +        hostImpl-&gt;setMayHaveActiveAnimationController(true);
&gt; 
&gt; setActiveAnimationsChanged()
Renamed according to your topmost comments.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:60
&gt; &gt; +    , m_mayHaveActiveAnimationController(true)
&gt; 
&gt; Lets talk about the CCLayer::hasActiveAnimation trick I proposed and see if we can do that.
This has been updated per our last conversations.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:252
&gt; &gt; +    TRACE_EVENT(&quot;CCLayerTreeHostImpl::animateLayers&quot;, this, 0);
&gt; 
&gt; So we stop ticking when we go to a background tab, but CSS requires that we deliver end events when that happens. page/AnimationController has a lot of complexity around &quot;nextServiceTime&quot; to handle this. How can we get this correct but not do something so complex? How about we have a CCTimer on the Impl class that we active/deactive when the impl tree goes invisible/visible. That timer can fire at a low rate --- every quarter second or something. WDYT?
That sounds great. I would like to add the background ticking behaviour in another patch. SG?
&gt; 
&gt; (This implies that we need to send the animation finished events separate from the beginFrameAndCommit message, because frames dont begin when you&apos;re backgrounded)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:258
&gt; &gt; +    while (toProcess.size()) {
&gt; 
&gt; Any reason for this vs recursion?
I was worried about really deep trees. Switched it to recursion.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:405
&gt; &gt; +}
&gt; 
&gt; I&apos;m a little brain fried but do we have tests for the cclthi actually animating when we add layerimpls in ways that might defeat our hasActiveAnimation stuff?

We have tests for synchronizing the animation controllers, but no tests for the &apos;needsAnimateLayers&apos; code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548112</commentid>
    <comment_count>9</comment_count>
      <attachid>124966</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-02 13:13:21 -0800</bug_when>
    <thetext>Comment on attachment 124966
Patch

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

Getting close.

We need a test in CCLayerTreeHostTest that tests that adding an animation runs the animateLayers callback.
We also need a test that verifies calling animate () on a layertreehostimpl that has a still-running animation gets its animate() called again.

&gt; Source/WebKit/chromium/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=77229

did your changelog get messed up? This looks like the wrong bug&apos;s changelog.

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:397
&gt; +void GraphicsLayerChromium::platformChromiumLayerAnimationStarted(double startTime)

I&apos;d just call this layerAnimationsStarted

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:101
&gt; +    void platformChromiumLayerAnimationStarted(double startTime);

Isn&apos;t this implementing an interface?

// CCLayerAnimationDelegate implemetaiton
void blahblah()

I&apos;d create the delegate class even if we don&apos;t have it plumbed up yet.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:122
&gt; +void CCActiveAnimation::pushPropertiesTo(CCActiveAnimation* other) const

inline to the cloneForImplThread

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:82
&gt; +    struct AnimationResult {

make nonnested

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:92
&gt; +    struct AnimationResults {

make nonnested?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:138
&gt; +    // Does not take ownership of the given active animation.

Not sure this adds value. When you give a pointer for exchange of ownership, you&apos;re supposed to use PassOwnPtr, so the mere fact that you&apos;re not using passown explains that.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:122
&gt; +        }

you need to m_client-&gt;setNeedsRedrawOnImplThread() here or you&apos;ll not get another frame...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:56
&gt; +    virtual void pushAnimationResults(const CCActiveAnimation::AnimationResults&amp;) = 0;

pushAnimationResultToMainThreadOnImplThread

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:235
&gt; +    CCActiveAnimation::AnimationResults copy = results;

This needs to be asynchornous. How about making this a PassOwnPtr all the way down?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:542
&gt; +{

assert main thread

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:71
&gt; +    virtual void pushAnimationResults(const CCActiveAnimation::AnimationResults&amp;);

We use OnImplThread suffix to denote that a method is only safe on the impl thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548714</commentid>
    <comment_count>10</comment_count>
      <attachid>125328</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-03 07:57:07 -0800</bug_when>
    <thetext>Created attachment 125328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549033</commentid>
    <comment_count>11</comment_count>
      <attachid>125404</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-03 13:47:12 -0800</bug_when>
    <thetext>Created attachment 125404
Patch

Work in progress. Tests do not pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549148</commentid>
    <comment_count>12</comment_count>
      <attachid>125431</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-03 15:12:54 -0800</bug_when>
    <thetext>Created attachment 125431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549155</commentid>
    <comment_count>13</comment_count>
      <attachid>125432</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-03 15:21:05 -0800</bug_when>
    <thetext>Created attachment 125432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549160</commentid>
    <comment_count>14</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-03 15:31:57 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 124966 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124966&amp;action=review
&gt; 
&gt; Getting close.
&gt; 
&gt; We need a test in CCLayerTreeHostTest that tests that adding an animation runs the animateLayers callback.
&gt; We also need a test that verifies calling animate () on a layertreehostimpl that has a still-running animation gets its animate() called again.
Done. 
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:4
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=77229
&gt; 
&gt; did your changelog get messed up? This looks like the wrong bug&apos;s changelog.
Yup :) Should be fixed now.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:397
&gt; &gt; +void GraphicsLayerChromium::platformChromiumLayerAnimationStarted(double startTime)
&gt; 
&gt; I&apos;d just call this layerAnimationsStarted
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h:101
&gt; &gt; +    void platformChromiumLayerAnimationStarted(double startTime);
&gt; 
&gt; Isn&apos;t this implementing an interface?
This is coming in https://bugs.webkit.org/show_bug.cgi?id=77646. Would you be ok with putting this off until then?
&gt; 
&gt; // CCLayerAnimationDelegate implemetaiton
&gt; void blahblah()
&gt; 
&gt; I&apos;d create the delegate class even if we don&apos;t have it plumbed up yet.
&gt; 
Same comment as above.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:122
&gt; &gt; +void CCActiveAnimation::pushPropertiesTo(CCActiveAnimation* other) const
&gt; 
&gt; inline to the cloneForImplThread
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:82
&gt; &gt; +    struct AnimationResult {
&gt; 
&gt; make nonnested
&gt; 
Done. Added CCAnimationResults.h
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:92
&gt; &gt; +    struct AnimationResults {
&gt; 
&gt; make nonnested?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:138
&gt; &gt; +    // Does not take ownership of the given active animation.
&gt; 
&gt; Not sure this adds value. When you give a pointer for exchange of ownership, you&apos;re supposed to use PassOwnPtr, so the mere fact that you&apos;re not using passown explains that.
&gt; 
Removed comment.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:122
&gt; &gt; +        }
&gt; 
&gt; you need to m_client-&gt;setNeedsRedrawOnImplThread() here or you&apos;ll not get another frame...
&gt; 
I&apos;m so sorry, Nat! I totally missed when I went through your review! This was the crucial change required to get my test to pass.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:56
&gt; &gt; +    virtual void pushAnimationResults(const CCActiveAnimation::AnimationResults&amp;) = 0;
&gt; 
&gt; pushAnimationResultToMainThreadOnImplThread
Changed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:235
&gt; &gt; +    CCActiveAnimation::AnimationResults copy = results;
&gt; 
&gt; This needs to be asynchornous. How about making this a PassOwnPtr all the way down?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:542
&gt; &gt; +{
&gt; 
&gt; assert main thread
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:71
&gt; &gt; +    virtual void pushAnimationResults(const CCActiveAnimation::AnimationResults&amp;);
&gt; 
&gt; We use OnImplThread suffix to denote that a method is only safe on the impl thread
Cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553721</commentid>
    <comment_count>15</comment_count>
      <attachid>125432</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-09 18:57:38 -0800</bug_when>
    <thetext>Comment on attachment 125432
Patch

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

This is awesome. Unofficial LGTM with a few nits that you can sort out with @levin and @jamesr.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:52
&gt; +    Vector&lt;CCAnimationResult&gt;&amp; startedAnimations() { return m_startedAnimations; }

should this be immutable?

const Vector&lt;T&gt;&amp; started() const  { ...; }

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:51
&gt; +void CCLayerAnimationControllerImpl::animate(double frameBeginTimeSecs, CCAnimationResults* results)

Check with jamesr about how we handle out-params in webkit, whether we do pass-by-reference or pointer, and whether the out values come before the in-values or after.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:244
&gt; +    // FIXME: implement this. Will have to walk the tree.

Might just reference the webkit bug number where you have the patch for this, since its already done.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:260
&gt; +    if (currentController-&gt;hasActiveAnimation()) {

is this backwards? Shouldn&apos;t it be 
currentcontroller-&gt;animate()
if hasActiveanimation()
  needsAnim = true

As implemented, this tells us whether we were active before we animated, which isn&apos;t necessarily right, right?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:578
&gt; +        m_client-&gt;pushAnimationResultToMainThreadOnImplThread(results.release());

pushAnimationResults? Since the class being pushed is AnimationResults

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:214
&gt; +    m_layerTreeHost-&gt;setAnimationResults(results);

I think you need an assert that we&apos;re on the impl thread and then a DebugScopedSetMainThread here so that it switches threads.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:235
&gt; +    m_mainThreadProxy-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::pushAnimationResults, AllowCrossThreadAccess(results.leakPtr())));

I think if you make CCThreadProy::pushAnimationresults(PassOwnPtr&lt;CCAnimationResults&gt; results), then you can pass directly instead of having to leak and adopt. Ping David Levin on gchat if you need some help doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554076</commentid>
    <comment_count>16</comment_count>
      <attachid>126515</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-10 07:58:00 -0800</bug_when>
    <thetext>Created attachment 126515
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554265</commentid>
    <comment_count>17</comment_count>
      <attachid>126545</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-10 11:59:11 -0800</bug_when>
    <thetext>Created attachment 126545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558850</commentid>
    <comment_count>18</comment_count>
      <attachid>126545</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-02-16 20:19:51 -0800</bug_when>
    <thetext>Comment on attachment 126545
Patch

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

LGTM with additional nits.

@jamesr, can you do a final review? Of course, if you&apos;ve got concerns, just grab me.

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:397
&gt; +void GraphicsLayerChromium::layerAnimationStarted(double startTime)

this seems to be unused

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:545
&gt; +}

should this setNeedsCommit? just for completeness

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:33
&gt; +// Used to indicate that an animation event has taken place on the given layer at the given time.

Should we call this an animation started event?
E.g CCAnimationStartedEvent?

The docs would be &quot;Indicates an animation on a particular layer started.&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:43
&gt; +class CCAnimationResults {

Why not just do this as

typedef vector&lt;CCAnimationStartedEvents&gt; CCAnimationEventsVector

If we ever need to communicate other types of animation events, we can do so by changing the typedef, making a CCAnimationEvent base class, making CCAnimationStartedEvent be a subclass and done.

The side bonus of this is that you dont do results.startedAnimations().push_back(), which is just smelly imo.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:53
&gt; +    const Vector&lt;CCAnimationResult&gt;&amp; statedAnimations() const { return m_startedAnimations; }

typo here --- you say stated instead of started :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:46
&gt; +    static PassOwnPtr&lt;CCLayerAnimationController&gt; create()

Typically i think we put the create() impl in the cpp

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:102
&gt; +    if (!m_pageScaleAnimation &amp;&amp; !m_needsAnimateLayers)

Is there a way to make this whole flow less messy?

bool needsRedrawOnImplThread

if(m_pageScaleAnimation() {
  needsRedraw = true;
   .. page scale stuff
}

if (m_needsAnimateLayers)
   needsRedraw |= animateLayers()

if (needsRedraw)
 m_client-&gt;setNEedsRedrawOnImplThread

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:122
&gt; +    m_client-&gt;setNeedsRedrawOnImplThread();

I&apos;m a little concrned about this not being conditional on m_animate | m_pageScale. Suppose when you enter animate, you have an animation that&apos;s about to end. During the animateLayers call, it ends. We now have m_needsAnimatLayers false, but we&apos;re here asking for a redraw anyway. That&apos;s overkill. 

I think the refactoring above would clean this up so such errors wouldn&apos;t happen.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:256
&gt; +bool CCLayerTreeHostImpl::animateLayersRecursive(CCLayerImpl* current, double frameBeginTimeSecs, CCAnimationResults&amp; results)

Should we make make this return void and pass the bool in by ref so that its obvious what the return value is.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:271
&gt; +}

Also note that in your current code, you&apos;re never actually clearing the m_needsAnimateLayers. You compute this local variable, but you never assign it to the actual member variable at the call site. This points to a test coverage gap. You should make anotehr test that is for &quot;animation stops eventually after we&apos;ve added an animation.&quot; Open question how to write it but clearly that can happen and its undesirable.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h:115
&gt; +// For use in the single-threaded case. In debug builds, it pretends that the

Where did we put the DebugScopedSetImplThread class? Is that in this file too? If so, thats cool. If not, lets put it wherever the other one is.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:250
&gt; +void CCThreadProxy::pushAnimationResultsToMainThreadOnImplThread(PassOwnPtr&lt;CCAnimationResults&gt; results)

ugh i finally realized. This should be postAnimationResultToMainThreadOnImplThrad

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:253
&gt; +    TRACE_EVENT(&quot;CCThreadProxy::pushAnimationResults&quot;, this, 0);

out of date string, should be pushAnimationResultsToMainThreadOnImplThread

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:560
&gt; +void CCThreadProxy::pushAnimationResults(PassOwnPtr&lt;CCAnimationResults&gt; results)

and this should be setAnimationResults.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:565
&gt; +    m_layerTreeHost-&gt;setAnimationResults(results);

and this one is correctly named.

but since i churned you on this, you&apos;re welcome to leave as is. I&apos;m really sorry about the incorrect guidance before. :$

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:145
&gt; +// Adapts CCLayerAnimationController for test.

Might make a note that it forces the addAnimation method to work.

Looking at this, I&apos;d really like to do this slightly differently. Instead of making addAnimation/etc virtual on the controller, lets do the following: make the base class have a bool m_acceleratedAnimationsEnabled. The default constructor sets it to false. If false, the addAnimation method return false. If its true, it should do the activeAnimations().append stuff.

This subclass should just set the m_acceleratedAnimationsEnabled to true.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:156
&gt; +        activeAnimations().append(CCActiveAnimation::create(adoptPtr(new FakeFloatTransition(1.0, 1.0f, 0.0f)), 0, CCActiveAnimation::Opacity));

The reason for the abovementioned refactoring is because this line here, eg. 156, isn&apos;t really test code. Rather, its the implementation code we want when the controller is turned on. The test code should be enabling this behavior in the base class, not implementing the behavior itself.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:872
&gt; +

I think we might want to make another test that verifies that animate() stops getting called after the animation turns off.

Probably the way to do this is to get the animate set up enough that the animation turns itself off in the first call to animate. Then, hook the CCLayerTreeHostImpl&apos;s request for a redraw on the impl thread. Verify in the drawLayersOnImplThread hook that that client method wasn&apos;t called.

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:255
&gt; +TEST_F(TreeSynchronizerTest, syncSimpleTreeThenDestroy)

Why are these using the TreeSynchronizerTest fixture for these? It seems to me that the base class you&apos;ve got can be called TreeSynchronizerAnimationTest and only the animates need to  use that fixture.
Not all the tests in a the same file have to use the same fixture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558900</commentid>
    <comment_count>19</comment_count>
      <attachid>126545</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-16 21:49:17 -0800</bug_when>
    <thetext>Comment on attachment 126545
Patch

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

I don&apos;t think I&apos;ll fully paged this in, but left some comments that are hopefully helpful

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:223
&gt; +    friend class CCLayerTreeHostTest;

this makes me really sad. if we can&apos;t write a test on the public interface, then it&apos;s a good sign that either our interface is bad or the test is bad. we have a general problem with too many unit tests depending on implementation details and not on behaviors that are important to test, which makes it really hard to do useful refactoring

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:226
&gt; +    friend class TreeSynchronizerTest;

this too. why would TreeSynchronizerTest need to see the privates of LayerChromium? that makes no sense.  TreeSynchronizerTest should test only the TreeSynchronizer

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:47
&gt; +CCActiveAnimation::~CCActiveAnimation() { }

in .cpp&apos;s, the braces for function definitions always get their own lines even if it&apos;s empty

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:46
&gt;&gt; +    static PassOwnPtr&lt;CCLayerAnimationController&gt; create()
&gt; 
&gt; Typically i think we put the create() impl in the cpp

we&apos;re pretty inconsistent on this - i think having it in the .cpp is fine. important bit is to keep the c&apos;tor in the private: section

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:48
&gt; +        return adoptPtr(new CCLayerAnimationController());

nit: we tend to by a slim majority omit the ()s on a no-arg c&apos;tor call

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:51
&gt; +    virtual ~CCLayerAnimationController() { }

please don&apos;t inline virtual d&apos;tors, especially for classes (like this one) that have container member variables.  The problem is that doing this requires the compiler to generate code for the d&apos;tor in every translation unit that #includes this header.  The d&apos;tor for Vector&lt;OwnPtr&lt;T&gt; &gt; is friggin&apos; gigantic, and we&apos;ll end up with a ton of duplicate code that the linker has to then de-duplicate and throw away. since it&apos;s a virtual call, the compiler can&apos;t actually inline the calls anyway so the linker.

this is a problem in webkit/chromium because our link-time requirements are pretty crazy (it&apos;s impossible to link in a 32-bit address space, debug builds with symbols are many gigs)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:68
&gt; +    CCLayerAnimationController() { }

inlining the c&apos;tor is a bad idea for the same sorts of reasons as inlining the d&apos;tor.  Vector&lt;OwnPtr&lt;T&gt; &gt;&apos;s constructor is pretty damn hefty

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:49
&gt; +CCLayerAnimationControllerImpl::~CCLayerAnimationControllerImpl() { }

expand, please

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:177
&gt; +        hostImpl-&gt;setNeedsAnimateLayers();

this is a non-obvious interaction to me...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:267
&gt; +    // Implemented here: https://bugs.webkit.org/show_bug.cgi?id=77646

this would normally be a FIXME

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:102
&gt;&gt; +    if (!m_pageScaleAnimation &amp;&amp; !m_needsAnimateLayers)
&gt; 
&gt; Is there a way to make this whole flow less messy?
&gt; 
&gt; bool needsRedrawOnImplThread
&gt; 
&gt; if(m_pageScaleAnimation() {
&gt;   needsRedraw = true;
&gt;    .. page scale stuff
&gt; }
&gt; 
&gt; if (m_needsAnimateLayers)
&gt;    needsRedraw |= animateLayers()
&gt; 
&gt; if (needsRedraw)
&gt;  m_client-&gt;setNEedsRedrawOnImplThread

or how about having some helper functions? i agree this function is gettin&apos; pretty funky

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:129
&gt; +    // virtual for testing.

for comments in webkit, please start with a uppercase letter and end with a period (even if it isn&apos;t really a sentence)

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:156
&gt;&gt; +        activeAnimations().append(CCActiveAnimation::create(adoptPtr(new FakeFloatTransition(1.0, 1.0f, 0.0f)), 0, CCActiveAnimation::Opacity));
&gt; 
&gt; The reason for the abovementioned refactoring is because this line here, eg. 156, isn&apos;t really test code. Rather, its the implementation code we want when the controller is turned on. The test code should be enabling this behavior in the base class, not implementing the behavior itself.

floating point constants should not have trailing &quot;.0f&quot;s http://www.webkit.org/coding/coding-style.html &quot;Floating point literals&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559512</commentid>
    <comment_count>20</comment_count>
      <attachid>127649</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-17 13:56:48 -0800</bug_when>
    <thetext>Created attachment 127649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559686</commentid>
    <comment_count>21</comment_count>
      <attachid>127649</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 18:45:30 -0800</bug_when>
    <thetext>Comment on attachment 127649
Patch

Attachment 127649 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11541589

New failing tests:
compositing/webgl/webgl-nonpremultiplied-blend.html
compositing/iframes/iframe-content-flipping.html
platform/chromium/compositing/lost-compositor-context-with-video.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559702</commentid>
    <comment_count>22</comment_count>
      <attachid>127687</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:13:19 -0800</bug_when>
    <thetext>Created attachment 127687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559706</commentid>
    <comment_count>23</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:35:08 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 126545 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126545&amp;action=review
&gt; 
&gt; LGTM with additional nits.
&gt; 
&gt; @jamesr, can you do a final review? Of course, if you&apos;ve got concerns, just grab me.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:397
&gt; &gt; +void GraphicsLayerChromium::layerAnimationStarted(double startTime)
&gt; 
&gt; this seems to be unused
Deleted.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:545
&gt; &gt; +}
&gt; 
&gt; should this setNeedsCommit? just for completeness
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:33
&gt; &gt; +// Used to indicate that an animation event has taken place on the given layer at the given time.
&gt; 
&gt; Should we call this an animation started event?
&gt; E.g CCAnimationStartedEvent?
&gt; 
&gt; The docs would be &quot;Indicates an animation on a particular layer started.&quot;
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:43
&gt; &gt; +class CCAnimationResults {
&gt; 
&gt; Why not just do this as
&gt; 
&gt; typedef vector&lt;CCAnimationStartedEvents&gt; CCAnimationEventsVector
&gt; 
&gt; If we ever need to communicate other types of animation events, we can do so by changing the typedef, making a CCAnimationEvent base class, making CCAnimationStartedEvent be a subclass and done.
&gt; 
&gt; The side bonus of this is that you dont do results.startedAnimations().push_back(), which is just smelly imo.
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationResults.h:53
&gt; &gt; +    const Vector&lt;CCAnimationResult&gt;&amp; statedAnimations() const { return m_startedAnimations; }
&gt; 
&gt; typo here --- you say stated instead of started :)
&gt; 
Removed :)
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:46
&gt; &gt; +    static PassOwnPtr&lt;CCLayerAnimationController&gt; create()
&gt; 
&gt; Typically i think we put the create() impl in the cpp
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:102
&gt; &gt; +    if (!m_pageScaleAnimation &amp;&amp; !m_needsAnimateLayers)
&gt; 
&gt; Is there a way to make this whole flow less messy?
&gt; 
&gt; bool needsRedrawOnImplThread
&gt; 
&gt; if(m_pageScaleAnimation() {
&gt;   needsRedraw = true;
&gt;    .. page scale stuff
&gt; }
&gt; 
&gt; if (m_needsAnimateLayers)
&gt;    needsRedraw |= animateLayers()
&gt; 
&gt; if (needsRedraw)
&gt;  m_client-&gt;setNEedsRedrawOnImplThread
&gt; 
Cleaned up this function. Now calls two easy-to-understand helper functions.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:122
&gt; &gt; +    m_client-&gt;setNeedsRedrawOnImplThread();
&gt; 
&gt; I&apos;m a little concrned about this not being conditional on m_animate | m_pageScale. Suppose when you enter animate, you have an animation that&apos;s about to end. During the animateLayers call, it ends. We now have m_needsAnimatLayers false, but we&apos;re here asking for a redraw anyway. That&apos;s overkill. 
&gt; 
&gt; I think the refactoring above would clean this up so such errors wouldn&apos;t happen.
&gt;
Fixed. 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:256
&gt; &gt; +bool CCLayerTreeHostImpl::animateLayersRecursive(CCLayerImpl* current, double frameBeginTimeSecs, CCAnimationResults&amp; results)
&gt; 
&gt; Should we make make this return void and pass the bool in by ref so that its obvious what the return value is.
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:271
&gt; &gt; +}
&gt; 
&gt; Also note that in your current code, you&apos;re never actually clearing the m_needsAnimateLayers. You compute this local variable, but you never assign it to the actual member variable at the call site. This points to a test coverage gap. You should make anotehr test that is for &quot;animation stops eventually after we&apos;ve added an animation.&quot; Open question how to write it but clearly that can happen and its undesirable.
&gt; 
m_needsAnimateLayers is set. I&apos;ve modified the CCLayerTreeHostTest to check that the animation eventually stops.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h:115
&gt; &gt; +// For use in the single-threaded case. In debug builds, it pretends that the
&gt; 
&gt; Where did we put the DebugScopedSetImplThread class? Is that in this file too? If so, thats cool. If not, lets put it wherever the other one is.
&gt;
They&apos;re in the same spot. 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:250
&gt; &gt; +void CCThreadProxy::pushAnimationResultsToMainThreadOnImplThread(PassOwnPtr&lt;CCAnimationResults&gt; results)
&gt; 
&gt; ugh i finally realized. This should be postAnimationResultToMainThreadOnImplThrad
&gt; 
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:253
&gt; &gt; +    TRACE_EVENT(&quot;CCThreadProxy::pushAnimationResults&quot;, this, 0);
&gt; 
&gt; out of date string, should be pushAnimationResultsToMainThreadOnImplThread
&gt; 
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:560
&gt; &gt; +void CCThreadProxy::pushAnimationResults(PassOwnPtr&lt;CCAnimationResults&gt; results)
&gt; 
&gt; and this should be setAnimationResults.
&gt; 
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:565
&gt; &gt; +    m_layerTreeHost-&gt;setAnimationResults(results);
&gt; 
&gt; and this one is correctly named.
&gt; 
&gt; but since i churned you on this, you&apos;re welcome to leave as is. I&apos;m really sorry about the incorrect guidance before. :$
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:145
&gt; &gt; +// Adapts CCLayerAnimationController for test.
&gt; 
&gt; Might make a note that it forces the addAnimation method to work.
&gt; 
Done.
&gt; Looking at this, I&apos;d really like to do this slightly differently. Instead of making addAnimation/etc virtual on the controller, lets do the following: make the base class have a bool m_acceleratedAnimationsEnabled. The default constructor sets it to false. If false, the addAnimation method return false. If its true, it should do the activeAnimations().append stuff.
&gt; 
&gt; This subclass should just set the m_acceleratedAnimationsEnabled to true.
&gt; 
This class really does stuff that&apos;s only useful for testing. I&apos;ve added a FIXME to remove it (it&apos;s removed in 77229)
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:156
&gt; &gt; +        activeAnimations().append(CCActiveAnimation::create(adoptPtr(new FakeFloatTransition(1.0, 1.0f, 0.0f)), 0, CCActiveAnimation::Opacity));
&gt; 
&gt; The reason for the abovementioned refactoring is because this line here, eg. 156, isn&apos;t really test code. Rather, its the implementation code we want when the controller is turned on. The test code should be enabling this behavior in the base class, not implementing the behavior itself.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:872
&gt; &gt; +
&gt; 
&gt; I think we might want to make another test that verifies that animate() stops getting called after the animation turns off.
Done.
&gt; 
&gt; Probably the way to do this is to get the animate set up enough that the animation turns itself off in the first call to animate. Then, hook the CCLayerTreeHostImpl&apos;s request for a redraw on the impl thread. Verify in the drawLayersOnImplThread hook that that client method wasn&apos;t called.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:255
&gt; &gt; +TEST_F(TreeSynchronizerTest, syncSimpleTreeThenDestroy)
&gt; 
&gt; Why are these using the TreeSynchronizerTest fixture for these? It seems to me that the base class you&apos;ve got can be called TreeSynchronizerAnimationTest and only the animates need to  use that fixture.
&gt; Not all the tests in a the same file have to use the same fixture.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559710</commentid>
    <comment_count>24</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-17 20:42:35 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 126545 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126545&amp;action=review
&gt; 
&gt; I don&apos;t think I&apos;ll fully paged this in, but left some comments that are hopefully helpful
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:223
&gt; &gt; +    friend class CCLayerTreeHostTest;
&gt; 
&gt; this makes me really sad. if we can&apos;t write a test on the public interface, then it&apos;s a good sign that either our interface is bad or the test is bad. we have a general problem with too many unit tests depending on implementation details and not on behaviors that are important to test, which makes it really hard to do useful refactoring

I agree that this is sad, but it&apos;s very temporary. It&apos;s not possible to add animations using the public API with this patch, but this is fixed in the next patch (77229) and these lines are removed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:226
&gt; &gt; +    friend class TreeSynchronizerTest;
&gt; 
&gt; this too. why would TreeSynchronizerTest need to see the privates of LayerChromium? that makes no sense.  TreeSynchronizerTest should test only the TreeSynchronizer
&gt; 
As above, this will be removed with 77229.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:47
&gt; &gt; +CCActiveAnimation::~CCActiveAnimation() { }
&gt; 
&gt; in .cpp&apos;s, the braces for function definitions always get their own lines even if it&apos;s empty
&gt; 
Fixed.
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:46
&gt; &gt;&gt; +    static PassOwnPtr&lt;CCLayerAnimationController&gt; create()
&gt; &gt; 
&gt; &gt; Typically i think we put the create() impl in the cpp
&gt; 
&gt; we&apos;re pretty inconsistent on this - i think having it in the .cpp is fine. important bit is to keep the c&apos;tor in the private: section
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:48
&gt; &gt; +        return adoptPtr(new CCLayerAnimationController());
&gt; 
&gt; nit: we tend to by a slim majority omit the ()s on a no-arg c&apos;tor call
&gt;
Fixed. 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:51
&gt; &gt; +    virtual ~CCLayerAnimationController() { }
&gt; 
&gt; please don&apos;t inline virtual d&apos;tors, especially for classes (like this one) that have container member variables.  The problem is that doing this requires the compiler to generate code for the d&apos;tor in every translation unit that #includes this header.  The d&apos;tor for Vector&lt;OwnPtr&lt;T&gt; &gt; is friggin&apos; gigantic, and we&apos;ll end up with a ton of duplicate code that the linker has to then de-duplicate and throw away. since it&apos;s a virtual call, the compiler can&apos;t actually inline the calls anyway so the linker.
&gt; 
&gt; this is a problem in webkit/chromium because our link-time requirements are pretty crazy (it&apos;s impossible to link in a 32-bit address space, debug builds with symbols are many gigs)
&gt; 
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:68
&gt; &gt; +    CCLayerAnimationController() { }
&gt; 
&gt; inlining the c&apos;tor is a bad idea for the same sorts of reasons as inlining the d&apos;tor.  Vector&lt;OwnPtr&lt;T&gt; &gt;&apos;s constructor is pretty damn hefty
&gt; 
Fixed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:49
&gt; &gt; +CCLayerAnimationControllerImpl::~CCLayerAnimationControllerImpl() { }
&gt; 
&gt; expand, please
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:177
&gt; &gt; +        hostImpl-&gt;setNeedsAnimateLayers();
&gt; 
&gt; this is a non-obvious interaction to me...
&gt; 
After a tree sync, an animation may have been activated, so we need to attempt to animate the layers.
Added an explanatory comment.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:267
&gt; &gt; +    // Implemented here: https://bugs.webkit.org/show_bug.cgi?id=77646
&gt; 
&gt; this would normally be a FIXME
Fixed.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:102
&gt; &gt;&gt; +    if (!m_pageScaleAnimation &amp;&amp; !m_needsAnimateLayers)
&gt; &gt; 
&gt; &gt; Is there a way to make this whole flow less messy?
&gt; &gt; 
&gt; &gt; bool needsRedrawOnImplThread
&gt; &gt; 
&gt; &gt; if(m_pageScaleAnimation() {
&gt; &gt;   needsRedraw = true;
&gt; &gt;    .. page scale stuff
&gt; &gt; }
&gt; &gt; 
&gt; &gt; if (m_needsAnimateLayers)
&gt; &gt;    needsRedraw |= animateLayers()
&gt; &gt; 
&gt; &gt; if (needsRedraw)
&gt; &gt;  m_client-&gt;setNEedsRedrawOnImplThread
&gt; 
&gt; or how about having some helper functions? i agree this function is gettin&apos; pretty funky
&gt; 
Added some helper functions. Looks a lot cleaner now.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:129
&gt; &gt; +    // virtual for testing.
&gt; 
&gt; for comments in webkit, please start with a uppercase letter and end with a period (even if it isn&apos;t really a sentence)
&gt;
Fixed. 
&gt; &gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:156
&gt; &gt;&gt; +        activeAnimations().append(CCActiveAnimation::create(adoptPtr(new FakeFloatTransition(1.0, 1.0f, 0.0f)), 0, CCActiveAnimation::Opacity));
&gt; &gt; 
&gt; &gt; The reason for the abovementioned refactoring is because this line here, eg. 156, isn&apos;t really test code. Rather, its the implementation code we want when the controller is turned on. The test code should be enabling this behavior in the base class, not implementing the behavior itself.
&gt; 
&gt; floating point constants should not have trailing &quot;.0f&quot;s http://www.webkit.org/coding/coding-style.html &quot;Floating point literals&quot;
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559730</commentid>
    <comment_count>25</comment_count>
      <attachid>127687</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 23:18:46 -0800</bug_when>
    <thetext>Comment on attachment 127687
Patch

Attachment 127687 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11539728

New failing tests:
compositing/webgl/webgl-nonpremultiplied-blend.html
compositing/iframes/iframe-content-flipping.html
platform/chromium/compositing/lost-compositor-context-with-video.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559733</commentid>
    <comment_count>26</comment_count>
      <attachid>127687</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-17 23:21:30 -0800</bug_when>
    <thetext>Comment on attachment 127687
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:218
&gt; +    bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; boxSize, const Animation*, const String&amp; animationName, double timeOffset);

we know that we aren&apos;t sticking with strings so I think landing some code using strings is simply creating unnecessary work for us.  Keep in mind this is a large, complex codebase with lots of people contributing that we ship to millions of users on a weekly and daily basis.  Any churn that we can avoid is worth its weight in gold.

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:78
&gt; +    layer-&gt;animationController()-&gt;synchronizeAnimations(ccLayerImpl-&gt;animationController());

I&apos;d rather you do this inside LayerChromium::pushPropertiesTo().  Ideally the synchronizer has as little logic as possible.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:47
&gt; +CCActiveAnimation::~CCActiveAnimation() { }

more newlines, please

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:48
&gt; +    typedef size_t GroupID;

why do we need to bump this? are we expecting to go through &gt; 2 billion groupids?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:29
&gt; +#include &quot;GraphicsLayer.h&quot; // for KeyframeValueList

this is something that we&apos;re going to have to wrap in our own API, although we don&apos;t need to immediately. have you put much thought into how that would look?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:50
&gt; +                                              const IntSize&amp; /*boxSize*/,

in the implementation if you aren&apos;t going to use a parameter simply omit the name completely, no need to comment it out

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:85
&gt; +void CCLayerAnimationController::removeAnimationsCompletedOnImplThread(CCLayerAnimationControllerImpl* controllerImpl)
&gt; +{

any functions with specific thread requirements should ideally have thread ASSERT()s to keep us honest

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:29
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;Vector.h&quot;

these should be &lt;wtf/text/WTFString.h&gt; and &lt;wtf/Vector.h&gt;, respectively (although we may not end up needing the first one at all)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:48
&gt; +CCLayerAnimationControllerImpl::~CCLayerAnimationControllerImpl() { }

expand

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:328
&gt; +TEST_F(TreeSynchronizerAnimationTest, syncNewAnimation)

I don&apos;t think it provides us much value to have this test both the tree synchronizer and the synchronizeAnimations() function. I think a much better strategy would be to move the synchronizeAnimations() call inside of LayerChromium::pushPropertiesTo() function and rely on our other TreeSynchronizer tests to verify that the call happens. Then, test synchronizerAnimations() independently of TreeSynchronizer.  That will cut down on the number of extra fixtures / friends and boilerplate you need to generate without reducing our test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561133</commentid>
    <comment_count>27</comment_count>
      <attachid>128023</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-21 12:28:56 -0800</bug_when>
    <thetext>Created attachment 128023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561137</commentid>
    <comment_count>28</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-21 12:34:59 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 127687 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127687&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:218
&gt; &gt; +    bool addAnimation(const KeyframeValueList&amp;, const IntSize&amp; boxSize, const Animation*, const String&amp; animationName, double timeOffset);
&gt; 
&gt; we know that we aren&apos;t sticking with strings so I think landing some code using strings is simply creating unnecessary work for us.  Keep in mind this is a large, complex codebase with lots of people contributing that we ship to millions of users on a weekly and daily basis.  Any churn that we can avoid is worth its weight in gold.
&gt; 

Fixed. Switched to IDs in this patch.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:78
&gt; &gt; +    layer-&gt;animationController()-&gt;synchronizeAnimations(ccLayerImpl-&gt;animationController());
&gt; 
&gt; I&apos;d rather you do this inside LayerChromium::pushPropertiesTo().  Ideally the synchronizer has as little logic as possible.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:47
&gt; &gt; +CCActiveAnimation::~CCActiveAnimation() { }
&gt; 
&gt; more newlines, please
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:48
&gt; &gt; +    typedef size_t GroupID;
&gt; 
&gt; why do we need to bump this? are we expecting to go through &gt; 2 billion groupids?
&gt; 
No good reason. Fixed. Switched to ints for IDs.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:29
&gt; &gt; +#include &quot;GraphicsLayer.h&quot; // for KeyframeValueList
&gt; 
&gt; this is something that we&apos;re going to have to wrap in our own API, although we don&apos;t need to immediately. have you put much thought into how that would look?
&gt; 
I have an idea, yes. In the patch that introduces the keyframed animation classes, I have added code in CCLayerAnimationController to translate from KeyframeValueList to a collection CCFloatKeyframes (or CCTransformKeyframes). This translation could certainly happen closer to (or in) GraphicsLayerChromium  to avoid plumbing the KeyframeValueList all the way to the CCLayerAnimationController.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:50
&gt; &gt; +                                              const IntSize&amp; /*boxSize*/,
&gt; 
&gt; in the implementation if you aren&apos;t going to use a parameter simply omit the name completely, no need to comment it out
&gt; 
Removed.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:85
&gt; &gt; +void CCLayerAnimationController::removeAnimationsCompletedOnImplThread(CCLayerAnimationControllerImpl* controllerImpl)
&gt; &gt; +{
&gt; 
&gt; any functions with specific thread requirements should ideally have thread ASSERT()s to keep us honest
&gt; 
This function was poorly named. It does not need to execute on the impl thread. I&apos;ve renamed it.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.h:29
&gt; &gt; +#include &quot;PlatformString.h&quot;
&gt; &gt; +#include &quot;Vector.h&quot;
&gt; 
&gt; these should be &lt;wtf/text/WTFString.h&gt; and &lt;wtf/Vector.h&gt;, respectively (although we may not end up needing the first one at all)
&gt; 
Fixed (switched to &lt;wtf/Vector.h&gt; and removed the string-related include).
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:48
&gt; &gt; +CCLayerAnimationControllerImpl::~CCLayerAnimationControllerImpl() { }
&gt; 
&gt; expand
&gt; 
Done.
&gt; &gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:328
&gt; &gt; +TEST_F(TreeSynchronizerAnimationTest, syncNewAnimation)
&gt; 
&gt; I don&apos;t think it provides us much value to have this test both the tree synchronizer and the synchronizeAnimations() function. I think a much better strategy would be to move the synchronizeAnimations() call inside of LayerChromium::pushPropertiesTo() function and rely on our other TreeSynchronizer tests to verify that the call happens. Then, test synchronizerAnimations() independently of TreeSynchronizer.  That will cut down on the number of extra fixtures / friends and boilerplate you need to generate without reducing our test coverage.

Fixed. I&apos;ve added a single test to the TreeSynchroniserTest that ensures that CCLayerAnimationController::synchronizeAnimations is called and I&apos;ve moved all the tests for synchronizeAnimations into (the newly created) CCLayerAnimationControllerTest.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561467</commentid>
    <comment_count>29</comment_count>
      <attachid>128023</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 18:48:29 -0800</bug_when>
    <thetext>Comment on attachment 128023
Patch

Attachment 128023 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11558321

New failing tests:
compositing/webgl/webgl-nonpremultiplied-blend.html
compositing/iframes/iframe-content-flipping.html
platform/chromium/compositing/lost-compositor-context-with-video.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561581</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-21 21:15:02 -0800</bug_when>
    <thetext>(somehow I wasn&apos;t on the CC list for this bug so I haven&apos;t been notified of any changes. whoops!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561603</commentid>
    <comment_count>31</comment_count>
      <attachid>128023</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-21 22:01:48 -0800</bug_when>
    <thetext>Comment on attachment 128023
Patch

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

Great, R=me!  I have a few nits, but nothing serious.

Can you confirm whether those test failures from the cr-linux EWS bot are due to this patch and if so what&apos;s going on?  If it&apos;s nothing to do with this feel free to upload another patch with &apos;Reviewed by James Robinson.&apos; lines in the ChangeLogs instead of &apos;Reviewed by NOBODY (OOPS!)&apos; without a &quot;review?&quot; flag and ask any committer to set commit-queue+.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationController.cpp:82
&gt; +// Looking at GraphicsLayerCA, this appears to be the analog to suspendAnimations, which is for testing.

note: FYI, i think this might someday be used by explicit JavaScript animation APIs. such APIs don&apos;t exist today, but dino@apple has been working on something in this area.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:61
&gt; +    , m_needsAnimateLayers(true)

shouldn&apos;t this initially be false and be set true by the first tree sync?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:593
&gt; +    if (!m_needsAnimateLayers || !m_rootLayerImpl.get())

nit: all WebKit smart pointer type (OwnPtr/RefPtr) have operator bool() overrides that do the expected thing and the style is to prefer these to null checking the raw pointer. this means to null-check a pointer just write &quot;!m_rootLayerImpl&quot; not &quot;!m_rootLayerImpl.get()&quot;

&gt; Source/WebKit/chromium/tests/TreeSynchronizerTest.cpp:104
&gt; +    const bool synchronizedAnimations() const { return m_synchronizedAnimations; }

const on a bool return type is meaningless - it&apos;s returned by value so the caller gets their own copy anyway</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562057</commentid>
    <comment_count>32</comment_count>
      <attachid>128231</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-22 09:43:23 -0800</bug_when>
    <thetext>Created attachment 128231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562169</commentid>
    <comment_count>33</comment_count>
      <attachid>128231</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 11:14:13 -0800</bug_when>
    <thetext>Comment on attachment 128231
Patch

Attachment 128231 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11562558

New failing tests:
compositing/webgl/webgl-nonpremultiplied-blend.html
compositing/iframes/iframe-content-flipping.html
platform/chromium/compositing/lost-compositor-context-with-video.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562337</commentid>
    <comment_count>34</comment_count>
      <attachid>128279</attachid>
    <who name="">vollick</who>
    <bug_when>2012-02-22 13:36:59 -0800</bug_when>
    <thetext>Created attachment 128279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562340</commentid>
    <comment_count>35</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-02-22 13:39:44 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=128279) [details]
&gt; Patch

Things to note in this latest patch
 - Enabled threaded animation in CCLayerTreeHostTest
 - Removed an extra call to m_client-&gt;setNeedsRedrawOnImplThread in CCLayerTreeHostImpl::animateLayers
 - Added extra logic to CCLayerTreeHostImpl::animateLayers to
   a) make sure that we only request a redraw when we&apos;ve actually animated.
   b) make sure that we don&apos;t walk the layer tree when threaded animations are disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562467</commentid>
    <comment_count>36</comment_count>
      <attachid>128279</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-22 15:38:48 -0800</bug_when>
    <thetext>Comment on attachment 128279
Patch

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562603</commentid>
    <comment_count>37</comment_count>
      <attachid>128279</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 17:22:09 -0800</bug_when>
    <thetext>Comment on attachment 128279
Patch

Clearing flags on attachment: 128279

Committed r108581: &lt;http://trac.webkit.org/changeset/108581&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562605</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 17:22:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562669</commentid>
    <comment_count>39</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-22 18:23:48 -0800</bug_when>
    <thetext>Committed r108593: &lt;http://trac.webkit.org/changeset/108593&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122694</attachid>
            <date>2012-01-16 17:02:15 -0800</date>
            <delta_ts>2012-01-16 17:08:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120116200214.patch</filename>
            <type>text/plain</type>
            <size>46668</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWFmZTI3MGE2
YjQ2MTI5ZjBiNjY5NzZjYTQ0ZWVlNGE3Yzk2ZGVkNy4uNWYyNDdhYTkyOTg0ODFiNWQwYTAyMTJi
Yjg5ZDJlNDZjZDg2NjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYyOCw2ICszNjI4LDggQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjdlMDVmOGRjZTRhZmNi
MGU4MjI1YzkyY2ZlNTQ0ZDMzMTFkMDk5YS4uMmUxOTIxZjk3NmZmMTM3ODlkZWM4ODY2YWJhM2I2
YzYzMTFjMDBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0x
MjgsNyArMTI4LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNv
bnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQogdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCiB7CiAgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0gICAgaWYgKCFtX2luU2V0Q2hpbGRy
ZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAgICAgICB1cGRhdGVDaGlsZExpc3Qo
KTsKIH0KIApAQCAtMzc0LDYgKzM3NCwzMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAg
ICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXpl
JiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9sYXllci0+YWRk
QW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1l
T2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAg
bV9sYXllci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRp
b25OYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUp
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7
CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewog
ICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC0zODksMTIgKzQxNCwxMiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5
ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsK
ICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7Ci0gIAorCiAgICAgICAgICAgICAv
LyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlQ2hpbGRM
aXN0LgogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKICAgICAgICAgfQogICAgIH0K
LSAgCisKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQogICAgICAgICB1cGRhdGVDaGlsZExpc3Qo
KTsKIH0KQEAgLTU0Myw3ICs1NjgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAgICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKLSAgICAgICAg
CisKICAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVy
IGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4KICAg
ICAgICAgbV9sYXllci0+c2V0T3BhY2l0eSgxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAppbmRleCBkZmExMDlkM2UwMzllNzBhNmQ1ZmRlODdlYWY3NjgxNDMwMTNhYmI3Li5h
MTVjOTJkNTgzMWVkYWRjNjM0YTIzOWMyMjZjNzMyZjdlOTA5NTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTEsNiArOTEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXpl
JiAvKmJveFNpemUqLywgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlv
bk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VB
bmltYXRpb24oY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9m
ZnNldCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
LyphbmltYXRpb25OYW1lKi8pOworCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25z
KGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCiAg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggMmRmMDViNTljYjg1YWQ3YzA4NzAxOGNjMjU2ZWUxNzQwOTRi
OWJkNS4uYjUwNmYyYTVhNTNkMTFiZGQxNGJlMjAxY2VhOGExOWEwZjlhOTdjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTksNiAr
NjAsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVs
ZWdhdGUpCiAgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25l
eHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9hbmltYXRpb25Db250cm9s
bGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSkKICAgICAsIG1fc2Nyb2xs
YWJsZShmYWxzZSkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2JhY2tn
cm91bmRDb2xvcigwLCAwLCAwLCAwKQpAQCAtMTA3LDYgKzEwOSwzMSBAQCB2b2lkIExheWVyQ2hy
b21pdW06OmNsZWFudXBSZXNvdXJjZXNSZWN1cnNpdmUoKQogICAgIGNsZWFudXBSZXNvdXJjZXMo
KTsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZz
ZXQpCit7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZh
bHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30K
Kwordm9pZCBMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxl
ci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQg
TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRp
b25OYW1lKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgdGltZSkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25z
KHRpbWUpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQorewor
ICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCiB2b2lk
IExheWVyQ2hyb21pdW06OnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNvbXBv
c2l0ZWRDb250ZW50KQogewogICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9IGlzTm9uQ29t
cG9zaXRlZENvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggODk4NDVhNTE4ZWM3NGRjZjQ0
NTRmYTlkZWNkMTA1YTBkMzY4OTI4Ny4uOGYwZjM0MWE1YTdlM2VmZTc0ZWMyNWYyNWNkMDhkMjg1
NzAzYTVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTEsNiArNTEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3Mg
Q0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRh
dGVyOwpAQCAtMjAzLDYgKzIwNCwxNSBAQCBwdWJsaWM6CiAgICAgQ0NMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0LmdldCgpOyB9CiAg
ICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzUmVjdXJzaXZlKCk7CiAKKyAgICBib29sIGFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6ZSov
LCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3Vi
bGUgLyp0aW1lT2Zmc2V0Ki8pOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5n
JiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKTsKKyAgICB2b2lkIHJl
bW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKTsKKworICAgIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0
aW9ucygpOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRy
b2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwog
cHJvdGVjdGVkOgogICAgIENDTGF5ZXJEZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKICAgICBleHBsaWNp
dCBMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpAQCAtMjUwLDYgKzI2MCw4IEBAIHBy
aXZhdGU6CiAKICAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CiAK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJv
bGxlcjsKKwogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsK
ICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5j
cHAKaW5kZXggZDBmZDBjZTUyM2Q2Mzg4NGJlOTMyZTFiZDQxNjU4MmYyNTc2MmU0MC4uM2IxZmVi
ZDk1YzNmN2IzOWI4ZDQ3M2RhYWVmNWE0NWM5ZWNjZjY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9u
aXplci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgi
CiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtNDgsNyArNDksNyBAQCB2b2lkIFRyZWVTeW5jaHJvbml6ZXI6
OmFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIENDTGF5
ZQogICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIHJlcGxpY2FMYXll
cik7CiB9CiAKLVBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGxNYXAm
IG1hcCkKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgZG91YmxlIGN1cnJlbnRUaW1l
TXMsIENDTGF5ZXJJbXBsTWFwJiBtYXAsIGJvb2wmIGFjdGl2YXRlZEFuaW1hdGlvbikKIHsKICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsOwogICAgIENDTGF5ZXJJbXBsTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC5maW5kKGxheWVyLT5pZCgpKTsKQEAgLTYyLDIzICs2MywyNiBAQCBQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVS
ZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bQogCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGlsZHJlbigpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIGNjTGF5ZXJJbXBsLT5h
ZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoY2hpbGRyZW5baV0uZ2V0KCksIG1hcCkp
OworICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KGNoaWxkcmVuW2ldLmdldCgpLCBjdXJyZW50VGltZU1zLCBtYXAsIGFjdGl2YXRlZEFuaW1hdGlv
bikpOwogCiAgICAgaWYgKExheWVyQ2hyb21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5
ZXIoKSkKLSAgICAgICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6ZVRyZWVS
ZWN1cnNpdmUobWFza0xheWVyLCBtYXApKTsKKyAgICAgICAgY2NMYXllckltcGwtPnNldE1hc2tM
YXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFza0xheWVyLCBjdXJyZW50VGltZU1zLCBt
YXAsIGFjdGl2YXRlZEFuaW1hdGlvbikpOwogICAgIGVsc2UKICAgICAgICAgY2NMYXllckltcGwt
PnNldE1hc2tMYXllcigwKTsKIAogICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIg
PSBsYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNh
TGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKHJlcGxpY2FMYXllciwgbWFwKSk7CisgICAg
ICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KHJlcGxpY2FMYXllciwgY3VycmVudFRpbWVNcywgbWFwLCBhY3RpdmF0ZWRBbmltYXRpb24pKTsK
ICAgICBlbHNlCiAgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoMCk7CiAKKyAg
ICBpZiAobGF5ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cHVzaEFuaW1hdGlvbnNUbyhjY0xh
eWVySW1wbC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLCBjdXJyZW50VGltZU1zKSkKKyAgICAgICAg
YWN0aXZhdGVkQW5pbWF0aW9uID0gdHJ1ZTsKKwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1Rv
KGNjTGF5ZXJJbXBsLmdldCgpKTsKICAgICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6
ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBwcnBPbGRDQ0xheWVySW1wbFJvb3QpCit2b2lkIFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IHBycE9sZENDTGF5ZXJJbXBsUm9vdCwgZG91YmxlIGZyYW1lQmVnaW5U
aW1lU2VjcywgUmVmUHRyPENDTGF5ZXJJbXBsPiYgbmV3Q0NMYXllckltcGxSb290LCBib29sJiBh
Y3RpdmF0ZWRBbmltYXRpb24pCiB7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVy
SW1wbFJvb3QgPSBwcnBPbGRDQ0xheWVySW1wbFJvb3Q7CiAgICAgLy8gQnVpbGQgYSBtYXAgZnJv
bSBsYXllciBJRHMgdG8gQ0NMYXllckltcGxzIHNvIHdlIGNhbiByZXVzZSBsYXllcnMgZnJvbSB0
aGUgb2xkIHRyZWUuCkBAIC04Nyw5ICs5MSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJDCiAg
ICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgb2xkQ0NMYXllckltcGxS
b290LmdldCgpKTsKIAogICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSBuZXcgbGF5ZXIgdHJl
ZS4KLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5bmNocm9u
aXplVHJlZVJlY3Vyc2l2ZShsYXllckNocm9taXVtUm9vdCwgbWFwKTsKLQotICAgIHJldHVybiBu
ZXdDQ0xheWVySW1wbFJvb3QucmVsZWFzZSgpOworICAgIGFjdGl2YXRlZEFuaW1hdGlvbiA9IGZh
bHNlOworICAgIG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShs
YXllckNocm9taXVtUm9vdCwgZnJhbWVCZWdpblRpbWVTZWNzLCBtYXAsIGFjdGl2YXRlZEFuaW1h
dGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
aAppbmRleCBhNGU0OTQyMTczOTVlOGQyZTEyOTZiZDY1NjY2MmUzMmIxMTlhY2ZmLi4zYWJlNzZl
MDc4YWQyNDYxMjAxYzU2YmI3ZWVkMDEwMjJiMTE5OWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXpl
ci5oCkBAIC00MCw3ICs0MCw3IEBAIFdURl9NQUtFX05PTkNPUFlBQkxFKFRyZWVTeW5jaHJvbml6
ZXIpOwogcHVibGljOgogICAgIC8vIEFjY2VwdHMgYSBMYXllckNocm9taXVtIHRyZWUgYW5kIHJl
dHVybnMgYSByZWZlcmVuY2UgdG8gYSBDQ0xheWVySW1wbCB0cmVlIHRoYXQgZHVwbGljYXRlcyB0
aGUgc3RydWN0dXJlCiAgICAgLy8gb2YgdGhlIExheWVyQ2hyb21pdW0gdHJlZSwgcmV1c2luZyB0
aGUgQ0NMYXllckltcGxzIGluIHRoZSB0cmVlIHByb3ZpZGVkIGJ5IG9sZENDTGF5ZXJJbXBsUm9v
dCBpZiBwb3NzaWJsZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gc3luY2hy
b25pemVUcmVlcyhMYXllckNocm9taXVtKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IG9sZENDTGF5ZXJJbXBsUm9vdCk7CisgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVUcmVl
cyhMYXllckNocm9taXVtKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZEND
TGF5ZXJJbXBsUm9vdCwgZG91YmxlIGN1cnJlbnRUaW1lTXMsIFJlZlB0cjxDQ0xheWVySW1wbD4m
IG5ld0NDTGF5ZXJJbXBsUm9vdCwgYm9vbCYgYWN0aXZhdGVkQW5pbWF0aW9uKTsKIAogcHJpdmF0
ZToKICAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFibGUuCkBAIC00OSw3
ICs0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVtYmVyIGZ1
bmN0aW9ucyBzbyB0aGV5IGNhbiBhY2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21pdW0gYXMg
YSBmcmllbmQgY2xhc3MuCiAgICAgc3RhdGljIHZvaWQgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1
cnNpdmUoQ0NMYXllckltcGxNYXAmLCBDQ0xheWVySW1wbCopOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSos
IENDTGF5ZXJJbXBsTWFwJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHN5
bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiwgZG91YmxlIGN1cnJlbnRUaW1l
TXMsIENDTGF5ZXJJbXBsTWFwJiwgYm9vbCYgYWN0aXZhdGVkQW5pbWF0aW9uKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApp
bmRleCAyMWU2Y2M3YTllMjQ2ZWMwYmVmYWFhMDU4NGY2ZDIyMWM0NDYyMGVhLi4yMjUyMmM5MTI2
MDViNzkxMzAwY2U5MzAzMGI1MTUxNTEwZDdkNGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uY3BwCkBAIC05NSw0ICs5NSwyMiBAQCBkb3VibGUgQ0NBY3RpdmVBbmltYXRpb246
OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0CiAgICAgcmV0dXJu
IGZtb2QodHJpbW1lZCwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSk7CiB9CiAKK1Bhc3NP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvckltcGxU
aHJlYWQoKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oYWRvcHRQ
dHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUucmVsZWFzZSgpLCBtX2dy
b3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOworICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9y
dW5TdGF0ZTsKKyAgICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAg
IHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAgIHRvUmV0dXJuLT5tX3Bh
dXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAgIHRvUmV0dXJuLT5tX3RvdGFsUGF1c2VkVGltZSA9
IG1fdG90YWxQYXVzZWRUaW1lOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9CisK
K3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnB1c2hQcm9wZXJ0aWVzVG8oQ0NBY3RpdmVBbmltYXRp
b24qIG90aGVyLCBkb3VibGUgY3VycmVudFRpbWVTZWNzKSBjb25zdAoreworICAgIG90aGVyLT5z
ZXRSdW5TdGF0ZShtX3J1blN0YXRlLCBjdXJyZW50VGltZVNlY3MpOworICAgIG90aGVyLT5zZXRJ
dGVyYXRpb25zKG1faXRlcmF0aW9ucyk7CisgICAgb3RoZXItPnNldFN0YXJ0VGltZShtX3N0YXJ0
VGltZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2VkMTJkNjU4ZDc2ZDYwNGVlZTlmYmFkMGEzZDEu
Ljc3ZWY3YzI4NTE3YmQ4YzlhMjY1OTJhZWY4Y2RhNTEyMzk3NDhmNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaApAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAgLy8g
b2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBp
dGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBu
b3cpIGNvbnN0OwogCisgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJ
bXBsVGhyZWFkKCk7CisKKyAgICAvLyBEb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgZ2l2
ZW4gYWN0aXZlIGFuaW1hdGlvbi4KKyAgICB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NBY3RpdmVB
bmltYXRpb24qLCBkb3VibGUgY3VycmVudFRpbWVTZWNzKSBjb25zdDsKKwogcHJpdmF0ZToKICAg
ICBDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBHcm91cElE
LCBUYXJnZXRQcm9wZXJ0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NWViOTZhZDQ1ODFiMDA5NjAzNmNmOTRlNTRk
MTU3YzA1ZWI5OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmlt
YXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCkKK3sKKyAgICAvLyBGSVhNRToKKyAgICAvLyAoMSkgRHVtcCB2YWx1ZXMgYW5kIGVu
c3VyZSB0aGF0IHdlIHVuZGVyc3RhbmQgZXZlcnl0aGluZyB0aGF0IHdlJ3JlIHBhc3NlZCBvbiBw
YWdlcyB3aXRoIGNzcyBhbmltYXRpb25zLgorICAgIC8vICgyKSBSZXBsYWNlIHRyYW5zZm9ybXMg
aW4gdGhlIGtleWZyYW1lIHZhbHVlIGxpc3QgdGhhdCBhcmUgaW4gdGVybXMgb2YgcGVyY2VudGFn
ZXMuCisgICAgLy8gKDMpIENyZWF0ZSBhIG1hcHBpbmcgZnJvbSB0aGUgYW5pbWF0aW9uIG5hbWUg
dG8gdGhlIGFjdHVhbCBhbmltYXRpb24gKHByb2JhYmx5IGEgZ3JvdXBpZC9wcm9wZXJ0eSBwYWly
KS4KKyAgICAvLyAoNCkgQWN0dWFsbHkgY3JlYXRlIHRoZSBhbmltYXRpb25zIGFuZCBhZGQgdGhl
bSB0byB0aGUgbGlzdC4KKyAgICAvLyAoNSkgUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIC8v
IEZJWE1FOiBhZGQgbG9nZ2luZy4KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICAv
LyBGSVhNRTogYWRkIGxvZ2dpbmcuCit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIC8vIEZJWE1FOiBhZGQg
bG9nZ2luZy4KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5p
bWF0aW9ucygpCit7CisgICAgLy8gRklYTUU6IGFkZCBsb2dnaW5nLgorfQorCisvLyBFbnN1cmVz
IHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFu
ZCB0aGUgaW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5bmMuIFRoaXMgZnVuY3Rpb24gZG9l
cyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGltcGwgdGhyZWFkIGNvbnRyb2xsZXIuCitib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uc1RvKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlciwgZG91YmxlIGN1cnJlbnRUaW1lTXMpCit7
CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworCisgICAgc2l6ZV90IGkgPSAwOwor
ICAgIGZvciAoaSA9IDA7IGkgPCBjb250cm9sbGVyLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXItPm1fZmluaXNoZWRBbmltYXRpb25z
W2ldLmZpcnN0LCBjb250cm9sbGVyLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS5zZWNvbmQpOwor
CisgICAgY29udHJvbGxlci0+bV9maW5pc2hlZEFuaW1hdGlvbnMuY2xlYXIoKTsKKworICAgIGZv
ciAoaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKCFjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKSB7Cisg
ICAgICAgICAgICBjb250cm9sbGVyLT5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT5jbG9uZUZv
ckltcGxUaHJlYWQoKSk7CisgICAgICAgICAgICBhZGRlZEFuaW1hdGlvbiA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgY29udHJvbGxlci0+bV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKSBpcyBkZWNyZW1lbnRlZCBvciBpIGlzIGluY3JlbWVudGVkCisg
ICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KKyAg
ICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsp
IHsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRp
b24oY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBjb250cm9sbGVy
LT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBpZiAo
IWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMucmVt
b3ZlKGkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnB1c2hQcm9wZXJ0
aWVzVG8oY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpLCBjdXJyZW50VGlt
ZU1zIC8gMTAwMCk7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpH
cm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkg
PT0gZ3JvdXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRh
cmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5n
ZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MzkzMGUx
Y2RjOWEzNzI2MTQ4MjEwYWUzZGFkNGIyNzYzN2U1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlZlY3Rvci5o
IgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDsKK3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CisKK2NsYXNz
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAg
IGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6
ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRp
b25OYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdm9pZCBwYXVzZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8p
OworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1l
Ki8pOworCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdm9p
ZCByZXN1bWVBbmltYXRpb25zKCk7CisKKyAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2Yg
YWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQK
KyAgICAvLyBhcmUga2VwdCBpbiBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3du
ZXJzaGlwIG9mIHRoZSBpbXBsIHRocmVhZCBjb250cm9sbGVyLgorICAgIGJvb2wgcHVzaEFuaW1h
dGlvbnNUbyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqLCBkb3VibGUgY3VycmVudFRp
bWVNcyk7CisKKyAgICAvLyBUaGlzIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisgICAg
VmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiYgYWN0aXZlQW5pbWF0aW9ucygpIHsg
cmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uczsgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCkgeyB9CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZl
QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkpOworICAgIHZvaWQgcmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91
cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgVmVjdG9yPE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmNwcAppbmRleCBjYjIxYmI3MzMxNTNmZWEzNmJkODVjZmQ1MTcwNjcwNzVmYzI2ODg4Li44
YWE0ODk3OGE3MTFiZTQxYTIwYWYzOGM3NTIzYzRiMzVjYmJhMzcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTU4LDgg
KzU4LDYgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91
YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKIHsKICAgICBtX2Fj
dGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAg
bV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUodGhpcyk7CiB9CiAK
IENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmdldEFj
dGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCBncm91cCwgQ0NBY3RpdmVB
bmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQpAQCAtMTcyLDkgKzE3MCwxMCBAQCB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlv
bnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisgICAgICAgIGlmIChhbGxBbmlt
c1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgbV9maW5pc2hlZEFuaW1hdGlv
bnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSk7CiAgICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICBlbHNlCisgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgaSsrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggMWFkMjIzZGJhODIzYTJhMDU3YjEw
MmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uYWU3MDRkMDQ3N2ViZDE3NzMxNzhjMWQ1MmMxZDc0NzE0YzE4
ZjZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmgKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKikgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsK
QEAgLTY3LDYgKzY2LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHk+IEFuaW1hdGlvblNpZ25hdHVyZTsK
KwogICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCiAgICAgZXhwbGlj
aXQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCopOwogCkBAIC04MCw2ICs4Miw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3RvcjxP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZlY3Rv
cjxBbmltYXRpb25TaWduYXR1cmU+IG1fZmluaXNoZWRBbmltYXRpb25zOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDY4MzdmMGE1Yzg2
YzU2OGU4OTNiYjViMTA0ZGVmMTY2MjBiMzQ2YzEuLjYwMWFlNTJiMjBhM2I3OGI1NThhNmNiMzY4
MjIwMDI3YTI4YzZkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0N1
c3RvbUxheWVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTYwLDYgKzYxLDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAg
ICAsIG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAw
KQogICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmlu
ZGV4IDAxMzZiMDFmODg4YTExZGFhOTAxZjYzYmU5OTRmMjIyMDRjZTU1NDguLjkxYzAwNGI2YjNi
Zjc0NGNmNDcxNDg0NjdlOTI5MjUyZmJkOGM4MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3Mu
aCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC00MCwxMiArNDEsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3Mg
Q0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworCitjbGFzcyBD
Q0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiwgcHVibGljIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7CiBwdWJsaWM6CisgICAgLy8gVGhlIGxh
eWVyIGRvZXMgbm90IG93biBpdHMgY2xpZW50LCBhbmQgdGhlIGNsaWVudCBpcyBndWFyYW50ZWVk
IHRvIG91dGxpdmUgdGhlIGxheWVyLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xh
eWVySW1wbChpZCkpOwpAQCAtMTAzLDggKzEwNyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9w
YXF1ZShib29sKTsKICAgICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9
CiAKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25z
dCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bh
Y2l0eTsgfQogCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
CkBAIC0xMjEsOCArMTI2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJh
bnNmb3JtOyB9CiAKLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07
IH0KIAogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFt
ZTsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQpA
QCAtMTk1LDggKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hhbmdl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJl
c2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwqIGFuaW1hdGlvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEND
TGF5ZXJJbXBsKGludCk7CisgICAgQ0NMYXllckltcGwoaW50KTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKICAg
ICBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CkBAIC0y
OTksNiArMzA3LDkgQEAgcHJpdmF0ZToKICAgICAvLyBSZWN0IGluZGljYXRpbmcgd2hhdCB3YXMg
cmVwYWludGVkL3VwZGF0ZWQgZHVyaW5nIHVwZGF0ZS4KICAgICAvLyBOb3RlIHRoYXQgcGx1Z2lu
IGxheWVycyBieXBhc3MgdGhpcyBhbmQgbGVhdmUgaXQgZW1wdHkuCiAgICAgRmxvYXRSZWN0IG1f
dXBkYXRlUmVjdDsKKworICAgIC8vIE1hbmFnZXMgYW5pbWF0aW9ucyB0YXJnZXRpbmcgdGhpcyBs
YXllci4KKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBtX2FuaW1h
dGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xh
eWVySW1wbD4gPjo6aXRlcmF0b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46
Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNvcnRlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggODY2M2VjMGFjMmNkZjM2YjI0NzIyODFjZmZhZWExOTQwMjI1YTIzYy4uNWIz
Y2NmN2U4OWEwNGUxMDM0MzY5NDgwODUxYTk3ODhmZmEyYWUzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCkBAIC0xNTAsOSArMTUwLDE0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwp
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIC8vIFN5bmNocm9u
aXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgotICAgIGlmIChyb290TGF5ZXIoKSkK
LSAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKLSAgICBlbHNl
CisgICAgaWYgKHJvb3RMYXllcigpKSB7CisgICAgICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbmV3
Um9vdExheWVyOworICAgICAgICBib29sIGFjdGl2YXRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAg
ICAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0
SW1wbC0+cm9vdExheWVyKCksIGhvc3RJbXBsLT5jdXJyZW50VGltZU1zKCksIG5ld1Jvb3RMYXll
ciwgYWN0aXZhdGVkQW5pbWF0aW9uKTsKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihu
ZXdSb290TGF5ZXIucmVsZWFzZSgpKTsKKyAgICAgICAgaWYgKGFjdGl2YXRlZEFuaW1hdGlvbikK
KyAgICAgICAgICAgIGhvc3RJbXBsLT5zZXRIYXNBY3RpdmVBbmltYXRpb24odHJ1ZSk7CisgICAg
fSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAKICAgICBob3N0SW1w
bC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CkBAIC0zMTIsOSArMzE3LDE1
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5
ZXIoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQotICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKwor
ICAgIGlmIChyb290TGF5ZXIoKSkgeworICAgICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG5ld1Jv
b3RMYXllcjsKKyAgICAgICAgYm9vbCBhY3RpdmF0ZWRBbmltYXRpb24gPSBmYWxzZTsKKyAgICAg
ICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdElt
cGwtPnJvb3RMYXllcigpLCBob3N0SW1wbC0+Y3VycmVudFRpbWVNcygpLCBuZXdSb290TGF5ZXIs
IGFjdGl2YXRlZEFuaW1hdGlvbik7CisgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIobmV3
Um9vdExheWVyLnJlbGVhc2UoKSk7CisgICAgICAgIGlmIChhY3RpdmF0ZWRBbmltYXRpb24pCisg
ICAgICAgICAgICBob3N0SW1wbC0+c2V0SGFzQWN0aXZlQW5pbWF0aW9uKHRydWUpOworICAgIH0g
ZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDAyMTg2Y2FhZjVhODVjYjU2OTNiZGIx
MzVlODBjYmJhZGZjOTkxNmEuLmNkNzUxOTcxODg4NWM3MmU3MTI4Nzg5OThkYjZiMjhlYmM3ODVm
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xMTIsNiAr
MTEyLDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJl
Z2luVGltZU1zKQogICAgICAgICBtX3BhZ2VTY2FsZUFuaW1hdGlvbi5jbGVhcigpOwogICAgICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKICAgICB9CisKKyAgICBh
bmltYXRlTGF5ZXJzKGZyYW1lQmVnaW5UaW1lTXMgLyAxMDAwKTsKIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJn
ZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgZHVy
YXRpb25NcykKQEAgLTI0NCw2ICsyNDYsMjcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpv
cHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgICAgIHBh
c3Nlc1tpXS0+b3B0aW1pemVRdWFkcygpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyIsIHRoaXMsIDApOworICAg
IGlmICghbV9oYXNBY3RpdmVBbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc0Fj
dGl2ZUFuaW1hdGlvbiA9IGZhbHNlOworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHRvUHJvY2Vz
czsKKyAgICB0b1Byb2Nlc3MuYXBwZW5kKG1fcm9vdExheWVySW1wbC5nZXQoKSk7CisgICAgd2hp
bGUgKHRvUHJvY2Vzcy5zaXplKCkpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGN1cnJlbnQgPSB0
b1Byb2Nlc3MubGFzdCgpOworICAgICAgICB0b1Byb2Nlc3MucmVtb3ZlTGFzdCgpOworICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGN1cnJlbnRDb250cm9sbGVyID0gY3Vy
cmVudC0+YW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgICAgICBpZiAoY3VycmVudENvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKSB7CisgICAgICAgICAgICBtX2hhc0FjdGl2ZUFuaW1h
dGlvbiA9IHRydWU7CisgICAgICAgICAgICBjdXJyZW50Q29udHJvbGxlci0+YW5pbWF0ZShmcmFt
ZUJlZ2luVGltZVNlY3MpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHRvUHJvY2Vz
cy5hcHBlbmQoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CisgICAgfQorfQorCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogewogICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZTRkMDA2ZDRmODZlOWMyNmNlNzFjYjdlZTRmYWFh
MWI5NzVmNzQ0YS4uNzJjZGYzMDJiYzk0NWZhMGVmNTVhODcwYTA4ZGM5M2Q0NzRlMTBmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTE5LDYgKzExOSw5IEBAIHB1
YmxpYzoKIAogICAgIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gcHJvY2Vzc1Njcm9s
bERlbHRhcygpOwogCisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2hhc0FjdGl2ZUFuaW1hdGlvbjsgfQorICAgIHZvaWQgc2V0SGFzQWN0aXZlQW5pbWF0aW9u
KGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKSB7IG1faGFzQWN0aXZlQW5pbWF0aW9uID0gaGFzQWN0
aXZlQW5pbWF0aW9uOyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNv
bnN0IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAgICAgQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7CkBAIC0xMzUsNiArMTM4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3RE
cmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAg
ICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAgICAgdm9p
ZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CisgICAgdm9pZCBhbmlt
YXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOwogCiAgICAgT3duUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gbV9yb290TGF5ZXJJbXBsOwpAQCAtMTUwLDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNjYWxlOwogCiAgICAgYm9vbCBtX3BpbmNoR2Vz
dHVyZUFjdGl2ZTsKKyAgICBib29sIG1faGFzQWN0aXZlQW5pbWF0aW9uOwogCiAgICAgT3duUHRy
PENDUGFnZVNjYWxlQW5pbWF0aW9uPiBtX3BhZ2VTY2FsZUFuaW1hdGlvbjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApp
bmRleCBjYTgzODQ2YzIyYzZmMzZjODY5OTkyYWQyOTIzZGRkN2YzMTQwYzA5Li4zMzAzYjEzYWI3
OTJlMzNkNmY4MWJmMjg0YjUwNzhiNzdjZTQ2ZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjcsNiArMjcs
OCBAQAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5oIgpAQCAtOTEsNiArOTMsMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8aW50PiogbV9j
Y0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwogfTsKIAorY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9uIDog
cHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBkb3Vi
bGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBmbG9hdCBnZXRW
YWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9Cit9OworCiB2b2lkIGV4cGVjdFRy
ZWVzQXJlSWRlbnRpY2FsKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbCogY2NMYXll
cikKIHsKICAgICBBU1NFUlRfVFJVRShsYXllcik7CkBAIC0xMjMsNyArMTMxLDkgQEAgVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCiAgICAgbGF5ZXJU
cmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKICAgICBsYXllclRy
ZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwogCi0gICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gY2NMYXllclRyZWVSb290OworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBmYWxzZTsKKyAg
ICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IDAsIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRBbmltYXRpb24pOwogCiAgICAgZXhwZWN0VHJl
ZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgp
KTsKIH0KQEAgLTEzOCw3ICsxNDgsOSBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5j
U2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTW9j
a0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOwogICAgIGxh
eWVyVHJlZVJvb3QtPmFkZENoaWxkKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJE
ZXN0cnVjdGlvbkxpc3QpKTsKIAotICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVS
b290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290Lmdl
dCgpLCAwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdDsKKyAgICBi
b29sIGFkZGVkQW5pbWF0aW9uID0gZmFsc2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFk
ZGVkQW5pbWF0aW9uKTsKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAgICAgLy8gQWRkIGEgbmV3IGxheWVy
IHRvIHRoZSBMYXllckNocm9taXVtIHNpZGUKQEAgLTE0OCw3ICsxNjAsOCBAQCBURVNUKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiAgICAgaW50IHNl
Y29uZENDTGF5ZXJJZCA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+aWQoKTsKIAog
ICAgIC8vIFN5bmNocm9uaXplIGFnYWluLiBBZnRlciB0aGUgc3luYyB0aGUgdHJlZXMgc2hvdWxk
IGJlIGVxdWl2YWxlbnQgYW5kIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBv
bmUgQ0NMYXllckltcGwuCi0gICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QucmVs
ZWFzZSgpKTsKKyAgICBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290
LnJlbGVhc2UoKSwgMCwgY2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhw
ZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290
LmdldCgpKTsKIAogICAgIEFTU0VSVF9FUSgxdSwgY2NMYXllckRlc3RydWN0aW9uTGlzdC5zaXpl
KCkpOwpAQCAtMTcyLDcgKzE4NSwxMCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5j
U2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCiAgICAgSW50U2l6ZSBzZWNvbmRDaGlsZEJvdW5kcyA9
IEludFNpemUoMjUsIDUzKTsKICAgICBsYXllclRyZWVSb290LT5jaGlsZHJlbigpWzFdLT5zZXRC
b3VuZHMoc2Vjb25kQ2hpbGRCb3VuZHMpOwogCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xh
eWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIDApOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290
OworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBmYWxzZTsKKyAgICBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDAsIDAsIGNjTGF5ZXJUcmVl
Um9vdCwgYWRkZWRBbmltYXRpb24pOworCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAgIC8vIENoZWNr
IHRoYXQgdGhlIHByb3BlcnR5IHZhbHVlcyB3ZSBzZXQgb24gdGhlIExheWVyQ2hyb21pdW0gdHJl
ZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBDQ0xheWVySW1wbCB0cmVlLgpAQCAtMjA5LDcgKzIyNSw5
IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVy
YWxDaGFuZ2UpCiAgICAgbGF5ZXJCLT5hZGRDaGlsZChNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxh
eWVyRCA9IGxheWVyQi0+Y2hpbGRyZW4oKVsxXS5nZXQoKTsKIAotICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5
ZXJUcmVlUm9vdDsKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gZmFsc2U7CisgICAgVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwLCAwLCBj
Y0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0aW9uKTsKICAgICBleHBlY3RUcmVlc0FyZUlkZW50
aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAgICAg
Ly8gTm93IHJlc3RydWN0dXJlIHRoZSB0cmVlIHRvIGxvb2sgbGlrZSB0aGlzOgpAQCAtMjI3LDcg
KzI0NSw4IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0
cnVjdHVyYWxDaGFuZ2UpCiAgICAgbGF5ZXJDLT5hZGRDaGlsZChsYXllckIpOwogCiAgICAgLy8g
QWZ0ZXIgYW5vdGhlciBzeW5jaHJvbml6ZSBvdXIgdHJlZXMgc2hvdWxkIG1hdGNoIGFuZCB3ZSBz
aG91bGQgbm90IGhhdmUgZGVzdHJveWVkIGFueSBDQ0xheWVySW1wbHMKLSAgICBjY0xheWVyVHJl
ZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3Qu
Z2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5yZWxlYXNlKCkpOworICAgIGFkZGVkQW5pbWF0aW9uID0g
ZmFsc2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVS
b290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QucmVsZWFzZSgpLCAwLCBjY0xheWVyVHJlZVJvb3Qs
IGFkZGVkQW5pbWF0aW9uKTsKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVS
b290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAgICAgRVhQRUNUX0VRKDB1LCBj
Y0xheWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7CkBAIC0yNDcsNyArMjY2LDkgQEAgVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKICAgICBpbnQg
b2xkVHJlZUZpcnN0Q2hpbGRMYXllcklkID0gb2xkTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsw
XS0+aWQoKTsKICAgICBpbnQgb2xkVHJlZVNlY29uZENoaWxkTGF5ZXJJZCA9IG9sZExheWVyVHJl
ZVJvb3QtPmNoaWxkcmVuKClbMV0tPmlkKCk7CiAKLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNj
TGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMob2xkTGF5
ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJl
ZVJvb3Q7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMob2xkTGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwgMCwgY2NM
YXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGlj
YWwob2xkTGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAg
IC8vIFJlbW92ZSBhbGwgY2hpbGRyZW4gb24gdGhlIExheWVyQ2hyb21pdW0gc2lkZS4KQEAgLTI1
NSw3ICsyNzYsOCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRo
ZW5EZXN0cm95KQogCiAgICAgLy8gU3luY2hyb25pemUgYWdhaW4uIEFmdGVyIHRoZSBzeW5jIGFs
bCBDQ0xheWVySW1wbHMgZnJvbSB0aGUgb2xkIHRyZWUgc2hvdWxkIGJlIGRlbGV0ZWQuCiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld0xheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7Ci0gICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhuZXdMYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QucmVsZWFz
ZSgpKTsKKyAgICBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobmV3TGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290
LnJlbGVhc2UoKSwgMCwgY2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhw
ZWN0VHJlZXNBcmVJZGVudGljYWwobmV3TGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKIAogICAgIEFTU0VSVF9FUSgzdSwgY2NMYXllckRlc3RydWN0aW9uTGlzdC5z
aXplKCkpOwpAQCAtMjg3LDI1ICszMDksODYgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwg
c3luY01hc2tSZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCiAgICAgcmVwbGljYUxheWVyV2l0
aE1hc2stPnNldE1hc2tMYXllcihyZXBsaWNhTWFza0xheWVyLmdldCgpKTsKICAgICBsYXllclRy
ZWVSb290LT5jaGlsZHJlbigpWzJdLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyV2l0aE1h
c2suZ2V0KCkpOwogCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBU
cmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDAp
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290OworICAgIGJvb2wgYWRk
ZWRBbmltYXRpb24gPSBmYWxzZTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRy
ZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDAsIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRBbmlt
YXRpb24pOwogCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAgIC8vIFJlbW92ZSB0aGUgbWFzayBsYXll
ci4KICAgICBsYXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLT5zZXRNYXNrTGF5ZXIoMCk7Ci0g
ICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhs
YXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworICAgIFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRy
ZWVSb290LmdldCgpLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0aW9uKTsKICAgICBl
eHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJv
b3QuZ2V0KCkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSByZXBsaWNhIGxheWVyLgogICAgIGxheWVy
VHJlZVJvb3QtPmNoaWxkcmVuKClbMV0tPnNldFJlcGxpY2FMYXllcigwKTsKLSAgICBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisgICAgVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0
KCksIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRBbmltYXRpb24pOwogICAgIGV4cGVjdFRyZWVz
QXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7
CiAKICAgICAvLyBSZW1vdmUgdGhlIHJlcGxpY2EgbWFzay4KICAgICByZXBsaWNhTGF5ZXJXaXRo
TWFzay0+c2V0TWFza0xheWVyKDApOwotICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwgY2NMYXllclRyZWVSb290
LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVl
Um9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIH0KIAorVEVTVChUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY0FuaW1hdGlvbnMpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisKKyAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4K
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdDsKKyAgICBib29sIGFkZGVk
QW5pbWF0aW9uID0gZmFsc2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0
aW9uKTsKKworICAgIEVYUEVDVF9GQUxTRShhZGRlZEFuaW1hdGlvbik7CisKKyAgICAvLyBBZGQg
YW5pbWF0aW9uIHRvIG1haW4gdGhyZWFkIGNvbnRyb2xsZXIuCisgICAgbGF5ZXJUcmVlUm9vdC0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbigpKSwgMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBhZGRlZEFuaW1hdGlvbiA9IGZhbHNl
OworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5p
bWF0aW9uKTsKKworICAgIEVYUEVDVF9UUlVFKGFkZGVkQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1Rf
VFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJl
ZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisKKyAgICAvLyBQdXNoIGFuIGFu
aW1hdGlvbiBwcm9wZXJ0eSBjaGFuZ2UgdG8gdGhlIGltcGwgdGhyZWFkIChzaG91bGQgbm90IGNh
dXNlIGFuIGFuaW1hdGlvbiB0byBiZSBhZGRlZCkuCisgICAgbGF5ZXJUcmVlUm9vdC0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLT5hY3RpdmVBbmltYXRpb25zKClbMF0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDApOworICAgIGFkZGVkQW5pbWF0aW9uID0gZmFsc2U7Cisg
ICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgp
LCBjY0xheWVyVHJlZVJvb3QuZ2V0KCksIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRBbmltYXRp
b24pOworCisgICAgRVhQRUNUX0ZBTFNFKGFkZGVkQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfRVEo
Q0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250
cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgorICAgIGxheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWN0
aXZlQW5pbWF0aW9ucygpLmNsZWFyKCk7CisgICAgYWRkZWRBbmltYXRpb24gPSBmYWxzZTsKKyAg
ICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwgY2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlv
bik7CisKKyAgICBFWFBFQ1RfRkFMU0UoYWRkZWRBbmltYXRpb24pOworICAgIEVYUEVDVF9GQUxT
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICAvLyBBZGQgYW5vdGhl
ciBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQgY29udHJvbGxlci4KKyAgICBsYXllclRyZWVSb290
LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uKCkpLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGFkZGVkQW5pbWF0aW9uID0gZmFs
c2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCksIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRB
bmltYXRpb24pOworCisgICAgRVhQRUNUX1RSVUUoYWRkZWRBbmltYXRpb24pOworICAgIEVYUEVD
VF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEo
Q0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJU
cmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFN0ZXAgdGhy
b3VnaCB0aGUgYW5pbWF0aW9uIHVudGlsIGl0IGlzIGZpbmlzaGVkLiBBdCB0aGUgbmV4dCBzeW5j
LCB0aGUgbWFpbiB0aHJlYWQncyBhbmltYXRpb24gc2hvdWxkIGJlIGNsZWFyZWQuCisgICAgY2NM
YXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUoMCk7CisgICAgY2NM
YXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUoMik7CisKKyAgICBF
WFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVD
VF9FUShzaXplX3QoMSksIGxheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWN0
aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisKKyAgICBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOwor
ICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0
aW9uKTsKKworICAgIEVYUEVDVF9GQUxTRShhZGRlZEFuaW1hdGlvbik7CisgICAgRVhQRUNUX0VR
KHNpemVfdCgwKSwgbGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hY3RpdmVB
bmltYXRpb25zKCkuc2l6ZSgpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122696</attachid>
            <date>2012-01-16 17:08:45 -0800</date>
            <delta_ts>2012-01-24 18:43:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120116200844.patch</filename>
            <type>text/plain</type>
            <size>51652</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTc4OTc1ZmYyMDU2ZmM4
ZjBhMjY2ODRlMjg4ZjhmY2M1MzdkMjU5YS4uZmRhNWY3ZTVhY2NiOGRlZDhiMDFhYjhjODE3Njlj
NjE5YzMwMDU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTAxLTE2ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSGFu
ZGxlIENTUyBhbmltYXRpb25zIG9uIENDVGhyZWFkIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODc0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEp
CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVz
M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1
bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OmFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFu
aW1hdGlvbnNUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphY3RpdmVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRIYXNBY3RpdmVBbmltYXRp
b24pOgorCiAyMDEyLTAxLTE2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0u
Y29tPgogCiAgICAgICAgIExhcmdlIFNWRyB0ZXh0IGxheW91dCBwZXJmb3JtYW5jZSByZWdyZXNz
aW9uIGluIHI4MTE2OApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNmNmNGZkZDgwMTlk
YjZlMTZhNDAzYzNkNjdiMzQzNzkwZTA2OGIyLi42ODMyMGU3N2MzNGNjMDU3ZmJkYzgyZWY3MTM1
YmMwZGQ5ZDIxY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDEyLTAxLTE2ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtjaHJvbWl1bV0gSGFuZGxlIENTUyBhbmltYXRpb25zIG9uIENDVGhyZWFkIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1
ODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0
ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGYWtlRmxv
YXRBbmltYXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VGbG9hdEFuaW1h
dGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDEtMTYg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDUwNDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWFmZTI3
MGE2YjQ2MTI5ZjBiNjY5NzZjYTQ0ZWVlNGE3Yzk2ZGVkNy4uNWYyNDdhYTkyOTg0ODFiNWQwYTAy
MTJiYjg5ZDJlNDZjZDg2NjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYyOCw2ICszNjI4LDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjdlMDVmOGRjZTRh
ZmNiMGU4MjI1YzkyY2ZlNTQ0ZDMzMTFkMDk5YS4uMmUxOTIxZjk3NmZmMTM3ODlkZWM4ODY2YWJh
M2I2YzYzMTFjMDBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC0xMjgsNyArMTI4LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVu
KGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQogdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCiB7CiAgICAg
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0gICAgaWYgKCFtX2luU2V0Q2hp
bGRyZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAgICAgICB1cGRhdGVDaGlsZExp
c3QoKTsKIH0KIApAQCAtMzc0LDYgKzM3NCwzMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAg
ICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRT
aXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9sYXllci0+
YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0
aW1lT2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7Cisg
ICAgbV9sYXllci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmlt
YXRpb25OYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmlt
YXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRp
bWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygp
Cit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCiB2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQog
ewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC0zODksMTIgKzQxNCwxMiBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIp
IHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7Ci0gIAorCiAgICAgICAgICAg
ICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlQ2hp
bGRMaXN0LgogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKICAgICAgICAgfQogICAg
IH0KLSAgCisKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQogICAgICAgICB1cGRhdGVDaGlsZExp
c3QoKTsKIH0KQEAgLTU0Myw3ICs1NjgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAgICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0
aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4K
ICAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eSgxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAppbmRleCBkZmExMDlkM2UwMzllNzBhNmQ1ZmRlODdlYWY3NjgxNDMwMTNhYmI3
Li5hMTVjOTJkNTgzMWVkYWRjNjM0YTIzOWMyMjZjNzMyZjdlOTA5NTMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTEsNiArOTEsMTMgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAorICAgIHZpcnR1
YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRT
aXplJiAvKmJveFNpemUqLywgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiAvKmFuaW1h
dGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGlt
ZU9mZnNldCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgLyphbmltYXRpb25OYW1lKi8pOworCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwor
CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMmRmMDViNTljYjg1YWQ3YzA4NzAxOGNjMjU2ZWUxNzQw
OTRiOWJkNS4uYjUwNmYyYTVhNTNkMTFiZGQxNGJlMjAxY2VhOGExOWEwZjlhOTdjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTks
NiArNjAsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSog
ZGVsZWdhdGUpCiAgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChz
X25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9hbmltYXRpb25Db250
cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSkKICAgICAsIG1fc2Ny
b2xsYWJsZShmYWxzZSkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2Jh
Y2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQpAQCAtMTA3LDYgKzEwOSwzMSBAQCB2b2lkIExheWVy
Q2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXNSZWN1cnNpdmUoKQogICAgIGNsZWFudXBSZXNvdXJj
ZXMoKTsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVP
ZmZzZXQpCit7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9u
KHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsK
K30KKwordm9pZCBMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fYW5pbWF0aW9uQ29udHJv
bGxlci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmlt
YXRpb25OYW1lKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhk
b3VibGUgdGltZSkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRp
b25zKHRpbWUpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQor
eworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCiB2
b2lkIExheWVyQ2hyb21pdW06OnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNv
bXBvc2l0ZWRDb250ZW50KQogewogICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9IGlzTm9u
Q29tcG9zaXRlZENvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggODk4NDVhNTE4ZWM3NGRj
ZjQ0NTRmYTlkZWNkMTA1YTBkMzY4OTI4Ny4uOGYwZjM0MWE1YTdlM2VmZTc0ZWMyNWYyNWNkMDhk
Mjg1NzAzYTVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTEsNiArNTEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xh
c3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVV
cGRhdGVyOwpAQCAtMjAzLDYgKzIwNCwxNSBAQCBwdWJsaWM6CiAgICAgQ0NMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0LmdldCgpOyB9
CiAgICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzUmVjdXJzaXZlKCk7CiAKKyAgICBib29sIGFkZEFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIC8qYm94U2l6
ZSovLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBk
b3VibGUgLyp0aW1lT2Zmc2V0Ki8pOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKTsKKyAgICB2b2lk
IHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKTsKKworICAg
IHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5p
bWF0aW9ucygpOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0K
KwogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJEZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKICAgICBleHBs
aWNpdCBMYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwpAQCAtMjUwLDYgKzI2MCw4IEBA
IHByaXZhdGU6CiAKICAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7
CiAKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsKKwogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5k
czsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXpl
ci5jcHAKaW5kZXggZDBmZDBjZTUyM2Q2Mzg4NGJlOTMyZTFiZDQxNjU4MmYyNTc2MmU0MC4uM2Ix
ZmViZDk1YzNmN2IzOWI4ZDQ3M2RhYWVmNWE0NWM5ZWNjZjY5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNo
cm9uaXplci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVy
LmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDgsNyArNDksNyBAQCB2b2lkIFRyZWVTeW5jaHJvbml6
ZXI6OmFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIEND
TGF5ZQogICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIHJlcGxpY2FM
YXllcik7CiB9CiAKLVBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGxN
YXAmIG1hcCkKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgZG91YmxlIGN1cnJlbnRU
aW1lTXMsIENDTGF5ZXJJbXBsTWFwJiBtYXAsIGJvb2wmIGFjdGl2YXRlZEFuaW1hdGlvbikKIHsK
ICAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsOwogICAgIENDTGF5ZXJJbXBsTWFw
OjppdGVyYXRvciBpdCA9IG1hcC5maW5kKGxheWVyLT5pZCgpKTsKQEAgLTYyLDIzICs2MywyNiBA
QCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRy
ZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bQogCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGlsZHJlbigpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIGNjTGF5ZXJJbXBs
LT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoY2hpbGRyZW5baV0uZ2V0KCksIG1h
cCkpOworICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25pemVUcmVlUmVjdXJz
aXZlKGNoaWxkcmVuW2ldLmdldCgpLCBjdXJyZW50VGltZU1zLCBtYXAsIGFjdGl2YXRlZEFuaW1h
dGlvbikpOwogCiAgICAgaWYgKExheWVyQ2hyb21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNr
TGF5ZXIoKSkKLSAgICAgICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6ZVRy
ZWVSZWN1cnNpdmUobWFza0xheWVyLCBtYXApKTsKKyAgICAgICAgY2NMYXllckltcGwtPnNldE1h
c2tMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFza0xheWVyLCBjdXJyZW50VGltZU1z
LCBtYXAsIGFjdGl2YXRlZEFuaW1hdGlvbikpOwogICAgIGVsc2UKICAgICAgICAgY2NMYXllcklt
cGwtPnNldE1hc2tMYXllcigwKTsKIAogICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5
ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBs
aWNhTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKHJlcGxpY2FMYXllciwgbWFwKSk7Cisg
ICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJz
aXZlKHJlcGxpY2FMYXllciwgY3VycmVudFRpbWVNcywgbWFwLCBhY3RpdmF0ZWRBbmltYXRpb24p
KTsKICAgICBlbHNlCiAgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoMCk7CiAK
KyAgICBpZiAobGF5ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cHVzaEFuaW1hdGlvbnNUbyhj
Y0xheWVySW1wbC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLCBjdXJyZW50VGltZU1zKSkKKyAgICAg
ICAgYWN0aXZhdGVkQW5pbWF0aW9uID0gdHJ1ZTsKKwogICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAgICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBwcnBPbGRDQ0xheWVySW1wbFJvb3QpCit2b2lkIFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IHBycE9sZENDTGF5ZXJJbXBsUm9vdCwgZG91YmxlIGZyYW1lQmVn
aW5UaW1lU2VjcywgUmVmUHRyPENDTGF5ZXJJbXBsPiYgbmV3Q0NMYXllckltcGxSb290LCBib29s
JiBhY3RpdmF0ZWRBbmltYXRpb24pCiB7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xh
eWVySW1wbFJvb3QgPSBwcnBPbGRDQ0xheWVySW1wbFJvb3Q7CiAgICAgLy8gQnVpbGQgYSBtYXAg
ZnJvbSBsYXllciBJRHMgdG8gQ0NMYXllckltcGxzIHNvIHdlIGNhbiByZXVzZSBsYXllcnMgZnJv
bSB0aGUgb2xkIHRyZWUuCkBAIC04Nyw5ICs5MSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJD
CiAgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgb2xkQ0NMYXllcklt
cGxSb290LmdldCgpKTsKIAogICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSBuZXcgbGF5ZXIg
dHJlZS4KLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5bmNo
cm9uaXplVHJlZVJlY3Vyc2l2ZShsYXllckNocm9taXVtUm9vdCwgbWFwKTsKLQotICAgIHJldHVy
biBuZXdDQ0xheWVySW1wbFJvb3QucmVsZWFzZSgpOworICAgIGFjdGl2YXRlZEFuaW1hdGlvbiA9
IGZhbHNlOworICAgIG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2
ZShsYXllckNocm9taXVtUm9vdCwgZnJhbWVCZWdpblRpbWVTZWNzLCBtYXAsIGFjdGl2YXRlZEFu
aW1hdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6
ZXIuaAppbmRleCBhNGU0OTQyMTczOTVlOGQyZTEyOTZiZDY1NjY2MmUzMmIxMTlhY2ZmLi4zYWJl
NzZlMDc4YWQyNDYxMjAxYzU2YmI3ZWVkMDEwMjJiMTE5OWJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9u
aXplci5oCkBAIC00MCw3ICs0MCw3IEBAIFdURl9NQUtFX05PTkNPUFlBQkxFKFRyZWVTeW5jaHJv
bml6ZXIpOwogcHVibGljOgogICAgIC8vIEFjY2VwdHMgYSBMYXllckNocm9taXVtIHRyZWUgYW5k
IHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBDQ0xheWVySW1wbCB0cmVlIHRoYXQgZHVwbGljYXRl
cyB0aGUgc3RydWN0dXJlCiAgICAgLy8gb2YgdGhlIExheWVyQ2hyb21pdW0gdHJlZSwgcmV1c2lu
ZyB0aGUgQ0NMYXllckltcGxzIGluIHRoZSB0cmVlIHByb3ZpZGVkIGJ5IG9sZENDTGF5ZXJJbXBs
Um9vdCBpZiBwb3NzaWJsZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gc3lu
Y2hyb25pemVUcmVlcyhMYXllckNocm9taXVtKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IG9sZENDTGF5ZXJJbXBsUm9vdCk7CisgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVU
cmVlcyhMYXllckNocm9taXVtKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9s
ZENDTGF5ZXJJbXBsUm9vdCwgZG91YmxlIGN1cnJlbnRUaW1lTXMsIFJlZlB0cjxDQ0xheWVySW1w
bD4mIG5ld0NDTGF5ZXJJbXBsUm9vdCwgYm9vbCYgYWN0aXZhdGVkQW5pbWF0aW9uKTsKIAogcHJp
dmF0ZToKICAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFibGUuCkBAIC00
OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVtYmVy
IGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBhY2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21pdW0g
YXMgYSBmcmllbmQgY2xhc3MuCiAgICAgc3RhdGljIHZvaWQgYWRkQ0NMYXllckltcGxzVG9NYXBS
ZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmLCBDQ0xheWVySW1wbCopOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1
bSosIENDTGF5ZXJJbXBsTWFwJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiwgZG91YmxlIGN1cnJlbnRU
aW1lTXMsIENDTGF5ZXJJbXBsTWFwJiwgYm9vbCYgYWN0aXZhdGVkQW5pbWF0aW9uKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNw
cAppbmRleCAyMWU2Y2M3YTllMjQ2ZWMwYmVmYWFhMDU4NGY2ZDIyMWM0NDYyMGVhLi4yMjUyMmM5
MTI2MDViNzkxMzAwY2U5MzAzMGI1MTUxNTEwZDdkNGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uY3BwCkBAIC05NSw0ICs5NSwyMiBAQCBkb3VibGUgQ0NBY3RpdmVBbmltYXRp
b246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0CiAgICAgcmV0
dXJuIGZtb2QodHJpbW1lZCwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSk7CiB9CiAKK1Bh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvcklt
cGxUaHJlYWQoKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oYWRv
cHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUucmVsZWFzZSgpLCBt
X2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOworICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0g
bV9ydW5TdGF0ZTsKKyAgICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOwor
ICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAgIHRvUmV0dXJuLT5t
X3BhdXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAgIHRvUmV0dXJuLT5tX3RvdGFsUGF1c2VkVGlt
ZSA9IG1fdG90YWxQYXVzZWRUaW1lOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnB1c2hQcm9wZXJ0aWVzVG8oQ0NBY3RpdmVBbmlt
YXRpb24qIG90aGVyLCBkb3VibGUgY3VycmVudFRpbWVTZWNzKSBjb25zdAoreworICAgIG90aGVy
LT5zZXRSdW5TdGF0ZShtX3J1blN0YXRlLCBjdXJyZW50VGltZVNlY3MpOworICAgIG90aGVyLT5z
ZXRJdGVyYXRpb25zKG1faXRlcmF0aW9ucyk7CisgICAgb3RoZXItPnNldFN0YXJ0VGltZShtX3N0
YXJ0VGltZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2VkMTJkNjU4ZDc2ZDYwNGVlZTlmYmFkMGEz
ZDEuLjc3ZWY3YzI4NTE3YmQ4YzlhMjY1OTJhZWY4Y2RhNTEyMzk3NDhmNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5p
bWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMTAwLDYgKzEwMCwxMSBAQCBwdWJsaWM6CiAgICAg
Ly8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVu
dCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJs
ZSBub3cpIGNvbnN0OwogCisgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVG
b3JJbXBsVGhyZWFkKCk7CisKKyAgICAvLyBEb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUg
Z2l2ZW4gYWN0aXZlIGFuaW1hdGlvbi4KKyAgICB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NBY3Rp
dmVBbmltYXRpb24qLCBkb3VibGUgY3VycmVudFRpbWVTZWNzKSBjb25zdDsKKwogcHJpdmF0ZToK
ICAgICBDQ0FjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBHcm91
cElELCBUYXJnZXRQcm9wZXJ0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NWViOTZhZDQ1ODFiMDA5NjAzNmNmOTRl
NTRkMTU3YzA1ZWI5OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBA
IC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRlICJjYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZU9mZnNldCkKK3sKKyAgICAvLyBGSVhNRToKKyAgICAvLyAoMSkgRHVtcCB2YWx1ZXMgYW5k
IGVuc3VyZSB0aGF0IHdlIHVuZGVyc3RhbmQgZXZlcnl0aGluZyB0aGF0IHdlJ3JlIHBhc3NlZCBv
biBwYWdlcyB3aXRoIGNzcyBhbmltYXRpb25zLgorICAgIC8vICgyKSBSZXBsYWNlIHRyYW5zZm9y
bXMgaW4gdGhlIGtleWZyYW1lIHZhbHVlIGxpc3QgdGhhdCBhcmUgaW4gdGVybXMgb2YgcGVyY2Vu
dGFnZXMuCisgICAgLy8gKDMpIENyZWF0ZSBhIG1hcHBpbmcgZnJvbSB0aGUgYW5pbWF0aW9uIG5h
bWUgdG8gdGhlIGFjdHVhbCBhbmltYXRpb24gKHByb2JhYmx5IGEgZ3JvdXBpZC9wcm9wZXJ0eSBw
YWlyKS4KKyAgICAvLyAoNCkgQWN0dWFsbHkgY3JlYXRlIHRoZSBhbmltYXRpb25zIGFuZCBhZGQg
dGhlbSB0byB0aGUgbGlzdC4KKyAgICAvLyAoNSkgUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAg
IC8vIEZJWE1FOiBhZGQgbG9nZ2luZy4KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAg
ICAvLyBGSVhNRTogYWRkIGxvZ2dpbmcuCit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIC8vIEZJWE1FOiBh
ZGQgbG9nZ2luZy4KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1l
QW5pbWF0aW9ucygpCit7CisgICAgLy8gRklYTUU6IGFkZCBsb2dnaW5nLgorfQorCisvLyBFbnN1
cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFk
IGFuZCB0aGUgaW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5bmMuIFRoaXMgZnVuY3Rpb24g
ZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGltcGwgdGhyZWFkIGNvbnRyb2xsZXIuCiti
b29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uc1RvKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlciwgZG91YmxlIGN1cnJlbnRUaW1lTXMp
Cit7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworCisgICAgc2l6ZV90IGkgPSAw
OworICAgIGZvciAoaSA9IDA7IGkgPCBjb250cm9sbGVyLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5z
aXplKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXItPm1fZmluaXNoZWRBbmltYXRp
b25zW2ldLmZpcnN0LCBjb250cm9sbGVyLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS5zZWNvbmQp
OworCisgICAgY29udHJvbGxlci0+bV9maW5pc2hlZEFuaW1hdGlvbnMuY2xlYXIoKTsKKworICAg
IGZvciAoaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKCFjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKSB7
CisgICAgICAgICAgICBjb250cm9sbGVyLT5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ldLT5jbG9u
ZUZvckltcGxUaHJlYWQoKSk7CisgICAgICAgICAgICBhZGRlZEFuaW1hdGlvbiA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFYWNoIGl0ZXJhdGlvbiwgY29udHJvbGxlci0+bV9h
Y3RpdmVBbmltYXRpb25zLnNpemUoKSBpcyBkZWNyZW1lbnRlZCBvciBpIGlzIGluY3JlbWVudGVk
CisgICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4K
KyAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KTspIHsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmlt
YXRpb24oY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBjb250cm9s
bGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBp
ZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMu
cmVtb3ZlKGkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPnB1c2hQcm9w
ZXJ0aWVzVG8oY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpLCBjdXJyZW50
VGltZU1zIC8gMTAwMCk7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9u
OjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3Vw
KCkgPT0gZ3JvdXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09
IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpIHsKKyAgICAg
ICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4Mzkz
MGUxY2RjOWEzNzI2MTQ4MjEwYWUzZGFkNGIyNzYzN2U1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlZlY3Rv
ci5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDsKK3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CisKK2Ns
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKwor
ICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50
U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmlt
YXRpb25OYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdm9pZCBwYXVzZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0
Ki8pOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25O
YW1lKi8pOworCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAg
dm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKKyAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qg
b2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJl
YWQKKyAgICAvLyBhcmUga2VwdCBpbiBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ug
b3duZXJzaGlwIG9mIHRoZSBpbXBsIHRocmVhZCBjb250cm9sbGVyLgorICAgIGJvb2wgcHVzaEFu
aW1hdGlvbnNUbyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqLCBkb3VibGUgY3VycmVu
dFRpbWVNcyk7CisKKyAgICAvLyBUaGlzIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisg
ICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiYgYWN0aXZlQW5pbWF0aW9ucygp
IHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uczsgfQorCitwcml2YXRlOgorICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCkgeyB9CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0
aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkpOworICAgIHZvaWQgcmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpH
cm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgVmVjdG9y
PE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmNwcAppbmRleCBjYjIxYmI3MzMxNTNmZWEzNmJkODVjZmQ1MTcwNjcwNzVmYzI2ODg4
Li44YWE0ODk3OGE3MTFiZTQxYTIwYWYzOGM3NTIzYzRiMzVjYmJhMzcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTU4
LDggKzU4LDYgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKIHsKICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAg
ICAgbV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUodGhpcyk7CiB9
CiAKIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omdl
dEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCBncm91cCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQpAQCAtMTcyLDkgKzE3MCwxMCBA
QCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1h
dGlvbnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisgICAgICAgIGlmIChhbGxB
bmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgbV9maW5pc2hlZEFuaW1h
dGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAo
KSwgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKSk7CiAgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICBlbHNlCisgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgaSsrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggMWFkMjIzZGJhODIzYTJhMDU3
YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uYWU3MDRkMDQ3N2ViZDE3NzMxNzhjMWQ1MmMxZDc0NzE0
YzE4ZjZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKikgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
IHsKQEAgLTY3LDYgKzY2LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9u
KCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPENDQWN0aXZlQW5pbWF0aW9uOjpHcm91
cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHk+IEFuaW1hdGlvblNpZ25hdHVy
ZTsKKwogICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCiAgICAgZXhw
bGljaXQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCopOwogCkBAIC04MCw2ICs4Miw3IEBAIHByaXZhdGU6CiAKICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3Rv
cjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZl
Y3RvcjxBbmltYXRpb25TaWduYXR1cmU+IG1fZmluaXNoZWRBbmltYXRpb25zOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDY4MzdmMGE1
Yzg2YzU2OGU4OTNiYjViMTA0ZGVmMTY2MjBiMzQ2YzEuLjYwMWFlNTJiMjBhM2I3OGI1NThhNmNi
MzY4MjIwMDI3YTI4YzZkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9D
Q0N1c3RvbUxheWVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1
YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkK
ICAgICAsIG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAw
LCAwKQogICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRy
b2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IDAxMzZiMDFmODg4YTExZGFhOTAxZjYzYmU5OTRmMjIyMDRjZTU1NDguLjU4MjVlNzMz
Mjg5ZjlmMTFmZDYwN2UzNmRmYzlhODNiN2I3MzA2NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBh
c3MuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CkBAIC00MCwxMiArNDEsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwog
Y2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xh
c3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworCitjbGFz
cyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiwgcHVibGljIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7CiBwdWJsaWM6CisgICAgLy8gVGhl
IGxheWVyIGRvZXMgbm90IG93biBpdHMgY2xpZW50LCBhbmQgdGhlIGNsaWVudCBpcyBndWFyYW50
ZWVkIHRvIG91dGxpdmUgdGhlIGxheWVyLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q0xheWVySW1wbChpZCkpOwpAQCAtMTAzLDggKzEwNyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dE9wYXF1ZShib29sKTsKICAgICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVl
OyB9CiAKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwotICAgIGZsb2F0IG9wYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNp
dHkoZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhY2l0eTsgfQogCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
OyB9CkBAIC0xMjEsOCArMTI2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVy
VHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm07IH0KIAogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0g
bmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQpAQCAtMTk1LDYgKzIwMSw4IEBAIHB1YmxpYzoKICAgICBib29sIGxheWVyUHJvcGVydHlDaGFu
Z2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb3BlcnR5Q2hhbmdlZDsgfQogICAgIHZvaWQg
cmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAorICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCogYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
Q0NMYXllckltcGwoaW50KTsKIApAQCAtMjk5LDYgKzMwNyw5IEBAIHByaXZhdGU6CiAgICAgLy8g
UmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmluZyB1cGRhdGUu
CiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0
IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisKKyAgICAvLyBNYW5hZ2VzIGFu
aW1hdGlvbnMgdGFyZ2V0aW5nIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gbV9hbmltYXRpb25Db250cm9sbGVyOwogfTsKIAogdm9pZCBzb3J0
TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0
b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0ZXIqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDg2NjNlYzBhYzJjZGYzNmIyNDcy
MjgxY2ZmYWVhMTk0MDIyNWEyM2MuLjViM2NjZjdlODlhMDRlMTAzNDM2OTQ4MDg1MWE5Nzg4ZmZh
MmFlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTUwLDkgKzE1MCwx
NCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5
ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwu
Li4KLSAgICBpZiAocm9vdExheWVyKCkpCi0gICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIo
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwt
PnJvb3RMYXllcigpKSk7Ci0gICAgZWxzZQorICAgIGlmIChyb290TGF5ZXIoKSkgeworICAgICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG5ld1Jvb3RMYXllcjsKKyAgICAgICAgYm9vbCBhY3RpdmF0
ZWRBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpLCBob3N0SW1wbC0+Y3Vy
cmVudFRpbWVNcygpLCBuZXdSb290TGF5ZXIsIGFjdGl2YXRlZEFuaW1hdGlvbik7CisgICAgICAg
IGhvc3RJbXBsLT5zZXRSb290TGF5ZXIobmV3Um9vdExheWVyLnJlbGVhc2UoKSk7CisgICAgICAg
IGlmIChhY3RpdmF0ZWRBbmltYXRpb24pCisgICAgICAgICAgICBob3N0SW1wbC0+c2V0SGFzQWN0
aXZlQW5pbWF0aW9uKHRydWUpOworICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9v
dExheWVyKDApOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVt
YmVyKCkpOwpAQCAtMzEyLDkgKzMxNywxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVj
b21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChyb290TGF5ZXIoKSkKLSAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9v
dExheWVyKCkpKTsKLSAgICBlbHNlCisKKyAgICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBuZXdSb290TGF5ZXI7CisgICAgICAgIGJvb2wgYWN0aXZhdGVk
QW5pbWF0aW9uID0gZmFsc2U7CisgICAgICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSwgaG9zdEltcGwtPmN1cnJl
bnRUaW1lTXMoKSwgbmV3Um9vdExheWVyLCBhY3RpdmF0ZWRBbmltYXRpb24pOworICAgICAgICBo
b3N0SW1wbC0+c2V0Um9vdExheWVyKG5ld1Jvb3RMYXllci5yZWxlYXNlKCkpOworICAgICAgICBp
ZiAoYWN0aXZhdGVkQW5pbWF0aW9uKQorICAgICAgICAgICAgaG9zdEltcGwtPnNldEhhc0FjdGl2
ZUFuaW1hdGlvbih0cnVlKTsKKyAgICB9IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RM
YXllcigwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRl
eCAwMjE4NmNhYWY1YTg1Y2I1NjkzYmRiMTM1ZTgwY2JiYWRmYzk5MTZhLi5jZDc1MTk3MTg4ODVj
NzJlNzEyODc4OTk4ZGI2YjI4ZWJjNzg1Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcApAQCAtMTEyLDYgKzExMiw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICAgICAgbV9wYWdlU2NhbGVB
bmltYXRpb24uY2xlYXIoKTsKICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBs
VGhyZWFkKCk7CiAgICAgfQorCisgICAgYW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZU1zIC8g
MTAwMCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmlt
YXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZs
b2F0IHBhZ2VTY2FsZSwgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0yNDQsNiArMjQ2LDI3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNz
TGlzdCYgcGFzc2VzKQogICAgICAgICBwYXNzZXNbaV0tPm9wdGltaXplUXVhZHMoKTsKIH0KIAor
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZVNlY3MpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1h
dGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBpZiAoIW1faGFzQWN0aXZlQW5pbWF0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgbV9oYXNBY3RpdmVBbmltYXRpb24gPSBmYWxzZTsKKyAgICBWZWN0
b3I8Q0NMYXllckltcGwqPiB0b1Byb2Nlc3M7CisgICAgdG9Qcm9jZXNzLmFwcGVuZChtX3Jvb3RM
YXllckltcGwuZ2V0KCkpOworICAgIHdoaWxlICh0b1Byb2Nlc3Muc2l6ZSgpKSB7CisgICAgICAg
IENDTGF5ZXJJbXBsKiBjdXJyZW50ID0gdG9Qcm9jZXNzLmxhc3QoKTsKKyAgICAgICAgdG9Qcm9j
ZXNzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAg
ICAgICAgaWYgKGN1cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSkgeworICAg
ICAgICAgICAgbV9oYXNBY3RpdmVBbmltYXRpb24gPSB0cnVlOworICAgICAgICAgICAgY3VycmVu
dENvbnRyb2xsZXItPmFuaW1hdGUoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICB0b1Byb2Nlc3MuYXBwZW5kKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0u
Z2V0KCkpOworICAgIH0KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIs
IHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGU0ZDAw
NmQ0Zjg2ZTljMjZjZTcxY2I3ZWU0ZmFhYTFiOTc1Zjc0NGEuLjcyY2RmMzAyYmM5NDVmYTBlZjU1
YTg3MGEwOGRjOTNkNDc0ZTEwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKQEAgLTExOSw2ICsxMTksOSBAQCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKIAorICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBY3RpdmVBbmltYXRpb247IH0KKyAgICB2
b2lkIHNldEhhc0FjdGl2ZUFuaW1hdGlvbihib29sIGhhc0FjdGl2ZUFuaW1hdGlvbikgeyBtX2hh
c0FjdGl2ZUFuaW1hdGlvbiA9IGhhc0FjdGl2ZUFuaW1hdGlvbjsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudCopOwogICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50OwpA
QCAtMTM1LDYgKzEzOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1
cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NS
ZW5kZXJQYXNzTGlzdCYpOwogICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQ
YXNzTGlzdCYpOworICAgIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVT
ZWNzKTsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJl
cjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1wbDsKQEAgLTE1MCw2ICsx
NTQsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VTY2Fs
ZTsKIAogICAgIGJvb2wgbV9waW5jaEdlc3R1cmVBY3RpdmU7CisgICAgYm9vbCBtX2hhc0FjdGl2
ZUFuaW1hdGlvbjsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2Nh
bGVBbmltYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJlZVN5bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlU3luY2hyb25pemVyVGVzdC5jcHAKaW5kZXggY2E4Mzg0NmMyMmM2ZjM2Yzg2OTk5MmFkMjky
M2RkZDdmMzE0MGMwOS4uMzMwM2IxM2FiNzkyZTMzZDZmODFiZjI4NGI1MDc4Yjc3Y2U0NmY4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25p
emVyVGVzdC5jcHAKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVy
LmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVB
bmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2lu
Y2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKQEAgLTkxLDYgKzkzLDEyIEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPGludD4qIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdDsKIH07CiAKK2Ns
YXNzIEZha2VGbG9hdEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewor
cHVibGljOgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsg
fQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4g
MDsgfQorfTsKKwogdm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXllckNocm9taXVtKiBs
YXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCiB7CiAgICAgQVNTRVJUX1RSVUUobGF5ZXIpOwpA
QCAtMTIzLDcgKzEzMSw5IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVU
cmVlRnJvbUVtcHR5KQogICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKSk7CiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApKTsKIAotICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0g
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAw
KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdDsKKyAgICBib29sIGFk
ZGVkQW5pbWF0aW9uID0gZmFsc2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5p
bWF0aW9uKTsKIAogICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0
KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiB9CkBAIC0xMzgsNyArMTQ4LDkgQEAgVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQogICAgIGxh
eWVyVHJlZVJvb3QtPmFkZENoaWxkKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJE
ZXN0cnVjdGlvbkxpc3QpKTsKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChNb2NrTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CiAKLSAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjY0xheWVyVHJlZVJvb3Q7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAg
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
MCwgMCwgY2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhwZWN0VHJlZXNB
cmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsK
IAogICAgIC8vIEFkZCBhIG5ldyBsYXllciB0byB0aGUgTGF5ZXJDaHJvbWl1bSBzaWRlCkBAIC0x
NDgsNyArMTYwLDggQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVS
ZXVzaW5nTGF5ZXJzKQogICAgIGludCBzZWNvbmRDQ0xheWVySWQgPSBjY0xheWVyVHJlZVJvb3Qt
PmNoaWxkcmVuKClbMV0tPmlkKCk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSBhZ2Fpbi4gQWZ0ZXIg
dGhlIHN5bmMgdGhlIHRyZWVzIHNob3VsZCBiZSBlcXVpdmFsZW50IGFuZCB3ZSBzaG91bGQgaGF2
ZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgb25lIENDTGF5ZXJJbXBsLgotICAgIGNjTGF5ZXJUcmVl
Um9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgY2NMYXllclRyZWVSb290LnJlbGVhc2UoKSk7CisgICAgYWRkZWRBbmltYXRpb24gPSBm
YWxzZTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5yZWxlYXNlKCksIDAsIGNjTGF5ZXJUcmVlUm9vdCwg
YWRkZWRBbmltYXRpb24pOwogICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBBU1NFUlRfRVEoMXUsIGNj
TGF5ZXJEZXN0cnVjdGlvbkxpc3Quc2l6ZSgpKTsKQEAgLTE3Miw3ICsxODUsMTAgQEAgVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogICAgIElu
dFNpemUgc2Vjb25kQ2hpbGRCb3VuZHMgPSBJbnRTaXplKDI1LCA1Myk7CiAgICAgbGF5ZXJUcmVl
Um9vdC0+Y2hpbGRyZW4oKVsxXS0+c2V0Qm91bmRzKHNlY29uZENoaWxkQm91bmRzKTsKIAotICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdDsKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gZmFs
c2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCAwLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0aW9uKTsKKwogICAgIGV4
cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9v
dC5nZXQoKSk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBwcm9wZXJ0eSB2YWx1ZXMgd2Ugc2V0
IG9uIHRoZSBMYXllckNocm9taXVtIHRyZWUgYXJlIHJlZmxlY3RlZCBpbiB0aGUgQ0NMYXllcklt
cGwgdHJlZS4KQEAgLTIwOSw3ICsyMjUsOSBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBy
ZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQogICAgIGxheWVyQi0+YWRkQ2hpbGQo
TW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOwogICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckQgPSBsYXllckItPmNoaWxkcmVuKClbMV0uZ2V0
KCk7CiAKLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3Q7CisgICAgYm9vbCBhZGRlZEFuaW1h
dGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgMCwgMCwgY2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7
CiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXll
clRyZWVSb290LmdldCgpKTsKIAogICAgIC8vIE5vdyByZXN0cnVjdHVyZSB0aGUgdHJlZSB0byBs
b29rIGxpa2UgdGhpczoKQEAgLTIyNyw3ICsyNDUsOCBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJU
ZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQogICAgIGxheWVyQy0+YWRk
Q2hpbGQobGF5ZXJCKTsKIAogICAgIC8vIEFmdGVyIGFub3RoZXIgc3luY2hyb25pemUgb3VyIHRy
ZWVzIHNob3VsZCBtYXRjaCBhbmQgd2Ugc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhbnkgQ0NM
YXllckltcGxzCi0gICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QucmVsZWFzZSgp
KTsKKyAgICBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LnJlbGVh
c2UoKSwgMCwgY2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhwZWN0VHJl
ZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgp
KTsKIAogICAgIEVYUEVDVF9FUSgwdSwgY2NMYXllckRlc3RydWN0aW9uTGlzdC5zaXplKCkpOwpA
QCAtMjQ3LDcgKzI2Niw5IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVU
cmVlVGhlbkRlc3Ryb3kpCiAgICAgaW50IG9sZFRyZWVGaXJzdENoaWxkTGF5ZXJJZCA9IG9sZExh
eWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMF0tPmlkKCk7CiAgICAgaW50IG9sZFRyZWVTZWNvbmRD
aGlsZExheWVySWQgPSBvbGRMYXllclRyZWVSb290LT5jaGlsZHJlbigpWzFdLT5pZCgpOwogCi0g
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKG9sZExheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290OworICAgIGJvb2wgYWRkZWRBbmltYXRpb24g
PSBmYWxzZTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG9sZExheWVy
VHJlZVJvb3QuZ2V0KCksIDAsIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRBbmltYXRpb24pOwog
ICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKG9sZExheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5
ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICAvLyBSZW1vdmUgYWxsIGNoaWxkcmVuIG9uIHRoZSBM
YXllckNocm9taXVtIHNpZGUuCkBAIC0yNTUsNyArMjc2LDggQEAgVEVTVChUcmVlU3luY2hyb25p
emVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKIAogICAgIC8vIFN5bmNocm9uaXpl
IGFnYWluLiBBZnRlciB0aGUgc3luYyBhbGwgQ0NMYXllckltcGxzIGZyb20gdGhlIG9sZCB0cmVl
IHNob3VsZCBiZSBkZWxldGVkLgogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBuZXdMYXllclRy
ZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwotICAgIGNjTGF5ZXJUcmVlUm9vdCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobmV3TGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LnJlbGVhc2UoKSk7CisgICAgYWRkZWRBbmltYXRpb24gPSBmYWxz
ZTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG5ld0xheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5yZWxlYXNlKCksIDAsIGNjTGF5ZXJUcmVlUm9vdCwg
YWRkZWRBbmltYXRpb24pOwogICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKG5ld0xheWVyVHJl
ZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICBBU1NFUlRfRVEoM3Us
IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Quc2l6ZSgpKTsKQEAgLTI4NywyNSArMzA5LDg2IEBAIFRF
U1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5
ZXJzKQogICAgIHJlcGxpY2FMYXllcldpdGhNYXNrLT5zZXRNYXNrTGF5ZXIocmVwbGljYU1hc2tM
YXllci5nZXQoKSk7CiAgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsyXS0+c2V0UmVwbGlj
YUxheWVyKHJlcGxpY2FMYXllcldpdGhNYXNrLmdldCgpKTsKIAotICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5
ZXJUcmVlUm9vdDsKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gZmFsc2U7CisgICAgVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwLCAwLCBj
Y0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0aW9uKTsKIAogICAgIGV4cGVjdFRyZWVzQXJlSWRl
bnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAg
ICAvLyBSZW1vdmUgdGhlIG1hc2sgbGF5ZXIuCiAgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4o
KVswXS0+c2V0TWFza0xheWVyKDApOwotICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwgY2NMYXllclRyZWVSb290
LCBhZGRlZEFuaW1hdGlvbik7CiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVl
Um9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAgIC8vIFJlbW92ZSB0aGUg
cmVwbGljYSBsYXllci4KICAgICBsYXllclRyZWVSb290LT5jaGlsZHJlbigpWzFdLT5zZXRSZXBs
aWNhTGF5ZXIoMCk7Ci0gICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkp
OworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpLCAwLCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5p
bWF0aW9uKTsKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgp
LCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSByZXBsaWNhIG1h
c2suCiAgICAgcmVwbGljYUxheWVyV2l0aE1hc2stPnNldE1hc2tMYXllcigwKTsKLSAgICBjY0xh
eWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisgICAgVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3Qu
Z2V0KCksIDAsIGNjTGF5ZXJUcmVlUm9vdCwgYWRkZWRBbmltYXRpb24pOwogICAgIGV4cGVjdFRy
ZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQo
KSk7CiB9CiAKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNBbmltYXRpb25zKQorewor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworCisgICAgLy8g
U3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVy
VHJlZVJvb3Q7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwgMCwgY2NM
YXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRkFMU0UoYWRkZWRB
bmltYXRpb24pOworCisgICAgLy8gQWRkIGFuaW1hdGlvbiB0byBtYWluIHRocmVhZCBjb250cm9s
bGVyLgorICAgIGxheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWN0aXZlQW5p
bWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRBbmltYXRpb24oKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cisg
ICAgYWRkZWRBbmltYXRpb24gPSBmYWxzZTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwg
Y2NMYXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfVFJVRShhZGRl
ZEFuaW1hdGlvbik7CisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25D
b250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdl
dEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRl
KCkpOworCisgICAgLy8gUHVzaCBhbiBhbmltYXRpb24gcHJvcGVydHkgY2hhbmdlIHRvIHRoZSBp
bXBsIHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBhbiBhbmltYXRpb24gdG8gYmUgYWRkZWQpLgor
ICAgIGxheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWN0aXZlQW5pbWF0aW9u
cygpWzBdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwKTsKKyAgICBh
ZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpLCAwLCBjY0xh
eWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0aW9uKTsKKworICAgIEVYUEVDVF9GQUxTRShhZGRlZEFu
aW1hdGlvbik7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIEFib3J0
IGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBsYXllclRyZWVSb290LT5h
bmltYXRpb25Db250cm9sbGVyKCktPmFjdGl2ZUFuaW1hdGlvbnMoKS5jbGVhcigpOworICAgIGFk
ZGVkQW5pbWF0aW9uID0gZmFsc2U7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCksIDAsIGNjTGF5
ZXJUcmVlUm9vdCwgYWRkZWRBbmltYXRpb24pOworCisgICAgRVhQRUNUX0ZBTFNFKGFkZGVkQW5p
bWF0aW9uKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250
cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworCisgICAgLy8gQWRkIGFub3RoZXIgYW5pbWF0aW9uIHRvIG1haW4gdGhyZWFkIGNvbnRy
b2xsZXIuCisgICAgbGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hY3RpdmVB
bmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdEFuaW1hdGlvbigpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBhZGRlZEFuaW1hdGlvbiA9IGZhbHNlOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpLCAw
LCBjY0xheWVyVHJlZVJvb3QsIGFkZGVkQW5pbWF0aW9uKTsKKworICAgIEVYUEVDVF9UUlVFKGFk
ZGVkQW5pbWF0aW9uKTsKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3Rh
dGUoKSk7CisKKyAgICAvLyBTdGVwIHRocm91Z2ggdGhlIGFuaW1hdGlvbiB1bnRpbCBpdCBpcyBm
aW5pc2hlZC4gQXQgdGhlIG5leHQgc3luYywgdGhlIG1haW4gdGhyZWFkJ3MgYW5pbWF0aW9uIHNo
b3VsZCBiZSBjbGVhcmVkLgorICAgIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLT5hbmltYXRlKDApOworICAgIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLT5hbmltYXRlKDIpOworCisgICAgRVhQRUNUX0ZBTFNFKGNjTGF5ZXJUcmVlUm9vdC0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBsYXllclRyZWVSb290LT5h
bmltYXRpb25Db250cm9sbGVyKCktPmFjdGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkpOworCisgICAg
YWRkZWRBbmltYXRpb24gPSBmYWxzZTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6
ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCwgY2NM
YXllclRyZWVSb290LCBhZGRlZEFuaW1hdGlvbik7CisKKyAgICBFWFBFQ1RfRkFMU0UoYWRkZWRB
bmltYXRpb24pOworICAgIEVYUEVDVF9FUShzaXplX3QoMCksIGxheWVyVHJlZVJvb3QtPmFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123871</attachid>
            <date>2012-01-24 18:43:44 -0800</date>
            <delta_ts>2012-02-01 10:33:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120124214343.patch</filename>
            <type>text/plain</type>
            <size>52989</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2U4YWFiMmJlYTkyOTQz
NzhkNGE0ZWQ2Nzg4NDJkOTViZjUzY2VlMi4uZDI5MzQ1YTgwNDVkYzQ0NDBmYWEyZWM5Nzc5YjU3
MzNkMTY1YzRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTAxLTE2ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSGFu
ZGxlIENTUyBhbmltYXRpb25zIG9uIENDVGhyZWFkIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODc0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1l
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21p
dW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1
c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFuaW1hdGlvbkNvbnRyb2xsZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVj
dXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xv
bmVGb3JJbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpw
dXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpz
dXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvbnNUbyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oLgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphY3RpdmVBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFu
aW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvcGFjaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjp0cmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OmFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1w
bFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBs
OjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1h
dGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6
Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRIYXNBY3RpdmVBbmltYXRpb24pOgorCiAyMDEyLTAxLTI0ICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1JlZmFjdG9yaW5nXSBNYWtlIGZp
bmlzaCgpIG9mIENvZGVHZW5lcmF0b3JKUy5wbSBlbXB0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDc3
NDVhYzZmMjUxNjcxOTE0YTM2ZTVlOWZiMWUzZDQ2MjRiMDMyYmUuLmIxZjVkZjg2YWJjMzNhYmQx
ZjRlNTBhNzI0MjVhMjU1MmFmMzk0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyMzAsNiArMzIz
MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDMxYTUxMThm
ZmQwM2QxODI0OGQwN2U1MWUyNGFlZWQzMmFmZTk3MGUuLjdiMDg4MmRhMTQ2ZjM2ODUxOGM4ZmRk
MTUxNmI5NDhkYTQzZDFmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cApAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGls
ZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQogewog
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotICAgIGlmICghbV9pblNl
dENoaWxkcmVuKSAKKyAgICBpZiAoIW1faW5TZXRDaGlsZHJlbikKICAgICAgICAgdXBkYXRlQ2hp
bGRMaXN0KCk7CiB9CiAKQEAgLTM2OSw2ICszNjksMzEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikK
ICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9t
aXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3Qg
SW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIG1fbGF5
ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uTmFt
ZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQor
eworICAgIG1fbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQp
OworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBtX2xheWVyLT5yZW1vdmVBbmltYXRpb24o
YW5pbWF0aW9uTmFtZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzdXNwZW5k
QW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKKyAgICBtX2xheWVyLT5zdXNwZW5kQW5pbWF0aW9u
cyh0aW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlv
bnMoKQoreworICAgIG1fbGF5ZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKK30KKwogdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXll
cikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzgzLDEyICs0MDgs
MTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKiBsYXllcikKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9jb250ZW50c0xh
eWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAKKwogICAgICAg
ICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0
ZUNoaWxkTGlzdC4KICAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CiAgICAgICAgIH0K
ICAgICB9Ci0gIAorCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlQ2hp
bGRMaXN0KCk7CiB9CkBAIC01MzcsNyArNTYyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShpZGVudGl0eSk7Ci0g
ICAgICAgIAorCiAgICAgICAgIC8vIFNldCB0aGUgb2xkIGxheWVyIHRvIG9wYWNpdHkgb2YgMS4g
RnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRoZSB0cmFuc2Zvcm0gbGF5
ZXIuCiAgICAgICAgIG1fbGF5ZXItPnNldE9wYWNpdHkoMSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgKaW5kZXggMzliMzY3YjlkM2YwZTJmODNhMzIwZjkwMmI1NDA2MmZiOTMx
ZTg2Ni4uNTRhZTAwODA2ZTU2YmNiZjYxNDY1N2MzZjMyZGRhMWI2MjU3NjI3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTkyLDYgKzkyLDEzIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CiAKKyAgICB2
aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3Qg
SW50U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyph
bmltYXRpb25OYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdmlydHVhbCB2b2lk
IHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRvdWJsZSAv
KnRpbWVPZmZzZXQqLyk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBT
dHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5p
bWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMo
KTsKKwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjNjNkZmQ3ZDI2ODI4N2I1Zjg1YTc3YmM0MDQy
NWYwNjBhOGE1ODIuLmNjZjVkMmI3MjYzN2Y0NjM2YTBiNzYzNjk0MzAyNDFhY2I4MGMyN2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpZiBVU0UoU0tJQSkKQEAg
LTU4LDYgKzU5LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25l
ZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAg
LCBtX3BhcmVudCgwKQorICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpjcmVhdGUoKSkKICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKICAgICAs
IG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAw
LCAwKQpAQCAtMTA3LDYgKzEwOSwzMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNv
dXJjZXNSZWN1cnNpdmUoKQogICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAorYm9vbCBMYXll
ckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJu
IG1fYW5pbWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5p
bWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBMYXllckNocm9t
aXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRpb24o
YW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVt
b3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBtX2FuaW1h
dGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKK30KKwordm9p
ZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKKyAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lk
IExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9uQ29u
dHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNl
dElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNvbXBvc2l0ZWRDb250ZW50KQogewog
ICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggYzVmODhmMTMyNmU4ZDIyN2E1MTE3MDA3YWQwZWUyYzQ5M2Y2
MjI4NS4uNWIyMzczZDFiM2FjYmM4Mjk5NWI3ZTJmMzZkMmE2YTNhODFmOTY5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtNTEsNiArNTEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFz
cyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwpAQCAtNTksNyArNjAs
NiBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0
ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMg
Y2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJv
bWl1bT4gewotICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCk7CiAKQEAgLTE5OCw3
ICsxOTgsMTkgQEAgcHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsgfQogICAgIHZvaWQgY2xlYW51
cFJlc291cmNlc1JlY3Vyc2l2ZSgpOwogCisgICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywgY29uc3QgQW5pbWF0
aW9uKiwgY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNl
dCovKTsKKyAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25O
YW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24o
Y29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLyk7CisKKyAgICB2b2lkIHN1c3BlbmRBbmlt
YXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKwogcHJv
dGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKKyAgICBmcmllbmQgY2xhc3Mg
TGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOwor
ICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdDsKKwogICAgIExheWVyQ2hyb21p
dW0oKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBiZWlu
ZyBoZWxkIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKQEAgLTIxOSw4ICsyMzEsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5ZXI7CiAKLSAgICBmcmll
bmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7
CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUg
dHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGludCBtX2xheWVySWQ7CkBA
IC0yMjksMTAgKzIzOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoTGF5ZXJDaHJv
bWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1bSopIGNvbnN0OwogCi0g
ICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2No
aWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9m
IHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGluZGV4T2ZDaGlsZChjb25z
dCBMYXllckNocm9taXVtKik7CkBAIC0yNDAsMTEgKzI0NywxNSBAQCBwcml2YXRlOgogICAgIC8v
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVBhcmVudC4KICAgICB2
b2lkIHJlbW92ZUNoaWxkKExheWVyQ2hyb21pdW0qKTsKIAorICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b25Db250cm9sbGVyLmdldCgpOyB9CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gbV9jaGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAogICAgIFJlZlB0
cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAgICAgLy8gTGF5
ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNp
YmxlTGF5ZXJSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBkMGZkMGNlNTIz
ZDYzODg0YmU5MzJlMWJkNDE2NTgyZjI1NzYyZTQwLi43ZTliZmFkZGFlNmYzNTA2NGUyYzQ4ZDVh
ZmY4ZmFhNWViZjczMWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBA
IC03NCw2ICs3NSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxzZQogICAgICAg
ICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXItPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+cHVzaEFuaW1hdGlvbnNUbyhjY0xheWVySW1wbC0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpKTsKKwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdl
dCgpKTsKICAgICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uY3BwCmluZGV4IDIxZTZjYzdhOWUyNDZlYzBiZWZhYWEwNTg0ZjZk
MjIxYzQ0NjIwZWEuLjk1NTZiYTBiNWZmMDNmYzc2ZmI4ODZmNWU4NjE2OTAxMjdhNGY1MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKQEAgLTk1LDQgKzk1LDI0IEBAIGRv
dWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91Ymxl
IG5vdykgY29uc3QKICAgICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5k
dXJhdGlvbigpKTsKIH0KIAorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVB
bmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCgpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRp
b25DdXJ2ZS5yZWxlYXNlKCksIG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpKSk7CisgICAgdG9S
ZXR1cm4tPm1fcnVuU3RhdGUgPSBtX3J1blN0YXRlOworICAgIHRvUmV0dXJuLT5tX2l0ZXJhdGlv
bnMgPSBtX2l0ZXJhdGlvbnM7CisgICAgdG9SZXR1cm4tPm1fc3RhcnRUaW1lID0gbV9zdGFydFRp
bWU7CisgICAgdG9SZXR1cm4tPm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgdG9SZXR1
cm4tPm1fdG90YWxQYXVzZWRUaW1lID0gbV90b3RhbFBhdXNlZFRpbWU7CisgICAgcmV0dXJuIHRv
UmV0dXJuLnJlbGVhc2UoKTsKK30KKwordm9pZCBDQ0FjdGl2ZUFuaW1hdGlvbjo6cHVzaFByb3Bl
cnRpZXNUbyhDQ0FjdGl2ZUFuaW1hdGlvbiogb3RoZXIpIGNvbnN0Cit7CisgICAgb3RoZXItPm1f
cnVuU3RhdGUgPSBtX3J1blN0YXRlOworICAgIG90aGVyLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJh
dGlvbnM7CisgICAgb3RoZXItPm1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWU7CisgICAgb3RoZXIt
Pm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgb3RoZXItPm1fdG90YWxQYXVzZWRUaW1l
ID0gbV90b3RhbFBhdXNlZFRpbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0
aXZlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2VkMTJkNjU4ZDc2ZDYw
NGVlZTlmYmFkMGEzZDEuLjVmZmU1NTFhNzhlYTRmMzJhYzIzOGY0YWJmYTY4Mzg3Y2ZjYmY3NGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQWN0aXZlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMTAwLDYgKzEwMCwxMSBAQCBw
dWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBp
biB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRl
cmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0OwogCisgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCk7CisKKyAgICAvLyBEb2VzIG5vdCB0YWtlIG93bmVy
c2hpcCBvZiB0aGUgZ2l2ZW4gYWN0aXZlIGFuaW1hdGlvbi4KKyAgICB2b2lkIHB1c2hQcm9wZXJ0
aWVzVG8oQ0NBY3RpdmVBbmltYXRpb24qKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBDQ0FjdGl2
ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBHcm91cElELCBUYXJnZXRQ
cm9wZXJ0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZDFkNTMxOGYzZDFhNTdiNzFkNzgxNzM0OGQ3ZjYzMWE3Y2Qz
YzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFu
aW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50LgorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmlt
YXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQuCit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmlt
YXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQuCit9CisKK3Zv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQuCit9CisKKy8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBh
Y3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAor
Ly8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hp
cCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnB1c2hBbmltYXRpb25zVG8oQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KiBjb250cm9sbGVyKQoreworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBmYWxzZTsKKworICAg
IHNpemVfdCBpID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlci0+bV9maW5pc2hl
ZEFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZShjb250cm9sbGVyLT5tX2Zp
bmlzaGVkQW5pbWF0aW9uc1tpXS5maXJzdCwgY29udHJvbGxlci0+bV9maW5pc2hlZEFuaW1hdGlv
bnNbaV0uc2Vjb25kKTsKKworICAgIGNvbnRyb2xsZXItPm1fZmluaXNoZWRBbmltYXRpb25zLmNs
ZWFyKCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmICghY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQ
cm9wZXJ0eSgpKSkgeworICAgICAgICAgICAgY29udHJvbGxlci0+YWRkKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgICAgICAgICAgYWRkZWRBbmltYXRp
b24gPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNv
bnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBp
cyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3Ag
dGVybWluYXRpb24uCisgICAgZm9yIChpID0gMDsgaSA8IGNvbnRyb2xsZXItPm1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7KSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0g
Z2V0QWN0aXZlQW5pbWF0aW9uKGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3Jv
dXAoKSwgY29udHJvbGxlci0+bV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgp
KTsKKyAgICAgICAgaWYgKCFjdXJyZW50KQorICAgICAgICAgICAgY29udHJvbGxlci0+bV9hY3Rp
dmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjdXJy
ZW50LT5wdXNoUHJvcGVydGllc1RvKGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS5n
ZXQoKSk7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
YWRkZWRBbmltYXRpb247Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
IGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3Jv
dXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFBy
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVt
b3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzYTlhNzk3MDk3ODk4
ZWIzYjkzOGI5ZjEyMzRmMTZiYTAzMDA4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9o
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorCisj
aW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDsK
K3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CisKK2NsYXNzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIGJvb2wg
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgLypi
b3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1l
Ki8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pOworICAg
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8pOwor
CisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdm9pZCByZXN1
bWVBbmltYXRpb25zKCk7CisKKyAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZl
IGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKKyAgICAv
LyBhcmUga2VwdCBpbiBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlw
IG9mIHRoZSBpbXBsIHRocmVhZCBjb250cm9sbGVyLgorICAgIGJvb2wgcHVzaEFuaW1hdGlvbnNU
byhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKworICAgIC8vIFRoaXMgaXMgZm9y
IHRlc3RpbmcgcHVycG9zZXMgb25seS4KKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiA+JiBhY3RpdmVBbmltYXRpb25zKCkgeyByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zOyB9
CisKK3ByaXZhdGU6CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246
Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgdm9pZCBy
ZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSk7CisKKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1f
YWN0aXZlQW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmluZGV4IGJiY2E5Y2JkOTA1NWUx
ZWMxM2NjMGE5NzQ2MzljNWY5NzA4ODA5OTIuLjdhMDJhNWE2ODVhNWU0NjVlNTM0MDBlZWQwZmIz
ZDUxNzc2YjNmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtNTgsOCArNTgsNiBAQCB2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQogdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBhbmltKQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7
Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YW5pbWF0aW9uQ29udHJvbGxl
ckltcGxEaWRBY3RpdmF0ZSh0aGlzKTsKIH0KIAogQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0
aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJv
cGVydHkpCkBAIC0xNzgsOSArMTc2LDEwIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRBcmVG
aW5pc2hlZCkKKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7Cisg
ICAgICAgICAgICBtX2ZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobV9h
Y3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdl
dFByb3BlcnR5KCkpKTsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7
Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpKys7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
aAppbmRleCAxYWQyMjNkYmE4MjNhMmEwNTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Li5hZTcwNGQw
NDc3ZWJkMTc3MzE3OGMxZDUyYzFkNzQ3MTRjMThmNmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaApAQCAtNDgsNyArNDgsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsKICAgICB2aXJ0
dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0
ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKSA9IDA7CiB9OwogCiBjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwgewpAQCAtNjcsNiArNjYsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisgICAgdHlwZWRlZiBzdGQ6OnBh
aXI8Q0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eT4gQW5pbWF0aW9uU2lnbmF0dXJlOworCiAgICAgLy8gVGhlIGFuaW1hdG9yIGlzIG93
bmVkIGJ5IHRoZSBsYXllci4KICAgICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CiAKQEAgLTgwLDYg
KzgyLDcgQEAgcHJpdmF0ZToKIAogICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCogbV9jbGllbnQ7CiAgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBt
X2FjdGl2ZUFuaW1hdGlvbnM7CisgICAgVmVjdG9yPEFuaW1hdGlvblNpZ25hdHVyZT4gbV9maW5p
c2hlZEFuaW1hdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKaW5kZXggODZkZTAwZDJjYWU4NGExOWIwZTMyNTA5MjMwM2VhM2JmZWNkN2Rk
NC4uNzU2ODA4ZmRmNDRlODUyYjFiMjFlMmM2MzM5Y2RjMjBlNmJlYjhkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0Rl
YnVnQm9yZGVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTYxLDYgKzYyLDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAs
IG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQog
ICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4
IDAwZTBhZGY4YTUxZmRlYzA0YTlmNDI1ZjA0NTdhYTMzODhjZWEzYWEuLjQ4ZjgzZGIwNWY4NjY2
YzA0NmZlZTI1NGI3NTY4OWQwOWVlOTA4ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgi
CiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIK
ICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CkBAIC00MCwxMSArNDEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3Mg
TGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NM
YXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3MgQ0NMYXll
ckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKQEAgLTEwNiw4ICsxMDgsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAgICAgYm9vbCBvcGFxdWUoKSBj
b25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCi0gICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsK
LSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgLy8g
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNp
dHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAogICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQpAQCAtMTI0LDggKzEyNyw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICAv
LyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCisg
ICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KQEAgLTE5OCw2ICsyMDIsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBsYXllclByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQcm9wZXJ0
eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJlc2V0QWxsQ2hhbmdlVHJhY2tpbmdGb3JTdWJ0cmVlKCk7
CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJv
dGVjdGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKGludCk7CiAKQEAgLTMwNSw2ICszMTEs
OSBAQCBwcml2YXRlOgogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0IHdhcyByZXBhaW50ZWQv
dXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBwbHVnaW4gbGF5ZXJzIGJ5
cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KICAgICBGbG9hdFJlY3QgbV91cGRhdGVSZWN0
OworCisgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIHRhcmdldGluZyB0aGlzIGxheWVyLgorICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IG1fYW5pbWF0aW9uQ29udHJv
bGxlcjsKIH07CiAKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+
OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3Ig
ZW5kLCBDQ0xheWVyU29ydGVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRl
eCBhMmZiODIyYzU2YmRiMzVmY2NkM2I5OWE0ZDE0ZGVlYThkOTEzMjhiLi43YjQxMjQwZDRjMGMx
OGU4YjIwNDcxNDMwZmJiOThhOGViYmFlODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTE1Myw5ICsxNTMsMTAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENv
bW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCiAgICAgLy8gU3luY2hyb25pemUgdHJlZXMs
IGlmIG9uZSBleGlzdHMgYXQgYWxsLi4uCi0gICAgaWYgKHJvb3RMYXllcigpKQorICAgIGlmIChy
b290TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIo
KSkpOwotICAgIGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNldE1heUhhdmVBY3RpdmVBbmltYXRp
b25Db250cm9sbGVyKHRydWUpOworICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9v
dExheWVyKDApOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVt
YmVyKCkpOwpAQCAtMzE2LDkgKzMxNywxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVj
b21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChyb290TGF5ZXIoKSkKKworICAgIGlmIChyb290TGF5ZXIoKSkgewogICAgICAgICBo
b3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
cm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAgICAgICAg
aG9zdEltcGwtPnNldE1heUhhdmVBY3RpdmVBbmltYXRpb25Db250cm9sbGVyKHRydWUpOworICAg
IH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDZjMmM3NDI2ZmMwYjk1MDAxZGVl
ZThhNzA5NGVjOWNkOGY1MGM5NWYuLjQxMTM5ZjJjNzJjNDlhNTNhNmE4OTk3NWJmYjQwZmQ2ZTI1
ODAwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC01Nyw2
ICs1Nyw3IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3Qg
Q0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAgICAgLCBtX3NlbnRQYWdlU2NhbGVE
ZWx0YSgxKQogICAgICwgbV9taW5QYWdlU2NhbGUoMCkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDAp
CisgICAgLCBtX21heUhhdmVBY3RpdmVBbmltYXRpb25Db250cm9sbGVyKHRydWUpCiAgICAgLCBt
X3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxzZSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwpAQCAtMTEyLDYgKzExMyw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICAgICAgbV9wYWdlU2NhbGVBbmlt
YXRpb24uY2xlYXIoKTsKICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCk7CiAgICAgfQorCisgICAgYW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZU1zIC8gMTAw
MCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRp
b24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0
IHBhZ2VTY2FsZSwgZG91YmxlIHN0YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25NcykKQEAgLTI0
NCw2ICsyNDcsMjcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBh
c3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgICAgIHBhc3Nlc1tpXS0+b3B0aW1p
emVRdWFkcygpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyIsIHRoaXMsIDApOworICAgIGlmICghbV9tYXlIYXZl
QWN0aXZlQW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWF5SGF2
ZUFjdGl2ZUFuaW1hdGlvbkNvbnRyb2xsZXIgPSBmYWxzZTsKKyAgICBWZWN0b3I8Q0NMYXllcklt
cGwqPiB0b1Byb2Nlc3M7CisgICAgdG9Qcm9jZXNzLmFwcGVuZChtX3Jvb3RMYXllckltcGwuZ2V0
KCkpOworICAgIHdoaWxlICh0b1Byb2Nlc3Muc2l6ZSgpKSB7CisgICAgICAgIENDTGF5ZXJJbXBs
KiBjdXJyZW50ID0gdG9Qcm9jZXNzLmxhc3QoKTsKKyAgICAgICAgdG9Qcm9jZXNzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29u
dHJvbGxlciA9IGN1cnJlbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICAgICAgaWYgKGN1
cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSkgeworICAgICAgICAgICAgbV9t
YXlIYXZlQWN0aXZlQW5pbWF0aW9uQ29udHJvbGxlciA9IHRydWU7CisgICAgICAgICAgICBjdXJy
ZW50Q29udHJvbGxlci0+YW5pbWF0ZShmcmFtZUJlZ2luVGltZVNlY3MpOworICAgICAgICB9Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIHRvUHJvY2Vzcy5hcHBlbmQoY3VycmVudC0+Y2hpbGRyZW4oKVtp
XS5nZXQoKSk7CisgICAgfQorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
IiwgdGhpcywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZGVi
YTZjODZiOGJjMmNmYWFkNDQ2NDlkMjIzOTBmZGVjNmYxYWJlMi4uMjlhOTExZjFkY2UxMTFiOGZm
Nzg2OTRlMmNmNzE4N2QzMWYyYmQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtMTE4LDYgKzExOCw5IEBAIHB1YmxpYzoKIAogICAgIFBhc3NPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gcHJvY2Vzc1Njcm9sbERlbHRhcygpOwogCisgICAgYm9vbCBtYXlIYXZl
QWN0aXZlQW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWF5SGF2ZUFjdGl2
ZUFuaW1hdGlvbkNvbnRyb2xsZXI7IH0KKyAgICB2b2lkIHNldE1heUhhdmVBY3RpdmVBbmltYXRp
b25Db250cm9sbGVyKGJvb2wgbWF5SGF2ZUFjdGl2ZUFuaW1hdGlvbkNvbnRyb2xsZXIpIHsgbV9t
YXlIYXZlQWN0aXZlQW5pbWF0aW9uQ29udHJvbGxlciA9IG1heUhhdmVBY3RpdmVBbmltYXRpb25D
b250cm9sbGVyOyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0
IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7CkBAIC0xMzQsNiArMTM3LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3
TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2
b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAgICAgdm9pZCBv
cHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0Jik7CisgICAgdm9pZCBhbmltYXRl
TGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOwogCiAgICAgT3duUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
bV9yb290TGF5ZXJJbXBsOwpAQCAtMTQ4LDYgKzE1Miw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQg
bV9zZW50UGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFn
ZVNjYWxlOwogCisgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBuZWNlc3NhcnkgdG8gdHJh
dmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3JzLgorICAgIGJvb2wgbV9t
YXlIYXZlQWN0aXZlQW5pbWF0aW9uQ29udHJvbGxlcjsKICAgICBib29sIG1fcGluY2hHZXN0dXJl
QWN0aXZlOwogCiAgICAgT3duUHRyPENDUGFnZVNjYWxlQW5pbWF0aW9uPiBtX3BhZ2VTY2FsZUFu
aW1hdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDU4OGEyYzc1NzE4Mjcw
MmE0NzliNzczOGU2ZjE3MmU1ZGRkOTQwYjQuLjJmN2U0NGE2NjI5NzU1ZjI0MGU4NDM3MDU2ZmRj
YjE2YzY1ZTAwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjEsNiArNjEs
NyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rl
c3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFn
ZVRyYWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNv
dXJjZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJU
ZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0
aXZlQW5pbWF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0
aXZlQW5pbWF0aW9uVGVzdC5jcHAKaW5kZXggM2U5M2Q5NWRlODY4YTJmM2EyNWFiMDMwMjBlZDI1
YzFkMGVjNDkwYS4uMjYxZWRmZmY4NTJmMzNjMTNiNDkyMWJlNzBlNjA5ZTQyZjVlMmI5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRp
b25UZXN0LmNwcApAQCAtMjUsMjQgKzI1LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNp
bmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiY2MvQ0NBbmltYXRp
b25DdXJ2ZS5oIgorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogCiAjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFdlYktp
dFRlc3RzOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNsYXNzIEZha2VGbG9hdEFuaW1h
dGlvbiA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewotcHVibGljOgotICAgIHZpcnR1
YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgZmxv
YXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4gMDsgfQotfTsKK25hbWVzcGFj
ZSB7CiAKIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihpbnQgaXRlcmF0aW9ucykKIHsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0
dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1h
dGlvbiksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAgICAgdG9SZXR1cm4tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CiAgICAgcmV0
dXJuIHRvUmV0dXJuLnJlbGVhc2UoKTsKIH0KQEAgLTE2NCw0ICsxNjAsNCBAQCBURVNUKENDQWN0
aXZlQW5pbWF0aW9uVGVzdCwgSXNGaW5pc2hlZCkKICAgICBFWFBFQ1RfVFJVRShhbmltLT5pc0Zp
bmlzaGVkKCkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RD
b21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjY1MTE3YmFmMGEwNTUyZjhiYTlmM2I0YTE2MzY3N2M2ZTk0OTBh
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ0FuaW1hdGlvblRlc3RDb21tb25faAorI2RlZmluZSBDQ0FuaW1hdGlvblRlc3RDb21tb25f
aAorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uQ3VydmUuaCIKKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3MgRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZl
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IDE7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KK307CisKK2NsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIFdl
YkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7
IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUo
ZG91YmxlIHRpbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNm
b3JtT3BlcmF0aW9ucygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlv
bjsKK307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgV2ViQ29yZTo6Q0NG
bG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRv
dWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgICAgIDogbV9kdXJhdGlv
bihkdXJhdGlvbikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAgICAgLCBtX3RvKHRvKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1l
KSBjb25zdAorICAgIHsKKyAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOworICAgICAgICBpZiAo
dGltZSA+PSAxKQorICAgICAgICAgICAgdGltZSA9IDE7CisgICAgICAgIHJldHVybiAoMSAtIHRp
bWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87CisgICAgfQorCitwcml2YXRlOgorICAgIGRvdWJs
ZSBtX2R1cmF0aW9uOworICAgIGZsb2F0IG1fZnJvbTsKKyAgICBmbG9hdCBtX3RvOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uVGVzY3RD
b21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKaW5kZXggM2Q1MGQw
NmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5NWIwZjUzYi4uNmYyODVmMzUyMzA1YjJlY2E4NmNi
YzJjZTA5MjlhZDM2ODBmMDAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qu
Y3BwCkBAIC0yNCwxNiArMjQsMTUgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVk
ZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotCiAjaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAK
IG5hbWVzcGFjZSB7CiAKQEAgLTQ2LDU0ICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CiAg
ICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFu
c2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3Rp
dmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXIpCi0gICAgewot
ICAgICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9sbGVyKTsKLSAgICB9Ci0K
LSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4mIGFjdGl2ZUNvbnRy
b2xsZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQogCiBwcml2YXRlOgogICAg
IGZsb2F0IG1fb3BhY2l0eTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsK
LSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4gbV9hY3RpdmVDb250
cm9sbGVyczsKLX07Ci0KLWNsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgewotcHVibGljOgotICAgIEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0KLSAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAg
ICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLX07Ci0KLWNsYXNzIEZha2VGbG9hdFRy
YW5zaXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBG
YWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8p
Ci0gICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkK
LSAgICAgICAgLCBtX3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBk
dXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0
IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1
cmF0aW9uOwotICAgICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0g
ICAgICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAg
ICBmbG9hdCBtX3RvOwogfTsKIAogLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkg
ZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCkBAIC00MzUsMjAgKzM5MCw0IEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlv
bikKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKLS8vIFRlc3Rz
IHRoYXQgYWRkaW5nIGFuIGFuaW1hdGlvbiB0byB0aGUgY29udHJvbGxlciBjYWxscyB0aGUgYXBw
cm9wcmlhdGUgY2FsbGJhY2sgb24gdGhlIGNvbnRyb2xsZXIgY2xpZW50Ci0vLyAoaW4gdGhpcyBj
YXNlLCBhZGRpbmcgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGNvbnRyb2xs
ZXIpLgotVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBEaWRBY3RpdmF0
ZSkKLXsKLSAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIEVYUEVDVF9FUShz
aXplX3QoMCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKCkuc2l6ZSgpKTsKLQotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
LQotICAgIEVYUEVDVF9FUShzaXplX3QoMSksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKCkuc2l6
ZSgpKTsKLSAgICBFWFBFQ1RfRVEoY29udHJvbGxlci5nZXQoKSwgZHVtbXkuYWN0aXZlQ29udHJv
bGxlcnMoKVswXSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDE1NTdhN2Q5
MzIyY2M2YmUyMDZiZjUwYjAwYzBmNDcwNjNjNTQ3OGIuLjE3Y2RmYzIxYzIzOGNmM2ZlMTAyOTQz
MGRjY2UzMDQ1YmY2MWNiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0yNiwxMyArMjYsMzAgQEAKIAogI2lu
Y2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENv
bW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAj
aW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBUcmVlU3luY2hyb25pemVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbGF5ZXItPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5h
bWVzcGFjZSB7CiAKQEAgLTExNiw3ICsxMzMsNyBAQCB2b2lkIGV4cGVjdFRyZWVzQXJlSWRlbnRp
Y2FsKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbCogY2NMYXllcikKIH0KIAogLy8g
Q29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCB3aXRob3V0
IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3RpbmcgbGF5ZXJzLgotVEVTVChUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCitURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQogewogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0xMjksNyArMTQ2LDcgQEAgVEVTVChUcmVl
U3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCiB9CiAKIC8vIENvbnN0
cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgYXR0ZW1wdGluZyB0
byByZXVzZSBzb21lIGxheWVycwotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBs
ZVRyZWVSZXVzaW5nTGF5ZXJzKQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2lt
cGxlVHJlZVJldXNpbmdMYXllcnMpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKQEAgLTE1NSw3ICsx
NzIsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdM
YXllcnMpCiAgICAgRVhQRUNUX0VRKHNlY29uZENDTGF5ZXJJZCwgY2NMYXllckRlc3RydWN0aW9u
TGlzdFswXSk7CiB9CiAKLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVl
QW5kUHJvcGVydGllcykKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRy
ZWVBbmRQcm9wZXJ0aWVzKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCk7CkBAIC0xODcsNyArMjA0LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwg
c3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogICAgIEVYUEVDVF9FUShzZWNvbmRDaGlsZEJv
dW5kcy5oZWlnaHQoKSwgc2Vjb25kQ0NMYXllckNoaWxkQm91bmRzLmhlaWdodCgpKTsKIH0KIAot
VEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJhbENo
YW5nZSkKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VDQ0xheWVyc0FmdGVyU3Ry
dWN0dXJhbENoYW5nZSkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAg
ICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwpAQCAtMjM0LDcgKzI1MSw3IEBA
IFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxD
aGFuZ2UpCiB9CiAKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlLCBzeW5jaHJvbml6
ZXMgaXQsIHRoZW4gc3luY2hyb25pemVzIHRvIGEgdG90YWxseSBuZXcgdHJlZS4gQWxsIGxheWVy
cyBmcm9tIHRoZSBvbGQgdHJlZSBzaG91bGQgYmUgZGVsZXRlZC4KLVRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kpCitURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kpCiB7CiAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlz
dDsKQEAgLTI2NSw3ICsyODIsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2lt
cGxlVHJlZVRoZW5EZXN0cm95KQogfQogCiAvLyBDb25zdHJ1Y3RzK3N5bmNzIGEgdHJlZSB3aXRo
IG1hc2ssIHJlcGxpY2EsIGFuZCByZXBsaWNhIG1hc2sgbGF5ZXJzLgotVEVTVChUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCitURVNUX0Yo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJz
KQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0z
MDcsNSArMzI0LDg0IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVwbGlj
YUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiB9CiAKK1RFU1RfRihUcmVl
U3luY2hyb25pemVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikKK3sKKyAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9v
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRoIG5vIGFuaW1h
dGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworCisg
ICAgLy8gQWRkIGFuaW1hdGlvbiB0byBtYWluIHRocmVhZCBjb250cm9sbGVyLgorICAgIGdldEFu
aW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMo
KS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAg
Y2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXll
clRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RS
VUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1h
dGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVS
b290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQorCitURVNUX0YoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVzKQoreworICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVS
b290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRy
ZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlv
bjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJU
cmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVu
U3RhdGUoKSk7CisKKyAgICAvLyBQdXNoIGFuIGFuaW1hdGlvbiBwcm9wZXJ0eSBjaGFuZ2UgdG8g
dGhlIGltcGwgdGhyZWFkIChzaG91bGQgbm90IGNhdXNlIGFuIGFuaW1hdGlvbiB0byBiZSBhZGRl
ZCkuCisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0
aXZlQW5pbWF0aW9ucygpWzBdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2Vk
LCAwKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6
ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAg
ICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQ
RUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKK30KKworVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIGdldEFuaW1hdGlv
bkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBl
bmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0
aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY2NMYXll
clRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVS
b290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NM
YXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgLy8gQWJvcnQgYW4gYW5pbWF0
aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5
ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5jbGVhcigpOworICAgIFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXll
clRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJvb3QtPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7Cit9CisKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0Nv
bXBsZXRlZEFuaW1hdGlvbikKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCisgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIGdldEFuaW1hdGlvbkNvbnRy
b2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgVHJlZVN5bmNocm9u
aXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJv
b3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25D
b250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdl
dEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRl
KCkpOworCisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmltYXRpb24gdW50aWwgaXQgaXMgZmlu
aXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRocmVhZCdzIGFuaW1hdGlvbiBzaG91
bGQgYmUgY2xlYXJlZC4KKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YW5pbWF0ZSgwKTsKKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YW5pbWF0ZSgyKTsKKworICAgIEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJvb3QtPmFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKHNpemVfdCgxKSwgZ2V0QW5pbWF0aW9uQ29udHJv
bGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisK
KyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0
KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBn
ZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRp
b25zKCkuc2l6ZSgpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124966</attachid>
            <date>2012-02-01 10:33:16 -0800</date>
            <delta_ts>2012-02-03 07:57:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120201133314.patch</filename>
            <type>text/plain</type>
            <size>91760</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGM5N2U0YzNiOGI0YTUxNzc4MzliYmNmN2ExZjViNmI1MjgzZTA3MDAuLmZjZTk0NDEyN2Q5YmNi
MjYyNzJhYzE5YTNlMjdlNWZjMWZlYWQwMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTItMDEtMjcgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQga2V5ZnJhbWVkIGFuaW1hdGlv
bnMgZm9yIHRoZSBjYyB0aHJlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NzIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogdGVzdHMvQ0NBbmlt
YXRpb25UZXN0Q29tbW9uLmg6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRy
YW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJvbGxl
ckNsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0
VGVzdHMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKwogMjAxMi0wMi0wMSAgS2VudCBUYW11cmEgIDx0a2Vu
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBEaXNhYmxlIFdlYkZyYW1lVGVz
dC5GaW5kSW5QYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTAxYzg3ZjY5ZGNhODFjYzBlYzQwNGUx
ZmM4YTA2NGE4NTIzZDM4My4uODM3YjYyZWE4YzY5ZTg3YmIwMDdhMWEyMDhmZTllZDYyYjhlYzRm
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI0MSw2ICszMjQxLDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFu
ZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3ZTUxZTI0YWVl
ZDMyYWZlOTcwZS4uOGNhYmYzZWJjNjdkZDc0ODM2ZmJlNTJkMTI0NzFhMzkyNzE0MWNkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAg
Ym9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFw
aGljc0xheWVyKj4mIGNoaWxkcmVuKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENo
aWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGQoY2hpbGRMYXllcik7Ci0gICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAorICAgIGlmICgh
bV9pblNldENoaWxkcmVuKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIApAQCAtMzY5
LDYgKzM2OSwzNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0Nh
bnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExp
c3QoKTsKIH0KIAorYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25z
dCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVl
cywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXllci0+cGF1c2VB
bmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
KQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1l
KQoreworICAgIG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+
cmVzdW1lQW5pbWF0aW9ucygpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGxh
dGZvcm1DaHJvbWl1bUxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQorewor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQodGhpcywgc3RhcnRUaW1lKTsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxk
cmVuQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzgzLDEyICs0MTQsMTIgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBj
aGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAKKwogICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250
ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0ZUNoaWxkTGlzdC4KICAgICAgICAg
ICAgIG1fY29udGVudHNMYXllciA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiAgICAgaWYg
KGNoaWxkcmVuQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CkBAIC01Mzcs
NyArNTY4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2Vy
dmVzM0QoKQogICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYs
IDAuNWYpKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAg
IG1fbGF5ZXItPnNldFRyYW5zZm9ybShpZGVudGl0eSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IFNldCB0aGUgb2xkIGxheWVyIHRvIG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwg
c2V0IHRoZSBvcGFjaXR5IG9uIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIG1fbGF5ZXIt
PnNldE9wYWNpdHkoMSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXgg
MzliMzY3YjlkM2YwZTJmODNhMzIwZjkwMmI1NDA2MmZiOTMxZTg2Ni4uZDE5MDFlZmEyYTc4MjFi
NmFlYjE4NDNiMjNiZjY4ZmRhYTZkNDNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmgKQEAgLTkyLDYgKzkyLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZp
cnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRp
b25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwor
CisgICAgdm9pZCBwbGF0Zm9ybUNocm9taXVtTGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBz
dGFydFRpbWUpOworCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
Q29sb3ImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYjJmNzAxNDFiNDdhNWQ0N2I0NDAy
OTM4MGQzOGNiM2RjM2M1YjMyOC4uNjA4MjZlNjI5YjA3Y2NlZDZlOTExYWFmNmI0MWQxYTc4MjA5
ODkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShT
S0lBKQpAQCAtNTksNiArNjAsNyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAg
ICA6IG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQr
KykKICAgICAsIG1fcGFyZW50KDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNl
KQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9y
KDAsIDAsIDAsIDApCkBAIC05Niw2ICs5OCwzMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFu
dXBSZXNvdXJjZXMoKQogewogfQogCitib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyLT5h
ZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRp
bWVPZmZzZXQpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9hbmlt
YXRpb25Db250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbihhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0
KTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5p
bWF0aW9uKGFuaW1hdGlvbk5hbWUpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRB
bmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c3Vz
cGVuZEFuaW1hdGlvbnModGltZSk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5p
bWF0aW9ucygpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25z
KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChi
b29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBvc2l0ZWRDb250
ZW50ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA3NjRm
NzMwMTU1YjU0NTM3Y2RhNGM3MzgxYjNmZDNiY2I3OTYwNjRkLi5kYzRlZDYwNjQ1ZWUzZTIwYjE4
ZjY0YWY2MmJhY2UxMzZjYmQyOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01MSw2ICs1MSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNz
IENDVGV4dHVyZVVwZGF0ZXI7CkBAIC02MCw3ICs2MSw2IEBAIGNsYXNzIFJlZ2lvbjsKIC8vIEJh
c2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBk
ZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVtIDogcHVibGlj
IFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewotICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVy
Q2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Y3JlYXRlKCk7CiAKQEAgLTIxMSw3ICsyMTEsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3
YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7IG1fYWx3YXlz
UmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAgYm9vbCBhbHdh
eXNSZXNlcnZlVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJl
czsgfQogCisgICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHBhdXNlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZv
aWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisKKyAgICB2
b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKTsKKwogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKKyAg
ICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVl
U3luY2hyb25pemVyOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdDsKKwog
ICAgIExheWVyQ2hyb21pdW0oKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVw
IHJlc291cmNlcyBiZWluZyBoZWxkIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKQEAgLTIzNCw4ICsy
NDYsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5
ZXI7CiAKLSAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xh
c3MgQ0NMYXllckltcGw7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBj
b3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGlu
dCBtX2xheWVySWQ7CkBAIC0yNDQsMTAgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQ
YXJlbnQoTGF5ZXJDaHJvbWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1
bSopIGNvbnN0OwogCi0gICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVy
bnMgdGhlIGluZGV4IG9mIHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGlu
ZGV4T2ZDaGlsZChjb25zdCBMYXllckNocm9taXVtKik7CkBAIC0yNTUsMTEgKzI2MiwxNSBAQCBw
cml2YXRlOgogICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJv
bVBhcmVudC4KICAgICB2b2lkIHJlbW92ZUNoaWxkKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4g
bV9hbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gbV9jaGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAog
ICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAg
ICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBk
MGZkMGNlNTIzZDYzODg0YmU5MzJlMWJkNDE2NTgyZjI1NzYyZTQwLi5kZTFjZjhhNjk0YmExYjNm
ZjFjYWYxNzg0NmZkYjFkZTU2MjE4NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC03NCw2ICs3NSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxz
ZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXIt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+c3luY2hyb25pemVBbmltYXRpb25zKGNjTGF5ZXJJbXBs
LT5hbmltYXRpb25Db250cm9sbGVyKCkpOworCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
Y2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVj
MGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYS4uZTM5ZGVmNTQ4NWVjNTYzNzQxOTNlYjcxMGVkNjIw
YTE0ODZiMzUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtNDQs
NiArNDQsOCBAQCBDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1h
dGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisKIHZvaWQgQ0NBY3RpdmVBbmltYXRpb246
OnNldFJ1blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQogewogICAgIGlmIChy
dW5TdGF0ZSA9PSBSdW5uaW5nICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQpAQCAtNjMsNiArNjUs
MjEgQEAgYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBj
b25zdAogICAgICAgICAmJiBtX2l0ZXJhdGlvbnMgKiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlv
bigpIDw9IHRpbWUgLSBzdGFydFRpbWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwogfQogCitib29s
IENDQWN0aXZlQW5pbWF0aW9uOjppc1dhaXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3J1
blN0YXRlID09IFdhaXRpbmdGb3JOZXh0VGljaworICAgICAgICB8fCBtX3J1blN0YXRlID09IFdh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0
aW5nRm9yU3RhcnRUaW1lOworfQorCitib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdP
ckhhc1J1bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gUnVubmluZworICAg
ICAgICB8fCBtX3J1blN0YXRlID09IEZpbmlzaGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0g
QWJvcnRlZAorICAgICAgICB8fCBtX3J1blN0YXRlID09IFBhdXNlZDsKK30KKwogZG91YmxlIEND
QWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBj
b25zdAogewogICAgIGRvdWJsZSB0cmltbWVkID0gbm93OwpAQCAtOTUsNCArMTEyLDQxIEBAIGRv
dWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91Ymxl
IG5vdykgY29uc3QKICAgICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5k
dXJhdGlvbigpKTsKIH0KIAorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVB
bmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0Cit7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9h
bmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAg
ICBwdXNoUHJvcGVydGllc1RvKHRvUmV0dXJuLmdldCgpKTsKKyAgICByZXR1cm4gdG9SZXR1cm4u
cmVsZWFzZSgpOworfQorCit2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpwdXNoUHJvcGVydGllc1Rv
KENDQWN0aXZlQW5pbWF0aW9uKiBvdGhlcikgY29uc3QKK3sKKyAgICBvdGhlci0+bV9ydW5TdGF0
ZSA9IG1fcnVuU3RhdGU7CisgICAgb3RoZXItPm1faXRlcmF0aW9ucyA9IG1faXRlcmF0aW9uczsK
KyAgICBvdGhlci0+bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZTsKKyAgICBvdGhlci0+bV9wYXVz
ZVRpbWUgPSBtX3BhdXNlVGltZTsKKyAgICBvdGhlci0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3Rv
dGFsUGF1c2VkVGltZTsKK30KKwordm9pZCBDQ0FjdGl2ZUFuaW1hdGlvbjo6c3luY2hyb25pemVQ
cm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKiBvdGhlcikKK3sKKyAgICAvLyBJdCBpcyBwb3Nz
aWJsZSBmb3IgdGhlIGltcGwgdGhyZWFkIHRvIGluaXRpYXRlIGEgcnVuIHN0YXRlIGNoYW5nZS4K
KyAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgYW5pbWF0aW9uIHdhcyB3YWl0aW5nIGZvciBh
IGZ1dHVyZSBldmVudCB0byB0YWtlCisgICAgLy8gcGxhY2UsIGFuZCB0aGUgZXZlbnQgaGFzIHRh
a2VuIHBsYWNlLiBJbiB0aGF0IGNhc2UsIHdlIHdhbnQgJ3RoaXMnIHRvCisgICAgLy8gYXNzdW1l
IHRoZSBpbXBsIHRocmVhZCdzIHJ1biBzdGF0ZSBhbmQgc3RhcnQgdGltZS4KKyAgICBpZiAoaXNX
YWl0aW5nKCkgJiYgb3RoZXItPmlzUnVubmluZ09ySGFzUnVuKCkpIHsKKyAgICAgICAgbV9ydW5T
dGF0ZSA9IG90aGVyLT5tX3J1blN0YXRlOworICAgICAgICBtX3N0YXJ0VGltZSA9IG90aGVyLT5t
X3N0YXJ0VGltZTsKKyAgICB9IGVsc2UgeworICAgICAgICBvdGhlci0+bV9ydW5TdGF0ZSA9IG1f
cnVuU3RhdGU7CisgICAgICAgIG90aGVyLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAg
IH0KKworICAgIC8vIENoYW5nZSBpbiBzdGF0ZSByZWxhdGVkIHRvIGl0ZXJhdGlvbnMgYW5kIHBh
dXNlIGlzIGFsd2F5cyBpbml0aWF0ZWQgZnJvbQorICAgIC8vIHRoZSBtYWluIHRocmVhZCwgc28g
aXQgaXMgc2FmZSB0byBwdXNoIHByb3BlcnRpZXMgaW4gdGhhdCBkaXJlY3Rpb24uCisgICAgb3Ro
ZXItPm1faXRlcmF0aW9ucyA9IG1faXRlcmF0aW9uczsKKyAgICBvdGhlci0+bV9wYXVzZVRpbWUg
PSBtX3BhdXNlVGltZTsKKyAgICBvdGhlci0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1
c2VkVGltZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmgKaW5kZXggYzIyMjI3OTQxYTNjZWQxMmQ2NThkNzZkNjA0ZWVlOWZiYWQwYTNk
MS4uODY5NTEzY2Q0MDAwMGM3YTEyZDdjMzdhNDNhZWVhZWUwZDYwNjEzOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCkBAIC0yNSwyNCArMjUsMjcgQEAKICNpZm5kZWYgQ0NBY3Rp
dmVBbmltYXRpb25faAogI2RlZmluZSBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAKKyNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NBbmlt
YXRpb25DdXJ2ZTsKLQogLy8gQSBDQ0FjdGl2ZUFuaW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBz
dGF0ZSByZXF1aXJlZCB0byBwbGF5IGEgQ0NBbmltYXRpb25DdXJ2ZS4KIC8vIFNwZWNpZmljYWxs
eSwgdGhlIGFmZmVjdGVkIHByb3BlcnR5LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVk
LCBldGMuKSwKIC8vIGxvb3AgY291bnQsIGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0
aW1lIHNwZW50IHBhdXNlZC4KIGNsYXNzIENDQWN0aXZlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ0FjdGl2ZUFuaW1hdGlvbik7CiBwdWJsaWM6CiAgICAgLy8gQW5pbWF0
aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBo
YXZlIHRoZSBzYW1lIEdyb3VwSUQKICAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJh
bnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwog
ICAgIC8vIG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1
bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0aGUKICAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFu
aW1hdGluZy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQK
ICAgICAvLyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0
eXBlZGVmIGludCBHcm91cElEOworICAgIHR5cGVkZWYgc2l6ZV90IEdyb3VwSUQ7CiAKICAgICAv
LyBBbmltYXRpb25zIGJlZ2luIGluIG9uZSBvZiB0aGUgJ3dhaXRpbmcnIHN0YXRlcy4gQW5pbWF0
aW9ucyB3YWl0aW5nIGZvciB0aGUgbmV4dCB0aWNrCiAgICAgLy8gd2lsbCBzdGFydCB0aGUgbmV4
dCB0aW1lIHRoZSBjb250cm9sbGVyIGFuaW1hdGVzLiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRh
cmdldApAQCAtNjgsMTIgKzcxLDM0IEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07
CiAKKyAgICBzdHJ1Y3QgQW5pbWF0aW9uU2lnbmF0dXJlIHsKKyAgICAgICAgQW5pbWF0aW9uU2ln
bmF0dXJlKEdyb3VwSUQgZ3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisg
ICAgICAgICAgICA6IGdyb3VwSUQoZ3JvdXBJRCkKKyAgICAgICAgICAgICwgdGFyZ2V0UHJvcGVy
dHkodGFyZ2V0UHJvcGVydHkpIHsgfQorICAgICAgICBHcm91cElEIGdyb3VwSUQ7CisgICAgICAg
IFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5OworICAgIH07CisKKyAgICBzdHJ1Y3QgQW5p
bWF0aW9uUmVzdWx0IHsKKyAgICAgICAgQW5pbWF0aW9uUmVzdWx0KGludCBsYXllcklELCBkb3Vi
bGUgdGltZSwgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSkKKyAgICAgICAgICAgIDogbGF5
ZXJJRChsYXllcklEKQorICAgICAgICAgICAgLCB0aW1lKHRpbWUpCisgICAgICAgICAgICAsIHNp
Z25hdHVyZShzaWduYXR1cmUpIHsgfQorICAgICAgICBpbnQgbGF5ZXJJRDsKKyAgICAgICAgZG91
YmxlIHRpbWU7CisgICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZSBzaWduYXR1cmU7CisgICAgfTsK
KworICAgIHN0cnVjdCBBbmltYXRpb25SZXN1bHRzIHsKKyAgICAgICAgVmVjdG9yPEFuaW1hdGlv
blJlc3VsdD4gc3RhcnRlZEFuaW1hdGlvbnM7CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZl
PiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZl
LCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5DQ0FjdGl2
ZUFuaW1hdGlvbigpIHsgfQorICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCk7CiAKICAg
ICBHcm91cElEIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cDsgfQogICAgIFRhcmdldFBy
b3BlcnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0eTsg
fQpAQCAtOTMsNiArMTE4LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaW5pc2hlZEF0KGRvdWJs
ZSB0aW1lKSBjb25zdDsKICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3J1
blN0YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZDsgfQogCisgICAgYm9v
bCBpc1dhaXRpbmcoKSBjb25zdDsKKyAgICBib29sIGlzUnVubmluZ09ySGFzUnVuKCkgY29uc3Q7
CisKICAgICBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5p
bWF0aW9uQ3VydmUuZ2V0KCk7IH0KICAgICBjb25zdCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRp
b25DdXJ2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KIApAQCAt
MTAwLDYgKzEyOCwxNiBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0
aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRy
aW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0OwogCisgICAgQW5pbWF0
aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1hdGlvblNpZ25hdHVy
ZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAgUGFzc093blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7CisKKyAgICAvLyBEb2VzIG5v
dCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgZ2l2ZW4gYWN0aXZlIGFuaW1hdGlvbi4KKyAgICB2b2lk
IHB1c2hQcm9wZXJ0aWVzVG8oQ0NBY3RpdmVBbmltYXRpb24qKSBjb25zdDsKKworICAgIC8vIERv
ZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBnaXZlbiBhY3RpdmUgYW5pbWF0aW9uLgorICAg
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5pbWF0aW9uKik7CisKIHByaXZh
dGU6CiAgICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwg
R3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgK
aW5kZXggZGU5N2UzOGMwYTI0ZTc3NzhiOGQ5NmRjOTBmZWY2ZWM5OTM5YmFlMy4uNTMzYWJhZmVm
NDU0N2Q1NDkzYmE1OTcxMWJlMTU1MTY2N2VlMjRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaApAQCAtMjUsNiArMjUsMTAgQEAKICNpZm5kZWYgQ0NBbmltYXRpb25DdXJ2ZV9oCiAj
ZGVmaW5lIENDQW5pbWF0aW9uQ3VydmVfaAogCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOwpAQCAtNDEsNiArNDUsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKICAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0
aW9uQ3VydmUqIHRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpIGNvbnN0OwogICAgIGNvbnN0IENDVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSBjb25zdDsK
QEAgLTYwLDcgKzY1LDcgQEAgY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6IHB1Ymxp
YyBDQ0FuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbnMgZ2V0
VmFsdWUoZG91YmxlIHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBsYXllclNpemUpIGNvbnN0ID0g
MDsKIAogICAgIC8vIFBhcnRpYWwgQ0NBbmltYXRpb24gaW1wbGVtZW50YXRpb24uCiAgICAgdmly
dHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBUcmFuc2Zvcm07IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmE1
NTAzODdlMTY3NThlZjIxODRlNGUyMjdhNTgwYzgyMjYwMmY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxp
c3QKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgLypi
b3hTaXplKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0KQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKK30KKwordm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7
Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMo
KQoreworfQorCisvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMg
b24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5
bmMuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlv
bnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAg
ICByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsK
KyAgICBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChjb250cm9sbGVySW1wbCk7CisgICAg
cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChjb250cm9sbGVySW1wbCk7Cisg
ICAgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoY29udHJvbGxlckltcGwpOworfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25JbXBs
VGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7
CisgICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkIGFyZSBy
ZW1vdmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9u
c1tpXS5ncm91cElELCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0udGFy
Z2V0UHJvcGVydHkpOworICAgIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5j
bGVhcigpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5p
bWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRy
b2xsZXJJbXBsKQoreworICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0aGUgbWFp
biB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhlIGltcGwgdGhy
ZWFkJ3MgY29udHJvbGxlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5nZXRB
Y3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQorICAgICAgICAgICAgY29udHJvbGxlcklt
cGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlv
bnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBj
b250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlv
bnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0
aW9uLgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFy
YW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
KSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0
aW9uKGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIGNvbnRy
b2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOworICAg
ICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVB
bmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAg
IH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblBy
b3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkK
K3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRo
ZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgorICAgIC8vIEVh
Y2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRl
Y3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jl
c3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+bV9hY3Rp
dmVBbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVu
dCA9IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVudEltcGwt
PnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBBU1NFUlQoY3VycmVudCk7CisgICAgICAgIGlm
IChjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0aWVzKGN1
cnJlbnRJbXBsKTsKKyAgICB9Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91
cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVy
dHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0g
Z3JvdXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdl
dFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2OTc2MDQ2NTJi
M2U3N2UzOWQ2YmI4NWMzM2E5YzRhNjE0ZDExNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlci5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgor
CisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDsKK3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CisKK2NsYXNzIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkgeyB9CisKKyAgICBib29s
IGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJv
eFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91
YmxlIHRpbWVPZmZzZXQpOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCByZW1vdmVBbmltYXRp
b24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKworICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAg
Ly8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWlu
IHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCisgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhp
cyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29u
dHJvbGxlci4KKyAgICB2b2lkIHN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwqKTsKKworICAgIC8vIFRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMg
b25seS4KKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+JiBhY3RpdmVBbmlt
YXRpb25zKCkgeyByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIHZvaWQgcmVtb3ZlQW5pbWF0
aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
KTsKKyAgICB2b2lkIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9u
TWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1
c2hBbmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwor
CisgICAgQ0NBY3RpdmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1h
dGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICB2
b2lkIHJlbW92ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246
OlRhcmdldFByb3BlcnR5KTsKKworICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
ID4gbV9hY3RpdmVBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKaW5kZXggYmJjYTljYmQ5
MDU1ZTFlYzEzY2MwYTk3NDYzOWM1Zjk3MDg4MDk5Mi4uZjUyNjFiYzJiMTk5MmM2MjRiOTkyNDRh
MjNiZDk1ZTFmNzYxMTMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJj
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00NCwyMiArNDUsMjAgQEAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlv
bkMKIHsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQWN0aXZlQW5pbWF0
aW9uOjpBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQogewotICAgIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JOZXh0VGljayhmcmFtZUJlZ2luVGltZVNlY3MpOwotICAgIHN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWUoZnJhbWVCZWdpblRpbWVTZWNzKTsKLSAgICBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2Vjcyk7Cisg
ICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGZyYW1lQmVnaW5UaW1lU2Vjcywg
cmVzdWx0cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShmcmFtZUJl
Z2luVGltZVNlY3MsIHJlc3VsdHMpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzKTsKICAgICByZXNvbHZl
Q29uZmxpY3RzKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgdGlja0FuaW1hdGlvbnMoZnJhbWVC
ZWdpblRpbWVTZWNzKTsKICAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwotICAgIHN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNz
KTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1l
QmVnaW5UaW1lU2VjcywgcmVzdWx0cyk7CiB9CiAKIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKIHsKICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUodGhpcyk7
CiB9CiAKIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCBncm91cCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQpAQCAtODAsMjUgKzc5LDI4
IEBAIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpoYXNBY3RpdmVBbmltYXRp
b24oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUg
bm93KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbm93LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0
aW9uUmVzdWx0cyogcmVzdWx0cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRp
Y2spIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgcmVzdWx0cy0+c3RhcnRl
ZEFuaW1hdGlvbnMuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25SZXN1bHQobV9j
bGllbnQtPmlkKCksIG5vdywgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zaWduYXR1cmUoKSkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KQordm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWUoZG91YmxlIG5vdywgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMq
IHJlc3VsdHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVu
U3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG5vdykKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGlu
Z0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG5v
dykgewogICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAgICAgICAgICAgIHJlc3VsdHMtPnN0YXJ0
ZWRBbmltYXRpb25zLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0KG1f
Y2xpZW50LT5pZCgpLCBub3csIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0dXJlKCkpKTsK
KyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5v
dykKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNX
YWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQWN0aXZlQW5pbWF0aW9u
OjpBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQogewogICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVu
bmluZyBwcm9wZXJ0aWVzLgogICAgIFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7
CkBAIC0xMzQsNiArMTM2LDcgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPmdyb3VwKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5v
dyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFN0
YXJ0VGltZShub3cpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy0+c3RhcnRlZEFu
aW1hdGlvbnMuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25SZXN1bHQobV9jbGll
bnQtPmlkKCksIG5vdywgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zaWduYXR1cmUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MTc4LDkgKzE4MSwxMCBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVy
Z2VGaW5pc2hlZEFuaW1hdGlvbnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisg
ICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAg
bV9maW5pc2hlZEFuaW1hdGlvbnMuYXBwZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0
dXJlKCkpOwogICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAg
ICAgZWxzZQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGkrKzsKICAgICB9CiB9CkBAIC0x
OTQsMTQgKzE5OCwxMSBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlj
a0FuaW1hdGlvbnMoZG91YmxlIG5vdykKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtOiB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPmFuaW1hdGlvbkN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAg
ICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0cmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUt
PmdldFZhbHVlKHRyaW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OkZpbmlzaGVkLCBub3cpOwogCi0gICAgICAgICAgICAgICAgLy8gRGVjaWRlIGhlcmUg
aWYgYWJzb2x1dGUgb3IgcmVsYXRpdmUuIEFic29sdXRlIGZvciBub3cuCi0gICAgICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9BcHBseTsKLSAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLmFwcGx5KEZsb2F0U2l6ZSgpLCB0b0FwcGx5KTsKLSAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+c2V0VHJhbnNmb3JtKHRvQXBwbHkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRU
cmFuc2Zvcm0obWF0cml4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
aAppbmRleCAxYWQyMjNkYmE4MjNhMmEwNTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Li41N2YyNzU2
MTJhMjhmMjg4OGM3NWE1ZTBiYTAwZTUwNzJlZDgwMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaApAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNDQsMTggKzQ1LDIwIEBAIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsQ2xpZW50KCkgeyB9CiAKKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE9w
YWNpdHkoZmxvYXQpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9IDA7
CiB9OwogCiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBj
cmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CiAKLSAgICB2b2lk
IGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgdm9pZCBhbmltYXRlKGRv
dWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25SZXN1
bHRzKik7CiAKICAgICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7CiAK
QEAgLTY3LDEyICs3MCwxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24o
KSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI7CisKICAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgog
ICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdyk7CisgICAgdm9pZCBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdywgQ0NBY3RpdmVBbmltYXRpb246
OkFuaW1hdGlvblJlc3VsdHMqKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWUoZG91YmxlIG5vdywgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMq
KTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHko
ZG91YmxlIG5vdywgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMqKTsKICAgICB2
b2lkIHJlc29sdmVDb25mbGljdHMoZG91YmxlIG5vdyk7CiAgICAgdm9pZCBwdXJnZUZpbmlzaGVk
QW5pbWF0aW9ucygpOwogCkBAIC04MCw2ICs4NSw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3RvcjxPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZlY3RvcjxD
Q0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlPiBtX2ZpbmlzaGVkQW5pbWF0aW9u
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApp
bmRleCA4MWY5NzEyZTBmYWMwZjk4MTI4ODhkYTJlNzNmZjMzZWZkNjA2NWE0Li5lODkyOThlMWYz
ZDMzYThhMGRkYjI0MTYzNDc0NjE3MmYzYzE0MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3
UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JE
cmF3UXVhZC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjEsNiArNjIs
NyBAQCBDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9kcmF3T3BhY2l0
eSgwKQogICAgICwgbV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVn
Qm9yZGVyV2lkdGgoMCkKKyAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSh0aGlzKSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMDBlMGFkZjhhNTFm
ZGVjMDRhOWY0MjVmMDQ1N2FhMzM4OGNlYTNhYS4uMzNlYmQ0NzM3YWRmNDdlYzYxNmY0NmQ1Njcz
ZmJjZGFkMzcxYmUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNj
L0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQwLDE2ICs0
MSwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDsKIGNsYXNzIENDTGF5ZXJTb3J0ZXI7CiBjbGFzcyBMYXllckNocm9taXVt
OwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogCi1jbGFzcyBDQ0xheWVySW1wbCA6IHB1
YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CitjbGFzcyBDQ0xheWVySW1wbCA6IHB1Ymxp
YyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEND
TGF5ZXJJbXBsKGlkKSk7CiAgICAgfQorCisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllcklkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQp
OworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6
ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KKwogICAgIHZpcnR1YWwgfkND
TGF5ZXJJbXBsKCk7CiAKICAgICAvLyBUcmVlIHN0cnVjdHVyZS4KQEAgLTY1LDggKzc2LDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
KTsKICAgICBDQ0xheWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBs
aWNhTGF5ZXIuZ2V0KCk7IH0KIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJ
ZDsgfQotCiAjaWZuZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4g
bV9kZWJ1Z0lEOyB9CiAjZW5kaWYKQEAgLTEwNiw5ICsxMTUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRPcGFxdWUoYm9vbCk7CiAgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29w
YXF1ZTsgfQogCi0gICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKLSAgICBmbG9hdCBvcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0KICAgICB2b2lkIHNldFBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmKTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIApAQCAtMTI0LDkgKzEzMCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQogICAg
IHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkBAIC0xNDks
NyArMTUyLDYgQEAgcHVibGljOgogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQg
c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRz
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJ
bnRTaXplJik7CiAKICAgICBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50Qm91bmRzOyB9CkBAIC0xOTgsNiArMjAwLDggQEAgcHVibGljOgogICAg
IGJvb2wgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVy
dHlDaGFuZ2VkOyB9CiAgICAgdm9pZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgp
OwogCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBhbmltYXRpb25Db250cm9s
bGVyKCkgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisKIHByb3RlY3Rl
ZDoKICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwogCkBAIC0zMDUsNiArMzA5LDkgQEAg
cHJpdmF0ZToKICAgICAvLyBSZWN0IGluZGljYXRpbmcgd2hhdCB3YXMgcmVwYWludGVkL3VwZGF0
ZWQgZHVyaW5nIHVwZGF0ZS4KICAgICAvLyBOb3RlIHRoYXQgcGx1Z2luIGxheWVycyBieXBhc3Mg
dGhpcyBhbmQgbGVhdmUgaXQgZW1wdHkuCiAgICAgRmxvYXRSZWN0IG1fdXBkYXRlUmVjdDsKKwor
ICAgIC8vIE1hbmFnZXMgYW5pbWF0aW9ucyBmb3IgdGhpcyBsYXllci4KKyAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiB9Owog
CiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3Ig
Zmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXll
clNvcnRlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNGZmODQzNGIy
MDBjOTJkNDhhMDhiZjkxYzE0YjI3ZjgyMTlkZGFiNi4uODYzNDdkMGZlZWM2YWZkNDM2ZTRlZDE1
ZjAzODIxNTE4NjRmOTdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0x
NTQsOSArMTU0LDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxU
aHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhp
c3RzIGF0IGFsbC4uLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICBpZiAocm9vdExheWVyKCkp
IHsKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKLSAgICBl
bHNlCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnModHJ1ZSk7CisgICAg
fSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAKICAgICBob3N0SW1w
bC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CkBAIC0yMzYsNiArMjM3LDEy
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdygpCiAgICAgICAgIG1fY2xp
ZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
QW5pbWF0aW9uUmVzdWx0cyhjb25zdCBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0
cyYgcmVzdWx0cykKK3sKKyAgICBBU1NFUlQoQ0NUaHJlYWRQcm94eTo6aXNNYWluVGhyZWFkKCkp
OworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4gV2lsbCBoYXZlIHRvIHdhbGsgdGhlIHRy
ZWUuCit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxM
YXllckNocm9taXVtPiByb290TGF5ZXIpCiB7CiAgICAgaWYgKG1fcm9vdExheWVyID09IHJvb3RM
YXllcikKQEAgLTMxMyw5ICszMjAsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29t
ZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW0KICAgICAg
ICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAocm9vdExheWVyKCkpCisKKyAgICBpZiAocm9vdExheWVyKCkpIHsKICAgICAgICAgaG9z
dEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJv
b3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKLSAgICBlbHNlCisgICAgICAgIGhv
c3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnModHJ1ZSk7CisgICAgfSBlbHNlCiAgICAgICAg
IGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmgKaW5kZXggZjU4MjAzZDE1ZWIyMDQ1MDcxYzJlZmE0NDhiYTQwYmYxOWE1NGNhYS4uYzJiZTQ1
OWRhNzJkNTUzYmFiYWYwZjk2ZTdhNjA1MzljYTZhYTlhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiUmF0ZUxpbWl0ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogCkBAIC0xNjYsNiAr
MTY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogICAg
IHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAorICAgIHZvaWQgc2V0QW5pbWF0aW9uUmVzdWx0cyhj
b25zdCBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyYpOworCiAgICAgTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICBj
b25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXll
ci5nZXQoKTsgfQogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAxODQ2ZDZj
MmVmNWI3NGNlYzcxMTUyNmM4ZTRkZTJlMTg3NzE3YTU0Li5hYjNjNDk0MTM4ZjNmMGE3MDAyMTc2
OTdiZjRjMTM5YTYzMzhmNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcApAQCAtNTcsNiArNTcsNyBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhv
c3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgICwgbV9z
ZW50UGFnZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fbWluUGFnZVNjYWxlKDApCiAgICAgLCBtX21h
eFBhZ2VTY2FsZSgwKQorICAgICwgbV9uZWVkc0FuaW1hdGVMYXllcnModHJ1ZSkKICAgICAsIG1f
cGluY2hHZXN0dXJlQWN0aXZlKGZhbHNlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CkBAIC0xMTIsNiArMTEzLDE0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKICAgICAgICAgbV9wYWdlU2NhbGVBbmlt
YXRpb24uY2xlYXIoKTsKICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCk7CiAgICAgfQorCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0SW1wbDo6YW5pbWF0ZUxheWVycyIsIHRoaXMsIDApOworICAgICAgICBpZiAobV9uZWVkc0Fu
aW1hdGVMYXllcnMpIHsKKyAgICAgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25S
ZXN1bHRzIHJlc3VsdHM7CisgICAgICAgICAgICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1h
dGVMYXllcnMobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZUJlZ2luVGltZU1zIC8gMTAwMCwg
JnJlc3VsdHMpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9u
LCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVNcywg
ZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0yNDQsNiArMjUzLDI0IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQog
ICAgICAgICBwYXNzZXNbaV0tPm9wdGltaXplUXVhZHMoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKENDTGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgZnJh
bWVCZWdpblRpbWVTZWNzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyogcmVz
dWx0cykKK3sKKyAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOworCisgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKSB7CisgICAgICAgIG5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7Cisg
ICAgICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lU2VjcywgcmVz
dWx0cyk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJyZW50LT5jaGls
ZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhbmltYXRlTGF5ZXJzKGN1cnJlbnQt
PmNoaWxkcmVuKClbaV0uZ2V0KCksIGZyYW1lQmVnaW5UaW1lU2VjcywgcmVzdWx0cykpCisgICAg
ICAgICAgICBuZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBu
ZWVkc0FuaW1hdGVMYXllcnM7Cit9CisKIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29u
dGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTogSGFyZGNvZGluZyB0aGUg
Zmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaAppbmRleCBhNzFhZGFlNjc1MzJmMzI0OTZhNTQyODRhYTU3ZjcwYjM0MDRj
ZDAxLi43M2M5MTBkNjY0ZjIwY2Q0NjUzODczZmVjMTE1YjljNjg4MzNhNDAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIEND
TGF5ZXJUcmVlSG9zdEltcGxfaAogI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKIAorI2lu
Y2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCkBAIC01Miw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
b25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1c2hBbmlt
YXRpb25SZXN1bHRzKGNvbnN0IENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25SZXN1bHRzJikg
PSAwOwogfTsKIAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0
cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKQEAgLTExNyw2ICsxMTks
OSBAQCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHByb2Nl
c3NTY3JvbGxEZWx0YXMoKTsKIAorICAgIGJvb2wgbmVlZHNBbmltYXRlTGF5ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KKyAgICB2b2lkIHNldE5lZWRzQW5pbWF0
ZUxheWVycyhib29sIG5lZWRzQW5pbWF0ZUxheWVycykgeyBtX25lZWRzQW5pbWF0ZUxheWVycyA9
IG5lZWRzQW5pbWF0ZUxheWVyczsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0
SW1wbChjb25zdCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwogICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50OwpAQCAtMTMzLDYgKzEzOCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBs
KiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwog
ICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIGJv
b2wgYW5pbWF0ZUxheWVycyhDQ0xheWVySW1wbCosIGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3Ms
IENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25SZXN1bHRzKik7CiAgICAgSW50U2l6ZSBjb250
ZW50U2l6ZSgpIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9s
YXllclJlbmRlcmVyOwpAQCAtMTQ4LDYgKzE1NCw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9z
ZW50UGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNj
YWxlOwogCisgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBuZWNlc3NhcnkgdG8gdHJhdmVy
c2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3JzLgorICAgIGJvb2wgbV9uZWVk
c0FuaW1hdGVMYXllcnM7CiAgICAgYm9vbCBtX3BpbmNoR2VzdHVyZUFjdGl2ZTsKIAogICAgIE93
blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2NhbGVBbmltYXRpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggNGZhYTIyOTk5MTJhZWM5YzRlNmFiNGJh
NzAyN2Q4MWM4MDZkNDVlZS4uYzFjYTk4Nzc2YzIyN2M1OWVmODE3YTBmNWY2NjIxYTI0ODljY2Zi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtNjAsNiArNjAsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRo
cmVhZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIHsgbV9s
YXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHB1c2hB
bmltYXRpb25SZXN1bHRzKGNvbnN0IENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25SZXN1bHRz
JiByZXN1bHRzKSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uUmVzdWx0cyhyZXN1bHRz
KTsgfQogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgcGF0aCB3aGVyZSBSZW5kZXJXaWRn
ZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDVlNmE4Zjg2MjYyZGY2MjQ0OTQyZTVi
NDJiNDJlYmFhODg4MzNhMmQuLmNiZDRiYjM5Y2ZkYjE4Y2M0ZTY4NjEyOTIxZDFjNTdkMGE0YzY5
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yMjcsNiArMjI3LDE2IEBAIHZv
aWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKQogICAgIG1fc2No
ZWR1bGVyT25JbXBsVGhyZWFkLT5zZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIENDVGhyZWFk
UHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRzKGNvbnN0IENDQWN0aXZlQW5pbWF0aW9uOjpBbmlt
YXRpb25SZXN1bHRzJiByZXN1bHRzKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRzIiwgdGhp
cywgMCk7CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBDQ0FjdGl2ZUFu
aW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyBjb3B5ID0gcmVzdWx0czsKKyAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpwdXNoQW5pbWF0aW9uUmVzdWx0cywgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlv
biksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvcHkpKSk7CisgICAgY29tcGxldGlvbi53YWl0
KCk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC01MjgsNiArNTM4LDEyIEBAIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpCiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRD
b21wbGV0ZVN3YXBCdWZmZXJzKCk7CiB9CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6cHVzaEFuaW1h
dGlvblJlc3VsdHMoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIENDQWN0aXZlQW5pbWF0
aW9uOjpBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0QW5pbWF0aW9uUmVzdWx0cygqcmVzdWx0cyk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7
Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmgKaW5kZXggYTExYjUyNzg1OTkzMWNmYjk4Zjg3MjRhNTEyNDNhMDliNGVjYzNi
OS4uODA1YjY1NTE1ZDUyZmZmZmJjM2Y1YTBjZDk5ZjJhZGY0NzJlN2M4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuaApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Nv
bW1pdE9uSW1wbFRocmVhZCgpOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uUmVzdWx0
cyhjb25zdCBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyYpOwogCiAgICAgLy8g
Q0NTY2hlZHVsZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJh
dygpOwpAQCAtODQsNiArODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYmVnaW5GcmFtZUFuZENv
bW1pdChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0
cjxDQ1Njcm9sbEFuZFNjYWxlU2V0Pik7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUo
KTsKICAgICB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHB1c2hBbmlt
YXRpb25SZXN1bHRzKENDQ29tcGxldGlvbkV2ZW50KiwgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1h
dGlvblJlc3VsdHMqKTsKIAogICAgIC8vIENhbGxlZCBvbiBpbXBsIHRocmVhZAogICAgIHN0cnVj
dCBSZWFkYmFja1JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTE1
ZmJmY2FhODZkNzU1NjM5ZWVjODFhN2I3ZWY2N2RkNjZjNTBiZi4uZjMzMTk4MjE5YWRmN2Q1ZjBm
OTJiMjE2YWVmMDA4NjI5OGQxMWFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5
QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRl
Q29udHJvbGxlclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1ZGU4NjhhMmYzYTI1
YWIwMzAyMGVkMjVjMWQwZWM0OTBhLi4yNjFlZGZmZjg1MmYzM2MxM2I0OTIxYmU3MGU2MDllNDJm
NWUyYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZl
QW5pbWF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Fj
dGl2ZUFuaW1hdGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgi
CiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgRmFr
ZUZsb2F0QW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAg
dmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9Ci19
OworbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMSwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25z
KTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAtMTY0LDQgKzE2MCw0IEBA
IFRFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQogICAgIEVYUEVDVF9UUlVF
KGFuaW0tPmlzRmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8g
bmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5p
bWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1h
dGlvblRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmQ4YTJmZTIxNTFlNjhmMmQ1NmM2YzlhMDQ3
YjZjZDk4M2VmOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisjZGVmaW5lIENDQW5pbWF0aW9u
VGVzdENvbW1vbl9oCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK2NsYXNzIEZh
a2VGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25D
dXJ2ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSB7
IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsgfQor
ICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9u
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlKTsKKyAgICB9Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
biA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoK
KyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlv
bihkdXJhdGlvbikgeyB9CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKSB7
IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJh
dGlvbjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFs
dWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xv
bmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9k
dXJhdGlvbjsKK307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgV2ViQ29y
ZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRUcmFuc2l0
aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgICAgIDogbV9k
dXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAgICAgLCBtX3Rv
KHRvKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRUcmFuc2l0aW9uKCkg
eyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVy
YXRpb247IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOworICAgICAgICBpZiAodGltZSA+PSAx
KQorICAgICAgICAgICAgdGltZSA9IDE7CisgICAgICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9m
cm9tICsgdGltZSAqIG1fdG87CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxv
YXQgbV90bzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNlbmRpZiAvLyBD
Q0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qu
Y3BwCmluZGV4IDNkNTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTViMGY1M2IuLjZkNmJl
NDM5MTViYmI5MzUwYWI5YWNjNDM2NjU4NDg1M2M2ZWRkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LmNwcApAQCAtMjQsMTYgKzI0LDE1IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLQogI2luY2x1
ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2UgewogCkBAIC00Miw3NCArNDEsMzkgQEAgcHVibGlj
OgogICAgIEZha2VDb250cm9sbGVyQ2xpZW50KCkgOiBtX29wYWNpdHkoMCkgeyB9CiAgICAgdmly
dHVhbCB+RmFrZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KIAorICAgIHZpcnR1YWwgaW50IGlkKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmVDb250cm9s
bGVycy5hcHBlbmQoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgVmVjdG9yPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVycygpIHsgcmV0dXJuIG1fYWN0
aXZlQ29udHJvbGxlcnM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIFZlY3RvcjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqPiBtX2FjdGl2ZUNvbnRyb2xsZXJzOwotfTsKLQot
Y2xhc3MgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24gOiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oZG91YmxlIGR1
cmF0aW9uKSA6IG1fZHVyYXRpb24oZHVyYXRpb24pIHsgfQotICAgIHZpcnR1YWwgZG91YmxlIGR1
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIHZpcnR1YWwgVHJhbnNm
b3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb25zKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGRv
dWJsZSBtX2R1cmF0aW9uOworICAgIEludFNpemUgbV9ib3VuZHM7CiB9OwogCi1jbGFzcyBGYWtl
RmxvYXRUcmFuc2l0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6
Ci0gICAgRmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZs
b2F0IHRvKQotICAgICAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCi0gICAgICAgICwgbV9mcm9t
KGZyb20pCi0gICAgICAgICwgbV90byh0bykKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBk
b3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVh
bCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHRpbWUg
Lz0gbV9kdXJhdGlvbjsKLSAgICAgICAgaWYgKHRpbWUgPj0gMSkKLSAgICAgICAgICAgIHRpbWUg
PSAxOwotICAgICAgICByZXR1cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLSAgICBmbG9hdCBtX2Zy
b207Ci0gICAgZmxvYXQgbV90bzsKLX07CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBj
cmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwg
aW50IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCit7Cisg
ICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIGlkLCBwcm9wZXJ0eSk7
Cit9CiAKIC8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdv
cmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsVHJhbnNpdGlvbikKIHsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9u
UmVzdWx0cyByZXN1bHRzOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9s
bGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9
CkBAIC0xMTcsMjAgKzgxLDIxIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiAvLyBUZXN0cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0
aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNlcXVlbmNlLgogVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVldWluZykKIHsKKyAg
ICBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyByZXN1bHRzOwogICAgIEZha2VD
b250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAmcmVzdWx0
cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNU
X0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTEzOCwyMiArMTAzLDIzIEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCiAvLyBUZXN0
cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0aW9uLgogVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCiB7CisgICAg
Q0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMgcmVzdWx0czsKICAgICBGYWtlQ29u
dHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICZyZXN1bHRzKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OldhaXRpbmdGb3JOZXh0VGljaywgMCk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7IC8vIHNlY29uZCBh
bmltIHN0YXJ0cyBOT1cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICZyZXN1bHRzKTsg
Ly8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MS41LCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAg
LTE2MSwyMyArMTI3LDI0IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgSW50ZXJydXB0KQogLy8gVGVzdHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4g
dG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgogVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlz
QmxvY2tlZCkKIHsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyByZXN1
bHRzOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
KTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9F
USgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSwgJnJlc3VsdHMpOwogICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFy
dGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CiAgICAgLy8gVGhlIHRoZSBmbG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBh
dCB0aW1lIDEgYW5kIHNob3VsZCBiZSBkb25lLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VRKDEs
IGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE4NywyOSArMTU0LDMwIEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Js
b2NrZWQpCiAvLyBmb3IgYm90aCB0byBmaW5pc2gpLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiB7Cisg
ICAgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMgcmVzdWx0czsKICAgICBGYWtl
Q29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJv
bGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gQW5pbXMgd2l0aCBpZCAxIHNob3VsZCBi
b3RoIHN0YXJ0IG5vdy4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMCwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
ICAgICAvLyBUaGUgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIGhhdmUgZmluaXNoZWQgYXQgdGlt
ZSAxLCBidXQgdGhlIGdyb3VwCiAgICAgLy8gb2YgYW5pbWF0aW9ucyB3aXRoIGlkIDEgZG9uJ3Qg
ZmluaXNoIHVudGlsIHRpbWUgMiBiZWNhdXNlIG9mIHRoZSBsZW5ndGgKICAgICAvLyBvZiB0aGUg
dHJhbnNmb3JtIGFuaW1hdGlvbi4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMiwgJnJlc3VsdHMpOwogICAgIC8vIFNob3VsZCBub3QgaGF2ZSBz
dGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4KICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNp
dHkoKSk7CiAKICAgICAvLyBUaGUgdGhlIHNlY29uZCBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQg
c3RhcnQgYXQgdGltZSAyIGFuZCBzaG91bGQgYmUKICAgICAvLyBkb25lIGJ5IHRpbWUgMwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCAmcmVz
dWx0cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTIxNywyMiAr
MTg1LDIzIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1
bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQogLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmlt
YXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiB7CisgICAgQ0NBY3RpdmVBbmltYXRp
b246OkFuaW1hdGlvblJlc3VsdHMgcmVzdWx0czsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBk
dW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9s
bGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0
VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAmcmVzdWx0
cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI0MCwyOCArMjA5LDI5
IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmlt
YXRpb24pCiAvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUg
ZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5nIGFuaW1hdGlvbi4KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJy
dXB0c1J1bm5pbmdBbmltYXRpb24pCiB7CisgICAgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlv
blJlc3VsdHMgcmVzdWx0czsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2Fp
dGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNp
dHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICZyZXN1bHRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMiwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAg
IEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0y
NzAsMzQgKzI0MCwzNSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qs
IFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbQogLy8gYW5kIHRoZXJlIGlz
IHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgbGF0ZXIuCiBURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVw
dHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1ZXVlKQogeworICAgIENDQWN0aXZlQW5pbWF0
aW9uOjpBbmltYXRpb25SZXN1bHRzIHJlc3VsdHM7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRp
bWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250
cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91
bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAsICZyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMC41LCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICZyZXN1
bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICZyZXN1bHRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDQsICZyZXN1bHRzKTsKICAgICBFWFBFQ1RfRVEoMC43NWYs
IGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTMwNSw2NCArMjc2LDY2IEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5p
bmdBbmltCiAvLyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQgZm9yIHRo
ZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykKIHsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlv
bjo6QW5pbWF0aW9uUmVzdWx0cyByZXN1bHRzOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1
bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xs
ZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAg
ICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4y
NSwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsICZy
ZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMi4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAmcmVzdWx0
cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgJnJlc3VsdHMpOwog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBF
WFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICZyZXN1bHRzKTsKICAgICBFWFBFQ1Rf
RkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgx
LCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCAmcmVzdWx0
cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKIC8vIFRlc3QgdGhh
dCBhbiBpbmZpbml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFi
b3J0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRl
TG9vcGluZykKIHsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyByZXN1
bHRzOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlk
ID0gMTsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LjI1LCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwg
JnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MTA3Mzc0MTgyNC4yNSwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1KTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUsICZyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOwogCkBAIC0zNzUsODAgKzM0OCw2NiBAQCBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKIC8vIFRlc3QgdGhhdCBw
YXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3VtZSkKIHsKKyAgICBDQ0FjdGl2ZUFuaW1h
dGlvbjo6QW5pbWF0aW9uUmVzdWx0cyByZXN1bHRzOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50
IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRy
b2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZk
dW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAmcmVz
dWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgJnJlc3VsdHMpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
ICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7
CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTAyNCwgJnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRp
b24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0
LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUsICZyZXN1bHRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAy
NC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgJnJlc3VsdHMpOwogICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKIHsKKyAgICBDQ0FjdGl2ZUFu
aW1hdGlvbjo6QW5pbWF0aW9uUmVzdWx0cyByZXN1bHRzOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43
NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAmcmVzdWx0cyk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAmcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1t
eS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5p
bWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICZyZXN1bHRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIsICZyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRSghY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBhZGRpbmcgYW4gYW5pbWF0aW9uIHRv
IHRoZSBjb250cm9sbGVyIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBvbiB0aGUgY29u
dHJvbGxlciBjbGllbnQKLS8vIChpbiB0aGlzIGNhc2UsIGFkZGluZyB0aGUgY29udHJvbGxlciB0
byB0aGUgbGlzdCBvZiBhY3RpdmUgY29udHJvbGxlcikuCi1URVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIERpZEFjdGl2YXRlKQotewotICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZHVtbXkuYWN0aXZlQ29udHJv
bGxlcnMoKS5zaXplKCkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgxKSwg
ZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjb250cm9s
bGVyLmdldCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThmOGNiZDc1NzQwYWUyOTM5
ZTIzY2MyMzUwYS4uYWU2ZmFiN2U0OTExZWM5YjZiOTVlNGJlZDg0ZGE5YWFkMjVlMzlkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1f
ZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFuaW1hdGlv
blJlc3VsdHMoY29uc3QgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMmIHJlc3Vs
dHMpIHsgfQogCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vy
c2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCAxNTU3YTdkOTMy
MmNjNmJlMjA2YmY1MGIwMGMwZjQ3MDYzYzU0NzhiLi4xYjhiN2IzODJiNDAzNDZmOWY1YmY3M2Fj
NmM5ODJmMWVmNjQwMDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2LDMwIEBACiAKICNpbmNs
dWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21t
b24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVB
bmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2lu
Y2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0
czsKK3VzaW5nIHRlc3Rpbmc6OlRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VHJlZVN5bmNocm9uaXplclRlc3QgOiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBnZXRBbmltYXRpb25Db250cm9sbGVyKExheWVy
Q2hyb21pdW0qIGxheWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxheWVyLT5hbmltYXRpb25D
b250cm9sbGVyKCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1l
c3BhY2UgewogCkBAIC0xMTYsNyArMTMzLDcgQEAgdm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNh
bChMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCiB9CiAKIC8vIENv
bnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0
cnlpbmcgdG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxheWVycy4KLVRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMTI5LDcgKzE0Niw3IEBAIFRFU1QoVHJlZVN5
bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQogfQogCiAvLyBDb25zdHJ1
Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSBhbmQgc3luY2hyb25pemVzIGl0IGF0dGVtcHRpbmcgdG8g
cmV1c2Ugc29tZSBsYXllcnMKLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVU
cmVlUmV1c2luZ0xheWVycykKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBs
ZVRyZWVSZXVzaW5nTGF5ZXJzKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0xNTUsNyArMTcy
LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5
ZXJzKQogICAgIEVYUEVDVF9FUShzZWNvbmRDQ0xheWVySWQsIGNjTGF5ZXJEZXN0cnVjdGlvbkxp
c3RbMF0pOwogfQogCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFu
ZFByb3BlcnRpZXMpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVl
QW5kUHJvcGVydGllcykKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgpOwpAQCAtMTg3LDcgKzIwNCw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5
bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKICAgICBFWFBFQ1RfRVEoc2Vjb25kQ2hpbGRCb3Vu
ZHMuaGVpZ2h0KCksIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcy5oZWlnaHQoKSk7CiB9CiAKLVRF
U1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFu
Z2UpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVj
dHVyYWxDaGFuZ2UpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAg
VmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKQEAgLTIzNCw3ICsyNTEsNyBAQCBU
RVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hh
bmdlKQogfQogCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSwgc3luY2hyb25pemVz
IGl0LCB0aGVuIHN5bmNocm9uaXplcyB0byBhIHRvdGFsbHkgbmV3IHRyZWUuIEFsbCBsYXllcnMg
ZnJvbSB0aGUgb2xkIHRyZWUgc2hvdWxkIGJlIGRlbGV0ZWQuCi1URVNUKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQogewogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7
CkBAIC0yNjUsNyArMjgyLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBs
ZVRyZWVUaGVuRGVzdHJveSkKIH0KIAogLy8gQ29uc3RydWN0cytzeW5jcyBhIHRyZWUgd2l0aCBt
YXNrLCByZXBsaWNhLCBhbmQgcmVwbGljYSBtYXNrIGxheWVycy4KLVRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQorVEVTVF9GKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykK
IHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMzA3
LDUgKzMyNCw4NSBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FB
bmRSZXBsaWNhTWFza0xheWVycykKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRy
ZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogfQogCitURVNUX0YoVHJlZVN5
bmNocm9uaXplclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3Qg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRp
b25zLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKworICAg
IC8vIEFkZCBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQgY29udHJvbGxlci4KKyAgICBnZXRBbmlt
YXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCku
YXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNj
TGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJU
cmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVF
KGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRp
b24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9v
dC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKK30KKworVEVTVF9GKFRyZWVTeW5jaHJv
bml6ZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKK3sKKyAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9v
dCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBj
Y0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIDApOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVl
Um9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJl
ZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRp
b25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCkt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0
YXRlKCkpOworCisgICAgLy8gUHVzaCBhbiBhbmltYXRpb24gcHJvcGVydHkgY2hhbmdlIHRvIHRo
ZSBpbXBsIHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBhbiBhbmltYXRpb24gdG8gYmUgYWRkZWQp
LgorICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2
ZUFuaW1hdGlvbnMoKVswXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwg
MCk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAg
RVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVD
VF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwg
c3luY0Fib3J0ZWRBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25D
b250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5k
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFib3J0IGFuIGFuaW1hdGlv
biBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVy
VHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuY2xlYXIoKTsKKyAgICBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJU
cmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworfQorCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNDb21w
bGV0ZWRBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9s
bGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZl
KCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290
LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRB
Y3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgp
KTsKKworICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIHVudGlsIGl0IGlzIGZpbmlz
aGVkLiBBdCB0aGUgbmV4dCBzeW5jLCB0aGUgbWFpbiB0aHJlYWQncyBhbmltYXRpb24gc2hvdWxk
IGJlIGNsZWFyZWQuCisgICAgQ0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblJlc3VsdHMgcmVz
dWx0czsKKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0
ZSgwLCAmcmVzdWx0cyk7CisgICAgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVy
KCktPmFuaW1hdGUoMiwgJnJlc3VsdHMpOworCisgICAgRVhQRUNUX0ZBTFNFKGNjTGF5ZXJUcmVl
Um9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBnZXRBbmlt
YXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCku
c2l6ZSgpKTsKKworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJU
cmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9FUShz
aXplX3QoMCksIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFj
dGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125328</attachid>
            <date>2012-02-03 07:57:07 -0800</date>
            <delta_ts>2012-02-03 13:47:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120203105706.patch</filename>
            <type>text/plain</type>
            <size>106434</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJjMWY2NWI1MTQ3NWMy
Y2Y0ZWMwOTgwODUyMWFkNTM3NTBkNjRmZi4uZDY0MzA5NzA1ZThkZTZlNDkxN2NjZDNkZmYyZTJl
OGNlNzE3MDQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0wMyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtQ2hyb21pdW1MYXllckFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRD
b250ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhh
c1J1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBs
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRp
b25TaWduYXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDQW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHQ6OkNDQW5pbWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5p
bWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvblJlc3VsdHM6On5DQ0FuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHRzOjpzdGFydGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OkNDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEy
LTAyLTAxICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
Q29udGVudCBlbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3Jl
bW92ZWQvcmVwbGFjZWQgaW4gYSBzaGFkb3cgdHJlZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggYzk3ZTRjM2I4YjRhNTE3NzgzOWJiY2Y3YTFmNWI2YjUyODNlMDcwMC4uZTBiZDUxYjhh
NTU0YjE2YTYyMzI0Y2VhODI4OTg2NGVmMDk5YjI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMi0wMi0wMyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBsdW1iIGZyb20gR3JhcGhpY3NMYXll
ciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoRmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjp+
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChG
YWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFu
c2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNvbnRyb2xsZXJDbGllbnQ6OmlkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJv
bGxlckNsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OnB1c2hBbmlt
YXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAgICAqIHRlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJl
ZVN5bmNocm9uaXplclRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplclRl
c3Q6OmdldEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTAyLTAxICBLZW50IFRhbXVyYSAg
PHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIERpc2FibGUgV2ViRnJh
bWVUZXN0LkZpbmRJblBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDFjODdmNjlkY2E4MWNjMGVj
NDA0ZTFmYzhhMDY0YTg1MjNkMzgzLi42OTU5NjZhYmVjZTI0YjI1MWE2MjRiYjhmNTExZGYxYmIx
YTlkMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjI0LDYgKzMyMjQsNyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLApA
QCAtMzI0MSw2ICszMjQyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3ZTUxZTI0YWVlZDMyYWZlOTcwZS4uOGNhYmYzZWJj
NjdkZDc0ODM2ZmJlNTJkMTI0NzFhMzkyNzE0MWNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVu
KQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNo
aWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0g
ICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAg
ICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIApAQCAtMzY5LDYgKzM2OSwzNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXllci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFt
ZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJl
bW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1
c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGxhdGZvcm1DaHJvbWl1bUxheWVyQW5p
bWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgbV9jbGllbnQtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgc3RhcnRUaW1lKTsK
K30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwpA
QCAtMzgzLDEyICs0MTQsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAobV9jb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVl
OwotICAKKwogICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJl
bW92ZWQgdmlhIHVwZGF0ZUNoaWxkTGlzdC4KICAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9
IDA7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAg
ICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CkBAIC01MzcsNyArNTY4LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICBtX2xh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9y
bShpZGVudGl0eSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNldCB0aGUgb2xkIGxheWVyIHRv
IG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRo
ZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIG1fbGF5ZXItPnNldE9wYWNpdHkoMSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggMzliMzY3YjlkM2YwZTJmODNhMzIw
ZjkwMmI1NDA2MmZiOTMxZTg2Ni4uZDE5MDFlZmEyYTc4MjFiNmFlYjE4NDNiMjNiZjY4ZmRhYTZk
NDNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTkyLDYgKzkyLDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxh
eWVyKik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBwbGF0Zm9ybUNo
cm9taXVtTGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpOworCiAgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggYjJmNzAxNDFiNDdhNWQ0N2I0NDAyOTM4MGQzOGNiM2RjM2M1YjMyOC4u
NjA4MjZlNjI5YjA3Y2NlZDZlOTExYWFmNmI0MWQxYTc4MjA5ODkzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTksNiArNjAsNyBA
QCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICA6IG1fbmVlZHNEaXNwbGF5KGZh
bHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDAp
CisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQb2lu
dCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05Niw2
ICs5OCwzMSBAQCB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewogfQog
Citib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24odmFsdWVzLCBi
b3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworfQorCit2b2lk
IExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5wYXVz
ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBMYXllckNo
cm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQorewor
ICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1hdGlvbk5hbWUp
OworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1l
KQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7
Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9h
bmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7Cit9CisKIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChib29sIGlzTm9uQ29tcG9zaXRlZENv
bnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3NpdGVk
Q29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA3NjRmNzMwMTU1YjU0NTM3Y2RhNGM3Mzgx
YjNmZDNiY2I3OTYwNjRkLi5kYzRlZDYwNjQ1ZWUzZTIwYjE4ZjY0YWY2MmJhY2UxMzZjYmQyOTA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01MSw2ICs1MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVy
SW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CkBA
IC02MCw3ICs2MSw2IEBAIGNsYXNzIFJlZ2lvbjsKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0
ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMg
Y2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJv
bWl1bT4gewotICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCk7CiAKQEAgLTIxMSw3
ICsyMTEsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJv
b2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3
YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMoKSBj
b25zdCB7IHJldHVybiBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogCisgICAgYm9vbCBhZGRB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXpl
LCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25z
KGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKwogcHJvdGVjdGVk
OgorICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJU
aWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOworICAgIGZy
aWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdDsKKwogICAgIExheWVyQ2hyb21pdW0oKTsK
IAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBiZWluZyBoZWxk
IGluIHRoZSBzYW1lIGNvbnRleHQgYXMKQEAgLTIzNCw4ICsyNDYsNiBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5ZXI7CiAKLSAgICBmcmllbmQgY2xh
c3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7CiAgICAg
Ly8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUgdHlwZSBm
b3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGludCBtX2xheWVySWQ7CkBAIC0yNDQs
MTAgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoTGF5ZXJDaHJvbWl1bSop
OwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1bSopIGNvbnN0OwogCi0gICAgc2l6
ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NoaWxkcmVu
LnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4g
bV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBj
aGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGluZGV4T2ZDaGlsZChjb25zdCBMYXll
ckNocm9taXVtKik7CkBAIC0yNTUsMTEgKzI2MiwxNSBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVBhcmVudC4KICAgICB2b2lkIHJl
bW92ZUNoaWxkKExheWVyQ2hyb21pdW0qKTsKIAorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKiBhbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVy
LmdldCgpOyB9CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9jaGlsZHJl
bjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAogICAgIFJlZlB0cjxDQ0xheWVyVHJl
ZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAgICAgLy8gTGF5ZXIgcHJvcGVydGll
cy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBkMGZkMGNlNTIzZDYzODg0YmU5MzJl
MWJkNDE2NTgyZjI1NzYyZTQwLi5kZTFjZjhhNjk0YmExYjNmZjFjYWYxNzg0NmZkYjFkZTU2MjE4
NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03NCw2ICs3NSw4
IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxzZQogICAgICAgICBjY0xheWVySW1w
bC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+c3luY2hyb25pemVBbmltYXRpb25zKGNjTGF5ZXJJbXBsLT5hbmltYXRpb25Db250cm9sbGVy
KCkpOworCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oY2NMYXllckltcGwuZ2V0KCkpOwog
ICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVjMGJlZmFhYTA1ODRmNmQyMjFjNDQ2
MjBlYS4uMDAwOWNjODg5ODNhMDY1OWIzOGE2OTNhOTY5Y2E0YzA3NzY2NTdhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtNDQsNiArNDQsOCBAQCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1hdGlvbjo6fkNDQWN0aXZlQW5pbWF0
aW9uKCkgeyB9CisKIHZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1blN0YXRlKFJ1blN0YXRl
IHJ1blN0YXRlLCBkb3VibGUgbm93KQogewogICAgIGlmIChydW5TdGF0ZSA9PSBSdW5uaW5nICYm
IG1fcnVuU3RhdGUgPT0gUGF1c2VkKQpAQCAtNjMsNiArNjUsMjEgQEAgYm9vbCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdAogICAgICAgICAmJiBtX2l0
ZXJhdGlvbnMgKiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpIDw9IHRpbWUgLSBzdGFydFRp
bWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwogfQogCitib29sIENDQWN0aXZlQW5pbWF0aW9uOjpp
c1dhaXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3J1blN0YXRlID09IFdhaXRpbmdGb3JO
ZXh0VGljaworICAgICAgICB8fCBtX3J1blN0YXRlID09IFdhaXRpbmdGb3JUYXJnZXRBdmFpbGFi
aWxpdHkKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9yU3RhcnRUaW1lOworfQor
Citib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhhc1J1bigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gUnVubmluZworICAgICAgICB8fCBtX3J1blN0YXRlID09
IEZpbmlzaGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZAorICAgICAgICB8fCBt
X3J1blN0YXRlID09IFBhdXNlZDsKK30KKwogZG91YmxlIENDQWN0aXZlQW5pbWF0aW9uOjp0cmlt
VGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdAogewogICAgIGRvdWJsZSB0
cmltbWVkID0gbm93OwpAQCAtOTUsNCArMTEyLDM2IEBAIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKICAgICByZXR1
cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpKTsKIH0KIAorUGFz
c093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1w
bFRocmVhZCgpIGNvbnN0Cit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVy
bihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+Y2xvbmUo
KSwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAgICB0b1JldHVybi0+bV9ydW5TdGF0
ZSA9IG1fcnVuU3RhdGU7CisgICAgdG9SZXR1cm4tPm1faXRlcmF0aW9ucyA9IG1faXRlcmF0aW9u
czsKKyAgICB0b1JldHVybi0+bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZTsKKyAgICB0b1JldHVy
bi0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZTsKKyAgICB0b1JldHVybi0+bV90b3RhbFBhdXNl
ZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgp
OworfQorCit2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6ZVByb3BlcnRpZXMoQ0NB
Y3RpdmVBbmltYXRpb24qIG90aGVyKQoreworICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUg
aW1wbCB0aHJlYWQgdG8gaW5pdGlhdGUgYSBydW4gc3RhdGUgY2hhbmdlLgorICAgIC8vIFRoaXMg
aGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gd2FzIHdhaXRpbmcgZm9yIGEgZnV0dXJlIGV2ZW50
IHRvIHRha2UKKyAgICAvLyBwbGFjZSwgYW5kIHRoZSBldmVudCBoYXMgdGFrZW4gcGxhY2UuIElu
IHRoYXQgY2FzZSwgd2Ugd2FudCAndGhpcycgdG8KKyAgICAvLyBhc3N1bWUgdGhlIGltcGwgdGhy
ZWFkJ3MgcnVuIHN0YXRlIGFuZCBzdGFydCB0aW1lLgorICAgIGlmIChpc1dhaXRpbmcoKSAmJiBv
dGhlci0+aXNSdW5uaW5nT3JIYXNSdW4oKSkgeworICAgICAgICBtX3J1blN0YXRlID0gb3RoZXIt
Pm1fcnVuU3RhdGU7CisgICAgICAgIG1fc3RhcnRUaW1lID0gb3RoZXItPm1fc3RhcnRUaW1lOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG90aGVyLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKKyAg
ICAgICAgb3RoZXItPm1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWU7CisgICAgfQorCisgICAgLy8g
Q2hhbmdlIGluIHN0YXRlIHJlbGF0ZWQgdG8gaXRlcmF0aW9ucyBhbmQgcGF1c2UgaXMgYWx3YXlz
IGluaXRpYXRlZCBmcm9tCisgICAgLy8gdGhlIG1haW4gdGhyZWFkLCBzbyBpdCBpcyBzYWZlIHRv
IHB1c2ggcHJvcGVydGllcyBpbiB0aGF0IGRpcmVjdGlvbi4KKyAgICBvdGhlci0+bV9pdGVyYXRp
b25zID0gbV9pdGVyYXRpb25zOworICAgIG90aGVyLT5tX3BhdXNlVGltZSA9IG1fcGF1c2VUaW1l
OworICAgIG90aGVyLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVzZWRUaW1lOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApp
bmRleCBjMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2MDRlZWU5ZmJhZDBhM2QxLi42OTQ0OGU1M2Iy
OTVlZWI0OGQ4MTAzMmEzNDk4M2I2ZjA3ZTg0MDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5p
bWF0aW9uLmgKQEAgLTI1LDI0ICsyNSwyNyBAQAogI2lmbmRlZiBDQ0FjdGl2ZUFuaW1hdGlvbl9o
CiAjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKIAorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9u
Q3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOwot
CiAvLyBBIENDQWN0aXZlQW5pbWF0aW9uLCBjb250YWlucyBhbGwgdGhlIHN0YXRlIHJlcXVpcmVk
IHRvIHBsYXkgYSBDQ0FuaW1hdGlvbkN1cnZlLgogLy8gU3BlY2lmaWNhbGx5LCB0aGUgYWZmZWN0
ZWQgcHJvcGVydHksIHRoZSBydW4gc3RhdGUgKHBhdXNlZCwgZmluaXNoZWQsIGV0Yy4pLAogLy8g
bG9vcCBjb3VudCwgbGFzdCBwYXVzZSB0aW1lLCBhbmQgdGhlIHRvdGFsIHRpbWUgc3BlbnQgcGF1
c2VkLgogY2xhc3MgQ0NBY3RpdmVBbmltYXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENDQWN0aXZlQW5pbWF0aW9uKTsKIHB1YmxpYzoKICAgICAvLyBBbmltYXRpb25zIHRoYXQgbXVz
dCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcgYW5kIGhhdmUgdGhlIHNhbWUg
R3JvdXBJRAogICAgIC8vIEdyb3VwZWQgYW5pbWF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBzdGFy
dCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBubyBvdGhlciBhbmltYXRpb25zCiAgICAgLy8gbWF5IGFu
aW1hdGUgYW55IG9mIHRoZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0aWVzIHVudGlsIGFsbCBhbmlt
YXRpb25zIGluIHRoZQogICAgIC8vIGdyb3VwIGhhdmUgZmluaXNoZWQgYW5pbWF0aW5nLiBOb3Rl
OiBhbiBhY3RpdmUgYW5pbWF0aW9uJ3MgZ3JvdXAgaWQgYW5kIHRhcmdldAogICAgIC8vIHByb3Bl
cnR5IHVuaXF1ZWx5IGlkZW50aWZ5IHRoYXQgYW5pbWF0aW9uLgotICAgIHR5cGVkZWYgaW50IEdy
b3VwSUQ7CisgICAgdHlwZWRlZiBzaXplX3QgR3JvdXBJRDsKIAogICAgIC8vIEFuaW1hdGlvbnMg
YmVnaW4gaW4gb25lIG9mIHRoZSAnd2FpdGluZycgc3RhdGVzLiBBbmltYXRpb25zIHdhaXRpbmcg
Zm9yIHRoZSBuZXh0IHRpY2sKICAgICAvLyB3aWxsIHN0YXJ0IHRoZSBuZXh0IHRpbWUgdGhlIGNv
bnRyb2xsZXIgYW5pbWF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0CkBAIC02OCwx
MiArNzEsMjAgQEAgcHVibGljOgogICAgICAgICBPcGFjaXR5CiAgICAgfTsKIAorICAgIHN0cnVj
dCBBbmltYXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmltYXRpb25TaWduYXR1cmUoR3JvdXBJ
RCBncm91cElELCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgICAgIDog
Z3JvdXBJRChncm91cElEKQorICAgICAgICAgICAgLCB0YXJnZXRQcm9wZXJ0eSh0YXJnZXRQcm9w
ZXJ0eSkgeyB9CisgICAgICAgIEdyb3VwSUQgZ3JvdXBJRDsKKyAgICAgICAgVGFyZ2V0UHJvcGVy
dHkgdGFyZ2V0UHJvcGVydHk7CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwg
R3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBncm91cCwg
dGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlv
bigpIHsgfQorICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCk7CiAKICAgICBHcm91cElE
IGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cDsgfQogICAgIFRhcmdldFByb3BlcnR5IHRh
cmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0eTsgfQpAQCAtOTMs
NiArMTA0LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBj
b25zdDsKICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3J1blN0YXRlID09
IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZDsgfQogCisgICAgYm9vbCBpc1dhaXRp
bmcoKSBjb25zdDsKKyAgICBib29sIGlzUnVubmluZ09ySGFzUnVuKCkgY29uc3Q7CisKICAgICBD
Q0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3Vy
dmUuZ2V0KCk7IH0KICAgICBjb25zdCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KIApAQCAtMTAwLDYgKzEx
NCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRp
dmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9D
dXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0OwogCisgICAgQW5pbWF0aW9uU2lnbmF0
dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1hdGlvblNpZ25hdHVyZShtX2dyb3Vw
LCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7CisKKyAgICB2b2lkIHN5bmNocm9uaXplUHJv
cGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiopOworCiBwcml2YXRlOgogICAgIENDQWN0aXZlQW5p
bWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4sIEdyb3VwSUQsIFRhcmdldFByb3Bl
cnR5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGRlOTdlMzhjMGEyNGU3
Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMuLjUzM2FiYWZlZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1
NTE2NjdlZTI0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDYgKzI1
LDEwIEBACiAjaWZuZGVmIENDQW5pbWF0aW9uQ3VydmVfaAogI2RlZmluZSBDQ0FuaW1hdGlvbkN1
cnZlX2gKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDRmxvYXRB
bmltYXRpb25DdXJ2ZTsKQEAgLTQxLDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBk
b3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkg
Y29uc3QgPSAwOwogCiAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiB0b0Zsb2F0QW5p
bWF0aW9uQ3VydmUoKSBjb25zdDsKICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
KiB0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7CkBAIC02MCw3ICs2NSw3IEBAIGNs
YXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NBbmltYXRpb25DdXJ2ZSB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsgfQog
Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0KSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUg
dCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFs
IENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJiZTg2OTAzNDk2MDhiMzliNTBkMWIyMjE0YzAyY2JlZDI3MGExZTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDQW5pbWF0aW9uUmVzdWx0c19oCisjZGVmaW5lIENDQW5pbWF0aW9uUmVzdWx0
c19oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBhbmlt
YXRpb24gZXZlbnQgaGFzIHRha2VuIHBsYWNlIG9uIHRoZSBnaXZlbiBsYXllciBhdCB0aGUgZ2l2
ZW4gdGltZS4KK3N0cnVjdCBDQ0FuaW1hdGlvblJlc3VsdCB7CisgICAgQ0NBbmltYXRpb25SZXN1
bHQoaW50IGxheWVySUQsIGRvdWJsZSB0aW1lKQorICAgICAgICA6IGxheWVySUQobGF5ZXJJRCkK
KyAgICAgICAgLCB0aW1lKHRpbWUpIHsgfQorICAgIGludCBsYXllcklEOworICAgIGRvdWJsZSB0
aW1lOworfTsKKworLy8gVGhpcyBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJhY2sgdG8gbWFpbiBh
bmltYXRpb24gZW5naW5lIHRoYXQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBoYXZlIHN0YXJ0ZWQu
CitjbGFzcyBDQ0FuaW1hdGlvblJlc3VsdHMgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NBbmltYXRpb25SZXN1bHRzKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5D
Q0FuaW1hdGlvblJlc3VsdHMoKSB7IH0KKworICAgIFZlY3RvcjxDQ0FuaW1hdGlvblJlc3VsdD4m
IHN0YXJ0ZWRBbmltYXRpb25zKCkgeyByZXR1cm4gbV9zdGFydGVkQW5pbWF0aW9uczsgfQorCitw
cml2YXRlOgorICAgIENDQW5pbWF0aW9uUmVzdWx0cygpIHsgfQorCisgICAgVmVjdG9yPENDQW5p
bWF0aW9uUmVzdWx0PiBtX3N0YXJ0ZWRBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25SZXN1bHRzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmE1NTAz
ODdlMTY3NThlZjIxODRlNGUyMjdhNTgwYzgyMjYwMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QK
KyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRk
QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgLypib3hT
aXplKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQW5pbWF0aW9uKiBhbmltYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0KQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9m
ZnNldCkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKK30KKwordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7Cit9
CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQor
eworfQorCisvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24g
dGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5bmMu
Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICBy
ZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAg
ICBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChjb250cm9sbGVySW1wbCk7CisgICAgcmVt
b3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChjb250cm9sbGVySW1wbCk7CisgICAg
cHVzaEFuaW1hdGlvblByb3BlcnRpZXMoY29udHJvbGxlckltcGwpOworfQorCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25JbXBsVGhy
ZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7Cisg
ICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkIGFyZSByZW1v
dmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tp
XS5ncm91cElELCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0udGFyZ2V0
UHJvcGVydHkpOworICAgIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5jbGVh
cigpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0
aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xs
ZXJJbXBsKQoreworICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0aGUgbWFpbiB0
aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhlIGltcGwgdGhyZWFk
J3MgY29udHJvbGxlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5nZXRBY3Rp
dmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQorICAgICAgICAgICAgY29udHJvbGxlckltcGwt
PmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnND
b21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250
cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMg
Zm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9u
LgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFyYW50
ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7KSB7
CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0aW9u
KGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIGNvbnRyb2xs
ZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOworICAgICAg
ICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmlt
YXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0K
K30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblByb3Bl
cnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sK
KyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRoZXJl
IGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgorICAgIC8vIEVhY2gg
aXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRlY3Jl
bWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3Mg
dG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29u
dHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBD
Q0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVB
bmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudCA9
IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVudEltcGwtPnRh
cmdldFByb3BlcnR5KCkpOworICAgICAgICBBU1NFUlQoY3VycmVudCk7CisgICAgICAgIGlmIChj
dXJyZW50KQorICAgICAgICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0aWVzKGN1cnJl
bnRJbXBsKTsKKyAgICB9Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
IGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3Jv
dXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFBy
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5nZXQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVt
b3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2OTc2MDQ2NTJiM2U3
N2UzOWQ2YmI4NWMzM2E5YzRhNjE0ZDExNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9o
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorCisj
aW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDsK
K3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CisKK2NsYXNzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgIH0KKworICAg
IHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkgeyB9CisKKyAgICBib29sIGFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24o
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKworICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlv
bnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgLy8g
RW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRo
cmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCisgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJv
bGxlci4KKyAgICB2b2lkIHN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqKTsKKworICAgIC8vIFRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25s
eS4KKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+JiBhY3RpdmVBbmltYXRp
b25zKCkgeyByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
c0NvbXBsZXRlZE9uSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsK
KyAgICB2b2lkIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCopOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFp
blRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1c2hB
bmltYXRpb25Qcm9wZXJ0aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisg
ICAgQ0NBY3RpdmVBbmltYXRpb24qIGdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlv
bjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICB2b2lk
IHJlbW92ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRh
cmdldFByb3BlcnR5KTsKKworICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4g
bV9hY3RpdmVBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKaW5kZXggYmJjYTljYmQ5MDU1
ZTFlYzEzY2MwYTk3NDYzOWM1Zjk3MDg4MDk5Mi4uNTFhODRkNDY0MzY3OGZjYjFhNTc4MDhkZjgy
OWZhOTZmZGVhZWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuY3BwCkBAIC0yNiw3ICsyNiw5IEBACiAKICNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0
LDIyICs0NiwyMiBAQCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQwogewogfQogCi12b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVT
ZWNzKQorQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp+Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKCkgeyB9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVzdWx0cyog
cmVzdWx0cykKIHsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVC
ZWdpblRpbWVTZWNzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZy
YW1lQmVnaW5UaW1lU2Vjcyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2
YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JOZXh0VGljayhmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOworICAgIHN0YXJ0QW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzKTsK
KyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVn
aW5UaW1lU2VjcywgcmVzdWx0cyk7CiAgICAgcmVzb2x2ZUNvbmZsaWN0cyhmcmFtZUJlZ2luVGlt
ZVNlY3MpOwogICAgIHRpY2tBbmltYXRpb25zKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgcHVy
Z2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25z
V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMp
OwogfQogCiB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWRkKFBhc3NPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0pCiB7CiAgICAgbV9hY3RpdmVBbmltYXRpb25zLmFw
cGVuZChhbmltKTsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5hbmltYXRp
b25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKHRoaXMpOwogfQogCiBDQ0FjdGl2ZUFuaW1hdGlv
biogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eSBwcm9wZXJ0eSkKQEAgLTgwLDI1ICs4MiwyOCBAQCBib29sIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdykKK3ZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91
YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQogewogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246
OldhaXRpbmdGb3JOZXh0VGljaykgewogICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKICAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAg
ICByZXN1bHRzLT5zdGFydGVkQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3VsdCht
X2NsaWVudC0+aWQoKSwgbm93KSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1hdGlvblJl
c3VsdHMqIHJlc3VsdHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG5vdykKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgp
IDw9IG5vdykgewogICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAgICAgICAgICAgIHJlc3VsdHMt
PnN0YXJ0ZWRBbmltYXRpb25zKCkuYXBwZW5kKENDQW5pbWF0aW9uUmVzdWx0KG1fY2xpZW50LT5p
ZCgpLCBub3cpKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxp
dHkoZG91YmxlIG5vdykKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5p
bWF0aW9uUmVzdWx0cyogcmVzdWx0cykKIHsKICAgICAvLyBGaXJzdCBjb2xsZWN0IHJ1bm5pbmcg
cHJvcGVydGllcy4KICAgICBUYXJnZXRQcm9wZXJ0aWVzIGJsb2NrZWRQcm9wZXJ0aWVzOwpAQCAt
MTM0LDYgKzEzOSw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRp
b25zW2pdLT5ncm91cCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRTdGFydFRp
bWUobm93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMtPnN0YXJ0ZWRBbmltYXRp
b25zKCkuYXBwZW5kKENDQW5pbWF0aW9uUmVzdWx0KG1fY2xpZW50LT5pZCgpLCBub3cpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTE3OCw5ICsxODQsMTAgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1
cmdlRmluaXNoZWRBbmltYXRpb25zKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKQor
ICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAg
IG1fZmluaXNoZWRBbmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25h
dHVyZSgpKTsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAg
ICAgIGVsc2UKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpKys7CiAgICAgfQogfQpAQCAt
MTk0LDE0ICsyMDEsMTEgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRp
Y2tBbmltYXRpb25zKGRvdWJsZSBub3cpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybTogewogICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUqIHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25z
W2ldLT5hbmltYXRpb25DdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOworICAgICAgICAgICAgICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
LT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOwogICAgICAgICAgICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChub3cpKQogICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpGaW5pc2hlZCwgbm93KTsKIAotICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJl
IGlmIGFic29sdXRlIG9yIHJlbGF0aXZlLiBBYnNvbHV0ZSBmb3Igbm93LgotICAgICAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvQXBwbHk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5hcHBseShGbG9hdFNpemUoKSwgdG9BcHBseSk7Ci0gICAgICAgICAgICAgICAgbV9jbGll
bnQtPnNldFRyYW5zZm9ybSh0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0
VHJhbnNmb3JtKG1hdHJpeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmgKaW5kZXggMWFkMjIzZGJhODIzYTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uMjQ1ZTBk
Njg2MTg5YmJlNjA5OTMyYjQxNDQwNjdkM2ZjMThlMTM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTI5LDEyICsyOSwxNCBA
QAogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNs
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDsKIGNsYXNzIEludFNpemU7CiBjbGFz
cyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKQEAgLTQ0LDE4ICs0NiwyMiBAQCBjbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBp
bnQgaWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50
U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbD4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbENsaWVudCopOwogCi0gICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNl
Y3MpOworICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpOworCisg
ICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVz
dWx0cyopOwogCiAgICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwog
CkBAIC02NywxMiArNzMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9u
KCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOworCiAgICAgLy8gVGhlIGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4K
ICAgICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JOZXh0VGljayhkb3VibGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNX
YWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVzdWx0
cyopOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUg
bm93LCBDQ0FuaW1hdGlvblJlc3VsdHMqKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzKik7
CiAgICAgdm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOwogICAgIHZvaWQgcHVyZ2VG
aW5pc2hlZEFuaW1hdGlvbnMoKTsKIApAQCAtODAsNiArODgsNyBAQCBwcml2YXRlOgogCiAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0
b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKKyAgICBW
ZWN0b3I8Q0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZT4gbV9maW5pc2hlZEFu
aW1hdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAKaW5kZXggODFmOTcxMmUwZmFjMGY5ODEyODg4ZGEyZTczZmYzM2VmZDYwNjVhNC4uZTg5
Mjk4ZTFmM2QzM2E4YTBkZGIyNDE2MzQ3NDYxNzJmM2MxNDE1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xp
ZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYx
LDYgKzYyLDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZHJh
d09wYWNpdHkoMCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwg
bV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDAwZTBh
ZGY4YTUxZmRlYzA0YTlmNDI1ZjA0NTdhYTMzODhjZWEzYWEuLjMzZWJkNDczN2FkZjQ3ZWM2MTZm
NDZkNTY3M2ZiY2RhZDM3MWJlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNs
dWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00
MCwxNiArNDEsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3MgTGF5ZXJD
aHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllcklt
cGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3MgQ0NMYXllckltcGwg
OiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDQ0xheWVySW1wbChpZCkpOwogICAgIH0KKworICAgIC8vIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29w
YWNpdHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICB2aXJ0
dWFsIH5DQ0xheWVySW1wbCgpOwogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCkBAIC02NSw4ICs3
Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPik7CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVwbGljYUxheWVyLmdldCgpOyB9CiAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBt
X2xheWVySWQ7IH0KLQogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVidWdJRDsgfQogI2VuZGlmCkBAIC0xMDYsOSArMTE1LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gbV9vcGFxdWU7IH0KIAotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotCiAgICAgdm9pZCBzZXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKQEAgLTEyNCw5ICsxMzAsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpOwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
Ci0KICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7
IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApA
QCAtMTQ5LDcgKzE1Miw2IEBAIHB1YmxpYzoKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJl
bmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAg
ICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7
IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAotICAgIGNvbnN0IEludFNpemUm
IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9pZCBzZXRCb3VuZHMo
Y29uc3QgSW50U2l6ZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudEJvdW5kczsgfQpAQCAtMTk4LDYgKzIwMCw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
clByb3BlcnR5Q2hhbmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1
YnRyZWUoKTsKIAorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogYW5pbWF0aW9u
Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzA1LDYgKzMw
OSw5IEBAIHByaXZhdGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRl
ZC91cGRhdGVkIGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMg
YnlwYXNzIHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJl
Y3Q7CisKKyAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gbV9hbmltYXRpb25Db250cm9sbGVy
OwogfTsKIAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0
ZXJhdG9yIGZpcnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQs
IENDTGF5ZXJTb3J0ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDRm
Zjg0MzRiMjAwYzkyZDQ4YTA4YmY5MWMxNGIyN2Y4MjE5ZGRhYjYuLjYyZjFiZDM3ZjBhMGNhMzZi
MGUwZWJlYzA5NGI4OTM3YzM4MDcxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25SZXN1bHRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIgpAQCAtMTU0LDkgKzE1NSwxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6
ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KLSAgICBpZiAocm9vdExheWVyKCkpCisg
ICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJv
b3RMYXllcigpKSk7Ci0gICAgZWxzZQorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRl
TGF5ZXJzKHRydWUpOworICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVy
KDApOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkp
OwpAQCAtMjM2LDYgKzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRy
YXcoKQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMoUGFzc093blB0cjxDQ0FuaW1hdGlv
blJlc3VsdHM+IHJlc3VsdHMpCit7CisgICAgQVNTRVJUKENDVGhyZWFkUHJveHk6OmlzTWFpblRo
cmVhZCgpKTsKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuIFdpbGwgaGF2ZSB0byB3YWxr
IHRoZSB0cmVlLgorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKFBhc3NS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogewogICAgIGlmIChtX3Jvb3RMYXllciA9
PSByb290TGF5ZXIpCkBAIC0zMTMsOSArMzIxLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpk
aWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdElt
CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAg
ICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAgZWxzZQorICAg
ICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKHRydWUpOworICAgIH0gZWxzZQog
ICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCmluZGV4IGY1ODIwM2QxNWViMjA0NTA3MWMyZWZhNDQ4YmE0MGJmMTlhNTRjYWEu
LjJlMmFmMDNkN2Y0MDU2ZjQ2Mjg3NzJiYzgyNDZmN2RjMzJmYjZjMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIEdyQ29udGV4dDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlvblJlc3VsdHM7CiBjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwpAQCAtMTY2LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNDb21taXQoKTsKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lk
IHNldEFuaW1hdGlvblJlc3VsdHMoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KTsKKwog
ICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgp
OyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5k
ZXggMTg0NmQ2YzJlZjViNzRjZWM3MTE1MjZjOGU0ZGUyZTE4NzcxN2E1NC4uZWY2OGUxMTczM2Ux
MThjMmU4ZWQwOWQ0ZDc3NDA4Njg1ZDU1MzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKICNpbmNsdWRl
ICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAgLTU3LDYgKzU4LDcgQEAg
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICAsIG1fc2VudFBhZ2VTY2FsZURlbHRhKDEpCiAg
ICAgLCBtX21pblBhZ2VTY2FsZSgwKQogICAgICwgbV9tYXhQYWdlU2NhbGUoMCkKKyAgICAsIG1f
bmVlZHNBbmltYXRlTGF5ZXJzKHRydWUpCiAgICAgLCBtX3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxz
ZSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtMTA2LDEyICsx
MDgsMjMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJl
Z2luVGltZU1zKQogICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9u
LT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdpblRpbWVNcyk7CiAgICAgbmV4dFNjcm9sbC5z
Y2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CiAgICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9s
bEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzUmVk
cmF3T25JbXBsVGhyZWFkKCk7CiAKICAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24tPmlzQW5p
bWF0aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykpIHsKICAgICAgICAgbV9wYWdl
U2NhbGVBbmltYXRpb24uY2xlYXIoKTsKICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0
T25JbXBsVGhyZWFkKCk7CiAgICAgfQorCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyIsIHRoaXMsIDApOworICAgICAgICBpZiAo
bV9uZWVkc0FuaW1hdGVMYXllcnMpIHsKKyAgICAgICAgICAgIE93blB0cjxDQ0FuaW1hdGlvblJl
c3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CisgICAgICAgICAg
ICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnMobV9yb290TGF5ZXJJbXBsLmdl
dCgpLCBmcmFtZUJlZ2luVGltZU1zIC8gMTAwMCwgcmVzdWx0cy5nZXQoKSk7CisgICAgICAgICAg
ICBpZiAoIXJlc3VsdHMtPnN0YXJ0ZWRBbmltYXRpb25zKCkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5wdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25JbXBsVGhy
ZWFkKHJlc3VsdHMucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY2xpZW50
LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0
aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVN
cywgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0yNDQsNiArMjU3LDI0IEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2Vz
KQogICAgICAgICBwYXNzZXNbaV0tPm9wdGltaXplUXVhZHMoKTsKIH0KIAorYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKENDTGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUg
ZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMqIHJlc3VsdHMpCit7CisgICAg
Ym9vbCBuZWVkc0FuaW1hdGVMYXllcnMgPSBmYWxzZTsKKworICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCogY3VycmVudENvbnRyb2xsZXIgPSBjdXJyZW50LT5hbmltYXRpb25Db250
cm9sbGVyKCk7CisgICAgaWYgKGN1cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSkgeworICAgICAgICBuZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgICAgICBjdXJyZW50
Q29udHJvbGxlci0+YW5pbWF0ZShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOworICAgIH0K
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoYW5pbWF0ZUxheWVycyhjdXJyZW50LT5jaGlsZHJlbigpW2ld
LmdldCgpLCBmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpKQorICAgICAgICAgICAgbmVlZHNB
bmltYXRlTGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmVlZHNBbmltYXRlTGF5
ZXJzOworfQorCiBJbnRTaXplIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29u
c3QKIHsKICAgICAvLyBUT0RPKGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhl
cmUgaXMgd2VpcmQuIFRoaW5rIG9mCkBAIC01NDIsNCArNTczLDQgQEAgUGFzc093blB0cjxDQ1Nj
cm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFz
KCkKICAgICByZXR1cm4gc2Nyb2xsSW5mby5yZWxlYXNlKCk7CiB9CiAKLX0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBhNzFh
ZGFlNjc1MzJmMzI0OTZhNTQyODRhYTU3ZjcwYjM0MDRjZDAxLi4zYjQ1NzdhZWZlNWU3YWY2MTMy
NTk5MTA2ZjU1NDcyYTlmZWQ0M2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5k
ZXJQYXNzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKICNpZiBVU0UoU0tJQSkKQEAgLTM4LDYgKzM5LDcgQEAgY2xhc3MgR3JDb250ZXh0
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNs
YXNzIENDQ29tcGxldGlvbkV2ZW50OwogY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRpb247CiBjbGFz
cyBDQ0xheWVySW1wbDsKQEAgLTUyLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0
aW9uUmVzdWx0cz4pID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUg
Q0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBA
IC0xMTcsNiArMTIwLDkgQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNj
YWxlU2V0PiBwcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAKKyAgICBib29sIG5lZWRzQW5pbWF0ZUxh
eWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRlTGF5ZXJzOyB9CisgICAgdm9pZCBz
ZXROZWVkc0FuaW1hdGVMYXllcnMoYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMpIHsgbV9uZWVkc0Fu
aW1hdGVMYXllcnMgPSBuZWVkc0FuaW1hdGVMYXllcnM7IH0KKwogcHJvdGVjdGVkOgogICAgIEND
TGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYsIENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqKTsKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKQEAgLTEz
Myw2ICsxMzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVy
UGFzc0xpc3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xp
c3QmKTsKKyAgICBib29sIGFuaW1hdGVMYXllcnMoQ0NMYXllckltcGwqLCBkb3VibGUgZnJhbWVC
ZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMqKTsKICAgICBJbnRTaXplIGNvbnRlbnRT
aXplKCkgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVy
UmVuZGVyZXI7CkBAIC0xNDgsNiArMTU1LDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3NlbnRQ
YWdlU2NhbGVEZWx0YTsKICAgICBmbG9hdCBtX21pblBhZ2VTY2FsZSwgbV9tYXhQYWdlU2NhbGU7
CiAKKyAgICAvLyBJZiB0aGlzIGlzIHRydWUsIGl0IGlzIG5lY2Vzc2FyeSB0byB0cmF2ZXJzZSB0
aGUgbGF5ZXIgdHJlZSB0aWNraW5nIHRoZSBhbmltYXRvcnMuCisgICAgYm9vbCBtX25lZWRzQW5p
bWF0ZUxheWVyczsKICAgICBib29sIG1fcGluY2hHZXN0dXJlQWN0aXZlOwogCiAgICAgT3duUHRy
PENDUGFnZVNjYWxlQW5pbWF0aW9uPiBtX3BhZ2VTY2FsZUFuaW1hdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNzJiZWMyYTcxNjY0YWY0M2NkNjRkMDE0
ZDI4Yjg0MjY1MDk1YjIwMy4uZTMzNmQwY2UwMWQ1ZDc1MGVhMDkyOWIxMzg5MDU5MDBkYmI0YTI4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q0FuaW1hdGlvblJlc3VsdHMuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CkBAIC0yMDgsNiArMjA5LDExIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgp
CiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5
OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
QW5pbWF0aW9uUmVzdWx0cyhyZXN1bHRzKTsKK30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kg
c2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1
bGluZykKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDRmYWEyMjk5OTEyYWVj
OWM0ZTZhYjRiYTcwMjdkODFjODA2ZDQ1ZWUuLjA0Nzk4ZjZkZmMzMTBjNzcxMTk2Yzc1M2VjNGJj
YjM2YWY5ZDkwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTMy
LDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlvblJl
c3VsdHM7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiAKIGNsYXNzIENDU2luZ2xlVGhyZWFkUHJv
eHkgOiBwdWJsaWMgQ0NQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CkBAIC02MCw2
ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRl
T25JbXBsVGhyZWFkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0LT5zZXROZWVk
c0NvbW1pdCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFk
KCkgeyBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRy
PENDQW5pbWF0aW9uUmVzdWx0cz4pOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgcGF0
aCB3aGVyZSBSZW5kZXJXaWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNvbXBv
c2l0ZUltbWVkaWF0ZWx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDVlNmE4
Zjg2MjYyZGY2MjQ0OTQyZTViNDJiNDJlYmFhODg4MzNhMmQuLmQzZDIwMTMyOGIwNjU2MDYwNjQ0
Y2NkYTQwMjhlMzAyYzE1ZTdhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKICNpbmNs
dWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NGcmFtZVJh
dGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKQEAgLTIyNyw2
ICsyMjgsMTMgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
K3ZvaWQgQ0NUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1w
bFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cykKK3sKKyAgICBB
U1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpw
dXNoQW5pbWF0aW9uUmVzdWx0cyIsIHRoaXMsIDApOworICAgIG1fbWFpblRocmVhZFByb3h5LT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnB1c2hBbmlt
YXRpb25SZXN1bHRzLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHJlc3VsdHMubGVha1B0cigpKSkp
OworfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNTI4LDYgKzUzNiwxNCBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQ29t
cGxldGVTd2FwQnVmZmVycygpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRp
b25SZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0cyogcmVzdWx0cykKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQorICAgICAgICByZXR1cm47
CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpb25SZXN1bHRzKGFkb3B0UHRyKHJlc3Vs
dHMpKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaAppbmRleCBhMTFiNTI3ODU5OTMxY2ZiOThmODcyNGE1MTI0M2EwOWI0
ZWNjM2I5Li42ZWRlZTMwNjJmNmQ4MDRjYWRiMDc2ZmMyZDBkNGQwZTg3M2Y5OTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NJbnB1dEhhbmRsZXI7CiBj
bGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1NjaGVkdWxlcjsKQEAgLTY4LDYgKzY5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxU
aHJlYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNz
T3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4pOwogCiAgICAgLy8gQ0NTY2hlZHVsZXJDbGllbnQg
aW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygpOwpAQCAtODQsNiArODYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VO
dW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxl
U2V0Pik7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsKICAgICB2b2lkIGRpZENv
bXBsZXRlU3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHB1c2hBbmltYXRpb25SZXN1bHRzKENDQW5p
bWF0aW9uUmVzdWx0cyopOwogCiAgICAgLy8gQ2FsbGVkIG9uIGltcGwgdGhyZWFkCiAgICAgc3Ry
dWN0IFJlYWRiYWNrUmVxdWVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBl
MTVmYmZjYWE4NmQ3NTU2MzllZWM4MWE3YjdlZjY3ZGQ2NmM1MGJmLi5mMzMxOTgyMTlhZGY3ZDVm
MGY5MmIyMTZhZWYwMDg2Mjk4ZDExYWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
QEAgLTYxLDYgKzYxLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwJywKKyAg
ICAgICAgICAgICd0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAn
dGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVs
YXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJh
dGVDb250cm9sbGVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCmluZGV4IDNlOTNkOTVkZTg2OGEyZjNh
MjVhYjAzMDIwZWQyNWMxZDBlYzQ5MGEuLjI2MWVkZmZmODUyZjMzYzEzYjQ5MjFiZTcwZTYwOWU0
MmY1ZTJiOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3Rp
dmVBbmltYXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
QWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTI1LDI0ICsyNSwyMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKLQotI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24u
aCIKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXRUZXN0czsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBG
YWtlRmxvYXRBbmltYXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAg
ICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LX07CituYW1lc3BhY2UgewogCiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVB
Y3RpdmVBbmltYXRpb24oaW50IGl0ZXJhdGlvbnMpCiB7Ci0gICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRBbmltYXRpb24pLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvUmV0dXJuLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlv
bnMpOwogICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CkBAIC0xNjQsNCArMTYwLDQg
QEAgVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWQpCiAgICAgRVhQRUNUX1RS
VUUoYW5pbS0+aXNGaW5pc2hlZCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAv
LyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5p
bWF0aW9uVGVzdENvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZDhhMmZlMjE1MWU2OGYyZDU2YzZjOWEw
NDdiNmNkOTgzZWY5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NBbmltYXRp
b25UZXN0Q29tbW9uX2gKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3Mg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlv
bkN1cnZlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgp
IHsgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9
CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNs
b25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmUpOworICAgIH0KK307CisKK2NsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uIDogcHVibGljIFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGlj
OgorICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0
aW9uKGR1cmF0aW9uKSB7IH0KKyAgICB2aXJ0dWFsIH5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigp
IHsgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRW
YWx1ZShkb3VibGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworICAg
IH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBj
bG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uKCp0aGlzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGRvdWJsZSBt
X2R1cmF0aW9uOworfTsKKworY2xhc3MgRmFrZUZsb2F0VHJhbnNpdGlvbiA6IHB1YmxpYyBXZWJD
b3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VGbG9hdFRyYW5z
aXRpb24oZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBmcm9tLCBmbG9hdCB0bykKKyAgICAgICAgOiBt
X2R1cmF0aW9uKGR1cmF0aW9uKQorICAgICAgICAsIG1fZnJvbShmcm9tKQorICAgICAgICAsIG1f
dG8odG8pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZha2VGbG9hdFRyYW5zaXRpb24o
KSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
dXJhdGlvbjsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0
CisgICAgeworICAgICAgICB0aW1lIC89IG1fZHVyYXRpb247CisgICAgICAgIGlmICh0aW1lID49
IDEpCisgICAgICAgICAgICB0aW1lID0gMTsKKyAgICAgICAgcmV0dXJuICgxIC0gdGltZSkgKiBt
X2Zyb20gKyB0aW1lICogbV90bzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIGZsb2F0IG1fZnJvbTsKKyAgICBm
bG9hdCBtX3RvOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMKKworI2VuZGlmIC8v
IENDQW5pbWF0aW9uVGVzY3RDb21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dC5jcHAKaW5kZXggM2Q1MGQwNmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5NWIwZjUzYi4uNTJh
YzM5ZjQ1ZGE2MGY0YzBjYTkyNGZlNTJlZTcxOTZhMjcwNWIwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QuY3BwCkBAIC0yNCwxNiArMjQsMTYgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFuc2Zv
cm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotCisjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4K
ICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5h
bWVzcGFjZSB7CiAKQEAgLTQyLDc0ICs0MiwzOSBAQCBwdWJsaWM6CiAgICAgRmFrZUNvbnRyb2xs
ZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwKSB7IH0KICAgICB2aXJ0dWFsIH5GYWtlQ29udHJvbGxl
ckNsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkg
PSBvcGFjaXR5OyB9CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJv
bGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRy
b2xsZXIpCi0gICAgewotICAgICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9s
bGVyKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Kj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQor
ICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3Vu
ZHM7IH0KIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Ci19OwotCi1jbGFzcyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoK
LSAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlv
bihkdXJhdGlvbikgeyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZh
bHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbnMoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZHVyYXRpb247Cisg
ICAgSW50U2l6ZSBtX2JvdW5kczsKIH07CiAKLWNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBw
dWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlRmxvYXRUcmFu
c2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAgICAgIDog
bV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAgICAgLCBt
X3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRv
dWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwotICAg
ICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJldHVy
biAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBmbG9hdCBtX3Rv
OwotfTsKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgaWQsIHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMgdGhh
dCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCiBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9u
KQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25S
ZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1t
eS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiB9CkBAIC0xMTcsMjAgKzgyLDIxIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiAvLyBUZXN0cyB0aGF0IHR3byBx
dWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNlcXVl
bmNlLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVl
dWluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0
aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15Owog
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAu
NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYs
IGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTEzOCwyMiArMTA0LDIzIEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCiAvLyBUZXN0cyBpbnRlcnJ1
cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0aW9uLgogVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCiB7CisgICAgT3duUHRyPEND
QW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsK
ICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMu
Z2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41
ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKICAgICBjb250
cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC41KTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAuNSwgcmVzdWx0cy5nZXQoKSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VR
KDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE2MSwyMyArMTI4LDI0IEBAIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogLy8gVGVzdHMgc2NoZWR1
bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0
eSBpcyBmcmVlLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIHsKKyAgICBPd25QdHI8Q0NBbmlt
YXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAg
IEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
KDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJh
bnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICAvLyBTaG91bGQgbm90IGhhdmUgc3Rh
cnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwogICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQg
YXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE4NywyOSArMTU1LDMwIEBAIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVy
dHlJc0Jsb2NrZWQpCiAvLyBmb3IgYm90aCB0byBmaW5pc2gpLgogVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcp
CiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJl
c3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zv
cm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAg
Ly8gQW5pbXMgd2l0aCBpZCAxIHNob3VsZCBib3RoIHN0YXJ0IG5vdy4KLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1h
dGlvbiBzaG91bGQgaGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKICAgICAv
LyBvZiBhbmltYXRpb25zIHdpdGggaWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1
c2Ugb2YgdGhlIGxlbmd0aAogICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCByZXN1
bHRzLmdldCgpKTsKICAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJh
bnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgLy8gVGhl
IHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQg
c2hvdWxkIGJlCiAgICAgLy8gZG9uZSBieSB0aW1lIDMKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDMpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTIxNywyMiArMTg2LDIzIEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhB
bkFuaW1XYWl0aW5nKQogLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQg
aW4gdGhlIGZ1dHVyZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwg
U2NoZWR1bGVBbmltYXRpb24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVz
dWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNs
aWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBj
b250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0
ZSgmZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zv
clN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9s
bGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHko
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
IH0KQEAgLTI0MCwyOCArMjEwLDI5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiAvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1h
dGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5n
IGFuaW1hdGlvbi4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2No
ZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb24pCiB7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgp
KTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAot
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
PiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGlt
ZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBz
aG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLjUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0K
QEAgLTI3MCwzNCArMjQxLDM1IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAvLyBhbmQgdGhl
cmUgaXMgeWV0IGFub3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50
ZXJydXB0c1J1bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCiB7CisgICAgT3duUHRyPEND
QW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsK
ICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRv
QWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwg
MCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9B
ZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAw
Ljc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gRmlyc3Qg
MnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5n
ZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgcmVzdWx0cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMywgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSg0LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15
Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKIH0KQEAgLTMwNSw2NCArMjc3LDY2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmlt
CiAvLyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3Jy
ZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1
bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250
cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7CiAgICAgY29udHJvbGxl
ci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLjI1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLjc1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyLjI1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyLjc1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgzLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFj
aXR5KCkpOwogCiAgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoNCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCByZXN1bHRzLmdldCgpKTsKICAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogLy8gVGVzdCB0aGF0IGFuIGlu
ZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4K
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5n
KQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25S
ZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAg
ICBjb25zdCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwogICAgIGNvbnRyb2xs
ZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMS43NSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4y
NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1LCByZXN1bHRzLmdldCgp
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0
Ljc1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwog
CkBAIC0zNzUsODAgKzM0OSw2NiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QsIEluZmluaXRlTG9vcGluZykKIC8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1bWlu
ZyB3b3JrIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBQYXVzZVJlc3VtZSkKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1
bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCBy
ZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCByZXN1bHRz
LmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQ
YXVzZWQsIDAuNWYpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0KTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEwMjQsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVt
bXkub3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFu
aW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVy
LT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0
UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwogCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAy
NC41LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogfQog
CiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdyb3VwZWRB
bmltYXRpb24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0Fu
aW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1t
eTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVy
KAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkp
KTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEp
KSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5h
ZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1
bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxl
ci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVzdWx0cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRSghY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBhZGRpbmcgYW4g
YW5pbWF0aW9uIHRvIHRoZSBjb250cm9sbGVyIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFj
ayBvbiB0aGUgY29udHJvbGxlciBjbGllbnQKLS8vIChpbiB0aGlzIGNhc2UsIGFkZGluZyB0aGUg
Y29udHJvbGxlciB0byB0aGUgbGlzdCBvZiBhY3RpdmUgY29udHJvbGxlcikuCi1URVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIERpZEFjdGl2YXRlKQotewotICAgIEZha2VD
b250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZHVtbXku
YWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgRVhQRUNUX0VR
KHNpemVfdCgxKSwgZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotICAgIEVYUEVD
VF9FUShjb250cm9sbGVyLmdldCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThmOGNi
ZDc1NzQwYWUyOTM5ZTIzY2MyMzUwYS4uYThmYTVlYTk2MTRjZDIxMmFjMWQxZWUzY2ZjMTE2ZDZm
ZTI1ODU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVxdWVz
dFJlZHJhdyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxU
aHJlYWQoKSB7IG1fZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPEND
QW5pbWF0aW9uUmVzdWx0cz4pIHsgfQogCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNj
cm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApp
bmRleCAxNTU3YTdkOTMyMmNjNmJlMjA2YmY1MGIwMGMwZjQ3MDYzYzU0NzhiLi44ODM4YmU5Njcx
MTlkYjViZTI3ZjVlOGVkZjE0YmM1MTk1YWY2MTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2
LDMxIEBACiAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3Vs
dHMuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKK3Vz
aW5nIHRlc3Rpbmc6OlRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJlZVN5
bmNocm9uaXplclRlc3QgOiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKiBnZXRBbmltYXRpb25Db250cm9sbGVyKExheWVyQ2hyb21p
dW0qIGxheWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxheWVyLT5hbmltYXRpb25Db250cm9s
bGVyKCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2Ug
ewogCkBAIC0xMTYsNyArMTM0LDcgQEAgdm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXll
ckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCiB9CiAKIC8vIENvbnN0cnVj
dHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0cnlpbmcg
dG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxheWVycy4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMTI5LDcgKzE0Nyw3IEBAIFRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQogfQogCiAvLyBDb25zdHJ1Y3RzIGEg
dmVyeSBzaW1wbGUgdHJlZSBhbmQgc3luY2hyb25pemVzIGl0IGF0dGVtcHRpbmcgdG8gcmV1c2Ug
c29tZSBsYXllcnMKLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1
c2luZ0xheWVycykKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVS
ZXVzaW5nTGF5ZXJzKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAg
IFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0xNTUsNyArMTczLDcgQEAg
VEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQog
ICAgIEVYUEVDVF9FUShzZWNvbmRDQ0xheWVySWQsIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3RbMF0p
OwogfQogCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3Bl
cnRpZXMpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJv
cGVydGllcykKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OwpAQCAtMTg3LDcgKzIwNSw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1w
bGVUcmVlQW5kUHJvcGVydGllcykKICAgICBFWFBFQ1RfRVEoc2Vjb25kQ2hpbGRCb3VuZHMuaGVp
Z2h0KCksIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcy5oZWlnaHQoKSk7CiB9CiAKLVRFU1QoVHJl
ZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCitU
RVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxD
aGFuZ2UpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9y
PGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKQEAgLTIzNCw3ICsyNTIsNyBAQCBURVNUKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQog
fQogCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSwgc3luY2hyb25pemVzIGl0LCB0
aGVuIHN5bmNocm9uaXplcyB0byBhIHRvdGFsbHkgbmV3IHRyZWUuIEFsbCBsYXllcnMgZnJvbSB0
aGUgb2xkIHRyZWUgc2hvdWxkIGJlIGRlbGV0ZWQuCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0y
NjUsNyArMjgzLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVU
aGVuRGVzdHJveSkKIH0KIAogLy8gQ29uc3RydWN0cytzeW5jcyBhIHRyZWUgd2l0aCBtYXNrLCBy
ZXBsaWNhLCBhbmQgcmVwbGljYSBtYXNrIGxheWVycy4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQorVEVTVF9GKFRyZWVTeW5j
aHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykKIHsKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMzA3LDUgKzMy
NSw4NSBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBs
aWNhTWFza0xheWVycykKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogfQogCitURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKworICAgIC8vIEFk
ZCBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQgY29udHJvbGxlci4KKyAgICBnZXRBbmltYXRpb25D
b250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5k
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKK30KKworVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJU
ZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIDApOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5n
ZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3Qu
Z2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250
cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2
YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkp
OworCisgICAgLy8gUHVzaCBhbiBhbmltYXRpb24gcHJvcGVydHkgY2hhbmdlIHRvIHRoZSBpbXBs
IHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBhbiBhbmltYXRpb24gdG8gYmUgYWRkZWQpLgorICAg
IGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1h
dGlvbnMoKVswXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMCk7Cisg
ICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhs
YXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNU
X1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFu
aW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0Fi
b3J0ZWRBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9s
bGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZl
KCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJUcmVlUm9v
dCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVl
Um9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFib3J0IGFuIGFuaW1hdGlvbiBmcm9t
IHRoZSBtYWluIHRocmVhZC4KKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJv
b3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuY2xlYXIoKTsKKyAgICBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9v
dC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25D
b250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworfQorCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNDb21wbGV0ZWRB
bmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxh
eWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgp
KTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFi
aWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKwor
ICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIHVudGlsIGl0IGlzIGZpbmlzaGVkLiBB
dCB0aGUgbmV4dCBzeW5jLCB0aGUgbWFpbiB0aHJlYWQncyBhbmltYXRpb24gc2hvdWxkIGJlIGNs
ZWFyZWQuCisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlv
blJlc3VsdHM6OmNyZWF0ZSgpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKKyAgICBjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0ZSgyLCByZXN1bHRzLmdldCgpKTsKKworICAg
IEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQ
RUNUX0VRKHNpemVfdCgxKSwgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290Lmdl
dCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisKKyAgICBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5n
ZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBnZXRBbmltYXRpb25Db250cm9sbGVy
KGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKK30KIAog
fSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125404</attachid>
            <date>2012-02-03 13:47:12 -0800</date>
            <delta_ts>2012-02-03 15:12:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120203164711.patch</filename>
            <type>text/plain</type>
            <size>114940</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJjMWY2NWI1MTQ3NWMy
Y2Y0ZWMwOTgwODUyMWFkNTM3NTBkNjRmZi4uZDY0MzA5NzA1ZThkZTZlNDkxN2NjZDNkZmYyZTJl
OGNlNzE3MDQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0wMyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtQ2hyb21pdW1MYXllckFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRD
b250ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhh
c1J1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBs
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRp
b25TaWduYXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDQW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHQ6OkNDQW5pbWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5p
bWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvblJlc3VsdHM6On5DQ0FuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHRzOjpzdGFydGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OkNDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEy
LTAyLTAxICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
Q29udGVudCBlbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3Jl
bW92ZWQvcmVwbGFjZWQgaW4gYSBzaGFkb3cgdHJlZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggYzk3ZTRjM2I4YjRhNTE3NzgzOWJiY2Y3YTFmNWI2YjUyODNlMDcwMC4uZTBiZDUxYjhh
NTU0YjE2YTYyMzI0Y2VhODI4OTg2NGVmMDk5YjI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMi0wMi0wMyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBsdW1iIGZyb20gR3JhcGhpY3NMYXll
ciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoRmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjp+
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChG
YWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFu
c2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNvbnRyb2xsZXJDbGllbnQ6OmlkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJv
bGxlckNsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OnB1c2hBbmlt
YXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAgICAqIHRlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJl
ZVN5bmNocm9uaXplclRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplclRl
c3Q6OmdldEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTAyLTAxICBLZW50IFRhbXVyYSAg
PHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIERpc2FibGUgV2ViRnJh
bWVUZXN0LkZpbmRJblBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDFjODdmNjlkY2E4MWNjMGVj
NDA0ZTFmYzhhMDY0YTg1MjNkMzgzLi42OTU5NjZhYmVjZTI0YjI1MWE2MjRiYjhmNTExZGYxYmIx
YTlkMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjI0LDYgKzMyMjQsNyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLApA
QCAtMzI0MSw2ICszMjQyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3ZTUxZTI0YWVlZDMyYWZlOTcwZS4uOGNhYmYzZWJj
NjdkZDc0ODM2ZmJlNTJkMTI0NzFhMzkyNzE0MWNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVu
KQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNo
aWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0g
ICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAg
ICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIApAQCAtMzY5LDYgKzM2OSwzNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXllci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFt
ZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJl
bW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1
c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGxhdGZvcm1DaHJvbWl1bUxheWVyQW5p
bWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgbV9jbGllbnQtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgc3RhcnRUaW1lKTsK
K30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwpA
QCAtMzgzLDEyICs0MTQsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAobV9jb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVl
OwotICAKKwogICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJl
bW92ZWQgdmlhIHVwZGF0ZUNoaWxkTGlzdC4KICAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9
IDA7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAg
ICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CkBAIC01MzcsNyArNTY4LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICBtX2xh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9y
bShpZGVudGl0eSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNldCB0aGUgb2xkIGxheWVyIHRv
IG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRo
ZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIG1fbGF5ZXItPnNldE9wYWNpdHkoMSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggMzliMzY3YjlkM2YwZTJmODNhMzIw
ZjkwMmI1NDA2MmZiOTMxZTg2Ni4uZDE5MDFlZmEyYTc4MjFiNmFlYjE4NDNiMjNiZjY4ZmRhYTZk
NDNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTkyLDYgKzkyLDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxh
eWVyKik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBwbGF0Zm9ybUNo
cm9taXVtTGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpOworCiAgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggYjJmNzAxNDFiNDdhNWQ0N2I0NDAyOTM4MGQzOGNiM2RjM2M1YjMyOC4u
NWNjMGRmNzkwZmJlMDliMTVjMGZmYTUyYWJjZWRlNjgxNTQ5YTMwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTksNiArNjAsNyBA
QCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICA6IG1fbmVlZHNEaXNwbGF5KGZh
bHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDAp
CisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQb2lu
dCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05Niw2
ICs5OCwzOCBAQCB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewogfQog
Citib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9hbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmlt
YXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZz
ZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsK
KyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlv
bk5hbWUsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkK
K3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25O
YW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1
c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxl
ci0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwor
dm9pZCBMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKK3sKKyAgICBtX2FuaW1hdGlv
bkNvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwor
fQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBp
c05vbkNvbXBvc2l0ZWRDb250ZW50KQogewogICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9
IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7CkBAIC01MTQsNiArNTQ4LDExIEBAIGJvb2wgTGF5ZXJD
aHJvbWl1bTo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit2b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlcikKK3sKKyAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXIgPSBhbmltYXRpb25Db250cm9sbGVyOworfQorCiB2b2lkIHNv
cnRMYXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3Vy
cmVudGx5IHdlIGRvbid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0
aGVyZSdzIG5vIG5lZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCA3NjRmNzMwMTU1YjU0NTM3Y2RhNGM3MzgxYjNmZDNiY2I3OTYwNjRkLi44
OWI2MjY1ZDBmMTNkZGU1ZGRmYzkzZTU0NDgxZTZiZDIzMzBjMzA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC01MSw2ICs1MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5
ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CkBAIC02MCw3ICs2MSw2IEBAIGNs
YXNzIFJlZ2lvbjsKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFs
IGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBMYXll
ckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewotICAgIGZyaWVu
ZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCk7CiAKQEAgLTIxMSw3ICsyMTEsMjAgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRl
eHR1cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVz
OyB9CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Fs
d2F5c1Jlc2VydmVUZXh0dXJlczsgfQogCisgICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2
b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSk7CisKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAg
ICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKwogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFz
cyBDQ0xheWVySW1wbDsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdDsKKyAg
ICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVl
U3luY2hyb25pemVyOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdDsKKwog
ICAgIExheWVyQ2hyb21pdW0oKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVw
IHJlc291cmNlcyBiZWluZyBoZWxkIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKQEAgLTIzNCw4ICsy
NDcsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5
ZXI7CiAKLSAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xh
c3MgQ0NMYXllckltcGw7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBj
b3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGlu
dCBtX2xheWVySWQ7CkBAIC0yNDQsMTAgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQ
YXJlbnQoTGF5ZXJDaHJvbWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1
bSopIGNvbnN0OwogCi0gICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVy
bnMgdGhlIGluZGV4IG9mIHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGlu
ZGV4T2ZDaGlsZChjb25zdCBMYXllckNocm9taXVtKik7CkBAIC0yNTUsMTEgKzI2MywxNiBAQCBw
cml2YXRlOgogICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJv
bVBhcmVudC4KICAgICB2b2lkIHJlbW92ZUNoaWxkKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4g
bV9hbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb25Db250
cm9sbGVyKFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+KTsKKwogICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2NoaWxkcmVuOwogICAgIExheWVyQ2hyb21p
dW0qIG1fcGFyZW50OwogCiAgICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVI
b3N0OwogCisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlv
bkNvbnRyb2xsZXI7CisKICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwCmluZGV4IGQwZmQwY2U1MjNkNjM4ODRiZTkzMmUxYmQ0MTY1ODJmMjU3NjJlNDAu
LmRlMWNmOGE2OTRiYTFiM2ZmMWNhZjE3ODQ2ZmRiMWRlNTYyMTg0NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVHJlZVN5bmNocm9u
aXplci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTc0LDYgKzc1LDggQEAgUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0KICAgICBlbHNlCiAgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIo
MCk7CiAKKyAgICBsYXllci0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5zeW5jaHJvbml6ZUFuaW1h
dGlvbnMoY2NMYXllckltcGwtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisKICAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhjY0xheWVySW1wbC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJ
bXBsLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcAppbmRl
eCAyMWU2Y2M3YTllMjQ2ZWMwYmVmYWFhMDU4NGY2ZDIyMWM0NDYyMGVhLi4wMDA5Y2M4ODk4M2Ew
NjU5YjM4YTY5M2E5NjljYTRjMDc3NjY1N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uY3BwCkBAIC00NCw2ICs0NCw4IEBAIENDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBHcm91cElECiB7CiB9
CiAKK0NDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24oKSB7IH0KKwogdm9pZCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6c2V0UnVuU3RhdGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSBu
b3cpCiB7CiAgICAgaWYgKHJ1blN0YXRlID09IFJ1bm5pbmcgJiYgbV9ydW5TdGF0ZSA9PSBQYXVz
ZWQpCkBAIC02Myw2ICs2NSwyMSBAQCBib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc0ZpbmlzaGVk
QXQoZG91YmxlIHRpbWUpIGNvbnN0CiAgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0
aW9uQ3VydmUtPmR1cmF0aW9uKCkgPD0gdGltZSAtIHN0YXJ0VGltZSgpIC0gbV90b3RhbFBhdXNl
ZFRpbWU7CiB9CiAKK2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzV2FpdGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gV2FpdGluZ0Zvck5leHRUaWNrCisgICAgICAgIHx8
IG1fcnVuU3RhdGUgPT0gV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eQorICAgICAgICB8fCBt
X3J1blN0YXRlID09IFdhaXRpbmdGb3JTdGFydFRpbWU7Cit9CisKK2Jvb2wgQ0NBY3RpdmVBbmlt
YXRpb246OmlzUnVubmluZ09ySGFzUnVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0
ZSA9PSBSdW5uaW5nCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gRmluaXNoZWQKKyAgICAgICAg
fHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gUGF1c2Vk
OworfQorCiBkb3VibGUgQ0NBY3RpdmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0
aW9uKGRvdWJsZSBub3cpIGNvbnN0CiB7CiAgICAgZG91YmxlIHRyaW1tZWQgPSBub3c7CkBAIC05
NSw0ICsxMTIsMzYgQEAgZG91YmxlIENDQWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVu
dEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdAogICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1f
YW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkpOwogfQogCitQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3QKK3sK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0Fj
dGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1cnZlLT5jbG9uZSgpLCBtX2dyb3VwLCBtX3Rhcmdl
dFByb3BlcnR5KSkpOworICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKKyAg
ICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIHRvUmV0dXJuLT5t
X3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAgIHRvUmV0dXJuLT5tX3BhdXNlVGltZSA9IG1f
cGF1c2VUaW1lOworICAgIHRvUmV0dXJuLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVz
ZWRUaW1lOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NBY3Rp
dmVBbmltYXRpb246OnN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiogb3Ro
ZXIpCit7CisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBpbXBsIHRocmVhZCB0byBpbml0
aWF0ZSBhIHJ1biBzdGF0ZSBjaGFuZ2UuCisgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGFu
aW1hdGlvbiB3YXMgd2FpdGluZyBmb3IgYSBmdXR1cmUgZXZlbnQgdG8gdGFrZQorICAgIC8vIHBs
YWNlLCBhbmQgdGhlIGV2ZW50IGhhcyB0YWtlbiBwbGFjZS4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50
ICd0aGlzJyB0bworICAgIC8vIGFzc3VtZSB0aGUgaW1wbCB0aHJlYWQncyBydW4gc3RhdGUgYW5k
IHN0YXJ0IHRpbWUuCisgICAgaWYgKGlzV2FpdGluZygpICYmIG90aGVyLT5pc1J1bm5pbmdPckhh
c1J1bigpKSB7CisgICAgICAgIG1fcnVuU3RhdGUgPSBvdGhlci0+bV9ydW5TdGF0ZTsKKyAgICAg
ICAgbV9zdGFydFRpbWUgPSBvdGhlci0+bV9zdGFydFRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgb3RoZXItPm1fcnVuU3RhdGUgPSBtX3J1blN0YXRlOworICAgICAgICBvdGhlci0+bV9zdGFy
dFRpbWUgPSBtX3N0YXJ0VGltZTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2UgaW4gc3RhdGUgcmVs
YXRlZCB0byBpdGVyYXRpb25zIGFuZCBwYXVzZSBpcyBhbHdheXMgaW5pdGlhdGVkIGZyb20KKyAg
ICAvLyB0aGUgbWFpbiB0aHJlYWQsIHNvIGl0IGlzIHNhZmUgdG8gcHVzaCBwcm9wZXJ0aWVzIGlu
IHRoYXQgZGlyZWN0aW9uLgorICAgIG90aGVyLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlvbnM7
CisgICAgb3RoZXItPm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgb3RoZXItPm1fdG90
YWxQYXVzZWRUaW1lID0gbV90b3RhbFBhdXNlZFRpbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2Vk
MTJkNjU4ZDc2ZDYwNGVlZTlmYmFkMGEzZDEuLjY5NDQ4ZTUzYjI5NWVlYjQ4ZDgxMDMyYTM0OTgz
YjZmMDdlODQwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMjUsMjQg
KzI1LDI3IEBACiAjaWZuZGVmIENDQWN0aXZlQW5pbWF0aW9uX2gKICNkZWZpbmUgQ0NBY3RpdmVB
bmltYXRpb25faAogCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIENDQW5pbWF0aW9uQ3VydmU7Ci0KIC8vIEEgQ0NBY3RpdmVBbmlt
YXRpb24sIGNvbnRhaW5zIGFsbCB0aGUgc3RhdGUgcmVxdWlyZWQgdG8gcGxheSBhIENDQW5pbWF0
aW9uQ3VydmUuCiAvLyBTcGVjaWZpY2FsbHksIHRoZSBhZmZlY3RlZCBwcm9wZXJ0eSwgdGhlIHJ1
biBzdGF0ZSAocGF1c2VkLCBmaW5pc2hlZCwgZXRjLiksCiAvLyBsb29wIGNvdW50LCBsYXN0IHBh
dXNlIHRpbWUsIGFuZCB0aGUgdG90YWwgdGltZSBzcGVudCBwYXVzZWQuCiBjbGFzcyBDQ0FjdGl2
ZUFuaW1hdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NBY3RpdmVBbmltYXRpb24p
OwogcHVibGljOgogICAgIC8vIEFuaW1hdGlvbnMgdGhhdCBtdXN0IGJlIHJ1biB0b2dldGhlciBh
cmUgY2FsbGVkICdncm91cGVkJyBhbmQgaGF2ZSB0aGUgc2FtZSBHcm91cElECiAgICAgLy8gR3Jv
dXBlZCBhbmltYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUg
YW5kIG5vIG90aGVyIGFuaW1hdGlvbnMKICAgICAvLyBtYXkgYW5pbWF0ZSBhbnkgb2YgdGhlIGdy
b3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMgdW50aWwgYWxsIGFuaW1hdGlvbnMgaW4gdGhlCiAgICAg
Ly8gZ3JvdXAgaGF2ZSBmaW5pc2hlZCBhbmltYXRpbmcuIE5vdGU6IGFuIGFjdGl2ZSBhbmltYXRp
b24ncyBncm91cCBpZCBhbmQgdGFyZ2V0CiAgICAgLy8gcHJvcGVydHkgdW5pcXVlbHkgaWRlbnRp
ZnkgdGhhdCBhbmltYXRpb24uCi0gICAgdHlwZWRlZiBpbnQgR3JvdXBJRDsKKyAgICB0eXBlZGVm
IHNpemVfdCBHcm91cElEOwogCiAgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhl
ICd3YWl0aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawog
ICAgIC8vIHdpbGwgc3RhcnQgdGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4g
QW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKQEAgLTY4LDEyICs3MSwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIE9wYWNpdHkKICAgICB9OwogCisgICAgc3RydWN0IEFuaW1hdGlvblNpZ25hdHVy
ZSB7CisgICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShHcm91cElEIGdyb3VwSUQsIFRhcmdldFBy
b3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgOiBncm91cElEKGdyb3VwSUQpCisg
ICAgICAgICAgICAsIHRhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KSB7IH0KKyAgICAgICAg
R3JvdXBJRCBncm91cElEOworICAgICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eTsK
KyAgICB9OworCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0
ZShQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBHcm91cElEIGdyb3VwLCBUYXJn
ZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0eSkpOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVh
bCB+Q0NBY3RpdmVBbmltYXRpb24oKTsKIAogICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJl
dHVybiBtX2dyb3VwOyB9CiAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkoKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldFByb3BlcnR5OyB9CkBAIC05Myw2ICsxMDQsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OwogICAgIGJvb2wgaXNG
aW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5T
dGF0ZSA9PSBBYm9ydGVkOyB9CiAKKyAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OworICAgIGJv
b2wgaXNSdW5uaW5nT3JIYXNSdW4oKSBjb25zdDsKKwogICAgIENDQW5pbWF0aW9uQ3VydmUqIGFu
aW1hdGlvbkN1cnZlKCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogICAgIGNv
bnN0IENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogCkBAIC0xMDAsNiArMTE0LDEyIEBAIHB1YmxpYzoKICAg
ICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJy
ZW50IGl0ZXJhdGlvbi4KICAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91
YmxlIG5vdykgY29uc3Q7CiAKKyAgICBBbmltYXRpb25TaWduYXR1cmUgc2lnbmF0dXJlKCkgY29u
c3QgeyByZXR1cm4gQW5pbWF0aW9uU2lnbmF0dXJlKG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkp
OyB9CisKKyAgICBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjbG9uZUZvckltcGxUaHJl
YWQoKSBjb25zdDsKKworICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5p
bWF0aW9uKik7CisKIHByaXZhdGU6CiAgICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkN1cnZlLmgKaW5kZXggZGU5N2UzOGMwYTI0ZTc3NzhiOGQ5NmRjOTBmZWY2ZWM5
OTM5YmFlMy4uNTMzYWJhZmVmNDU0N2Q1NDkzYmE1OTcxMWJlMTU1MTY2N2VlMjRmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaApAQCAtMjUsNiArMjUsMTAgQEAKICNpZm5kZWYgQ0NB
bmltYXRpb25DdXJ2ZV9oCiAjZGVmaW5lIENDQW5pbWF0aW9uQ3VydmVfaAogCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOwpAQCAt
NDEsNiArNDUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKICAgICBj
b25zdCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIHRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpIGNvbnN0
OwogICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRvVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoKSBjb25zdDsKQEAgLTYwLDcgKzY1LDcgQEAgY2xhc3MgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0FuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5DQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBs
YXllclNpemUpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBhcnRpYWwgQ0NBbmltYXRpb24gaW1wbGVt
ZW50YXRpb24uCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBUcmFuc2Zv
cm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJlODY5
MDM0OTYwOGIzOWI1MGQxYjIyMTRjMDJjYmVkMjcwYTFlMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uUmVz
dWx0cy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRp
b25SZXN1bHRzX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25SZXN1bHRzX2gKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gVXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIGFuaW1hdGlvbiBldmVudCBoYXMgdGFr
ZW4gcGxhY2Ugb24gdGhlIGdpdmVuIGxheWVyIGF0IHRoZSBnaXZlbiB0aW1lLgorc3RydWN0IEND
QW5pbWF0aW9uUmVzdWx0IHsKKyAgICBDQ0FuaW1hdGlvblJlc3VsdChpbnQgbGF5ZXJJRCwgZG91
YmxlIHRpbWUpCisgICAgICAgIDogbGF5ZXJJRChsYXllcklEKQorICAgICAgICAsIHRpbWUodGlt
ZSkgeyB9CisgICAgaW50IGxheWVySUQ7CisgICAgZG91YmxlIHRpbWU7Cit9OworCisvLyBUaGlz
IGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgYmFjayB0byBtYWluIGFuaW1hdGlvbiBlbmdpbmUgdGhh
dCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGhhdmUgc3RhcnRlZC4KK2NsYXNzIENDQW5pbWF0aW9u
UmVzdWx0cyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1
bHRzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvblJlc3VsdHMpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uUmVzdWx0cygp
IHsgfQorCisgICAgVmVjdG9yPENDQW5pbWF0aW9uUmVzdWx0PiYgc3RhcnRlZEFuaW1hdGlvbnMo
KSB7IHJldHVybiBtX3N0YXJ0ZWRBbmltYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAgQ0NBbmlt
YXRpb25SZXN1bHRzKCkgeyB9CisKKyAgICBWZWN0b3I8Q0NBbmltYXRpb25SZXN1bHQ+IG1fc3Rh
cnRlZEFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBDQ0FuaW1hdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYTU1MDM4N2UxNjc1OGVmMjE4NGU0ZTIy
N2E1ODBjODIyNjAyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlzdAorI2luY2x1ZGUgImNjL0NDQWN0
aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworfQorCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCit7Cit9CisKKy8vIEVuc3VyZXMg
dGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5k
IHRoZSBpbXBsIHRocmVhZAorLy8gYXJlIGtlcHQgaW4gc3luYy4KK3ZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIHJlbW92ZUFuaW1hdGlvbnNDb21w
bGV0ZWRPbkltcGxUaHJlYWQoY29udHJvbGxlckltcGwpOworICAgIHB1c2hOZXdBbmltYXRpb25z
VG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICByZW1vdmVBbmltYXRpb25zQ29tcGxl
dGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBwdXNoQW5pbWF0aW9uUHJvcGVy
dGllcyhjb250cm9sbGVySW1wbCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBBbnkgYW5pbWF0aW9u
cyBmaW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQncyBjb2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxl
ckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmUo
Y29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSUQsIGNvbnRyb2xs
ZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7CisgICAgY29u
dHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7CisgICAgLy8g
QW55IG5ldyBhbmltYXRpb25zIG93bmVkIGJ5IHRoZSBtYWluIHRocmVhZCdzIGNvbnRyb2xsZXIg
YXJlIGNsb25lZCBhbmQgYWRkZSB0byB0aGUgaW1wbCB0aHJlYWQncyBjb250cm9sbGVyLgorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICghY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbihtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJv
cGVydHkoKSkpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVh
ZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAg
IC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMg
bm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVy
YXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50
ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dh
cmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9s
bGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgQ0NBY3RpdmVB
bmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRpb24oY29udHJvbGxlckltcGwtPm1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIGlmICghY3VycmVudCkKKyAg
ICAgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0ZSBhbGwg
aW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGlu
ZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xs
ZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNy
ZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWlu
YXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBj
dXJyZW50SW1wbCA9IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7
CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0aW9u
KGN1cnJlbnRJbXBsLT5ncm91cCgpLCBjdXJyZW50SW1wbC0+dGFyZ2V0UHJvcGVydHkoKSk7Cisg
ICAgICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAg
ICBjdXJyZW50LT5zeW5jaHJvbml6ZVByb3BlcnRpZXMoY3VycmVudEltcGwpOworICAgIH0KK30K
KworQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3Rp
dmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAg
ICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOworfQor
Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoQ0NBY3RpdmVBbmltYXRp
b246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSA9PSB0YXJnZXRQcm9wZXJ0eSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJl
bW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNhOTYwN2U5ODE0NmE2YmQ2NTUwM2U3NGYxMDRlYTM4
MGM0MTg3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9o
CisjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uOwor
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOworc3RydWN0IEludFNpemU7Citj
bGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIFRoZXNlIGFyZSB2aXJ0dWFsIGZvciB0
ZXN0aW5nLgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKworICAgIC8v
IEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0
aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAorICAgIC8vIGFyZSBrZXB0IGluIHN5bmMuIFRoaXMg
ZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGltcGwgdGhyZWFkIGNvbnRy
b2xsZXIuCisgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKik7CisKKyAgICAvLyBUaGlzIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u
bHkuCisgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiYgYWN0aXZlQW5pbWF0
aW9ucygpIHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJl
bW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKik7CisgICAgdm9pZCBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnND
b21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Cisg
ICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwqKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSk7CisgICAgdm9pZCByZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisKKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmluZGV4
IGJiY2E5Y2JkOTA1NWUxZWMxM2NjMGE5NzQ2MzljNWY5NzA4ODA5OTIuLjUxYTg0ZDQ2NDM2Nzhm
Y2IxYTU3ODA4ZGY4MjlmYTk2ZmRlYWViZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtMjYsNyArMjYsOSBAQAogCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00NCwyMiArNDYsMjIgQEAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkMKIHsKIH0K
IAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91YmxlIGZy
YW1lQmVnaW5UaW1lU2VjcykKK0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpIHsgfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1h
dGlvblJlc3VsdHMqIHJlc3VsdHMpCiB7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5l
eHRUaWNrKGZyYW1lQmVnaW5UaW1lU2Vjcyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZShmcmFtZUJlZ2luVGltZVNlY3MpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzKTsK
KyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vj
cywgcmVzdWx0cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOwogICAgIHJlc29sdmVDb25mbGljdHMo
ZnJhbWVCZWdpblRpbWVTZWNzKTsKICAgICB0aWNrQW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZVNl
Y3MpOwogICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7Ci0gICAgc3RhcnRBbmltYXRpb25z
V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHN0
YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVT
ZWNzLCByZXN1bHRzKTsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQogewogICAgIG1fYWN0aXZl
QW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+YW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZSh0aGlzKTsKIH0KIAogQ0NB
Y3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZl
QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCkBAIC04MCwyNSArODIsMjggQEAgYm9vbCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
ck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVzdWx0cyogcmVzdWx0cykKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5v
dyk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cp
OworICAgICAgICAgICAgcmVzdWx0cy0+c3RhcnRlZEFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBbmlt
YXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5vdykpOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdywg
Q0NBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdG
b3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBub3cp
CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5zdGFydFRpbWUoKSA8PSBub3cpIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CisgICAgICAg
ICAgICByZXN1bHRzLT5zdGFydGVkQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3Vs
dChtX2NsaWVudC0+aWQoKSwgbm93KSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3Vi
bGUgbm93LCBDQ0FuaW1hdGlvblJlc3VsdHMqIHJlc3VsdHMpCiB7CiAgICAgLy8gRmlyc3QgY29s
bGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCiAgICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJv
cGVydGllczsKQEAgLTEzNCw2ICsxMzksNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eQogICAg
ICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1f
YWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVu
bmluZywgbm93KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tq
XS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLT5z
dGFydGVkQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3VsdChtX2NsaWVudC0+aWQo
KSwgbm93KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0xNzgsOSArMTg0LDEwIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRB
cmVGaW5pc2hlZCkKKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7
CisgICAgICAgICAgICBtX2ZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zaWduYXR1cmUoKSk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVt
b3ZlKGkpOwotICAgICAgICBlbHNlCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaSsrOwog
ICAgIH0KIH0KQEAgLTE5NCwxNCArMjAxLDExIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUgbm93KQogCiAgICAgICAgICAgICBjYXNl
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBD
Q1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+YW5pbWF0aW9uQ3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9ucyA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKICAg
ICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobm93
KSkKICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG5vdyk7CiAKLSAgICAgICAgICAgICAgICAv
LyBEZWNpZGUgaGVyZSBpZiBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gQWJzb2x1dGUgZm9yIG5vdy4K
LSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b0FwcGx5OwotICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbnMuYXBwbHkoRmxvYXRTaXplKCksIHRvQXBwbHkpOwotICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0odG9BcHBseSk7CisgICAgICAgICAgICAgICAg
bV9jbGllbnQtPnNldFRyYW5zZm9ybShtYXRyaXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbC5oCmluZGV4IDFhZDIyM2RiYTgyM2EyYTA1N2IxMDJkOTZhYTk1YWVhYjJk
NTI4NjQuLjI0NWUwZDY4NjE4OWJiZTYwOTkzMmI0MTQ0MDY3ZDNmYzE4ZTEzOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCkBAIC0y
OSwxMiArMjksMTQgQEAKICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCiAKICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlv
blJlc3VsdHM7CiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBJ
bnRTaXplOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBAIC00NCwxOCArNDYsMjIgQEAg
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KIAor
ICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0
eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwog
ICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1wbERp
ZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0ZShDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJh
bWVCZWdpblRpbWVTZWNzKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwoKTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBD
Q0FuaW1hdGlvblJlc3VsdHMqKTsKIAogICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+KTsKIApAQCAtNjcsMTIgKzczLDE0IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0Fj
dGl2ZUFuaW1hdGlvbigpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKKwogICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBi
eSB0aGUgbGF5ZXIuCiAgICAgZXhwbGljaXQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwogCi0gICAgdm9pZCBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3cpOwotICAgIHZvaWQgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93KTsKKyAg
ICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbm93LCBDQ0Fu
aW1hdGlvblJlc3VsdHMqKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzKik7CisgICAgdm9pZCBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0
aW9uUmVzdWx0cyopOwogICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbm93KTsKICAg
ICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7CiAKQEAgLTgwLDYgKzg4LDcgQEAgcHJp
dmF0ZToKIAogICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCogbV9jbGll
bnQ7CiAgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1h
dGlvbnM7CisgICAgVmVjdG9yPENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25TaWduYXR1cmU+
IG1fZmluaXNoZWRBbmltYXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDgxZjk3MTJlMGZhYzBmOTgxMjg4OGRhMmU3M2ZmMzNl
ZmQ2MDY1YTQuLmU4OTI5OGUxZjNkMzNhOGEwZGRiMjQxNjM0NzQ2MTcyZjNjMTQxNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1
ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CkBAIC02MSw2ICs2Miw3IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQp
CiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCiAgICAgLCBtX2RlYnVnQm9yZGVyQ29sb3IoMCwgMCwg
MCwgMCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQorICAgICwgbV9hbmltYXRpb25Db250
cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKHRoaXMpKQogewog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAppbmRleCAwMGUwYWRmOGE1MWZkZWMwNGE5ZjQyNWYwNDU3YWEzMzg4Y2VhM2FhLi4zM2ViZDQ3
MzdhZGY0N2VjNjE2ZjQ2ZDU2NzNmYmNkYWQzNzFiZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgpAQCAtNDAsMTYgKzQxLDI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOwogY2xhc3MgQ0NMYXllclNvcnRlcjsK
IGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKLWNs
YXNzIENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsKK2NsYXNz
IENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+LCBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwoaWQpKTsKICAgICB9CisKKyAgICAvLyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmly
dHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisgICAg
dmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsg
fQorCiAgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKIAogICAgIC8vIFRyZWUgc3RydWN0dXJl
LgpAQCAtNjUsOCArNzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIoUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4pOwogICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQogCi0gICAgaW50IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllcklkOyB9Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVn
SUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgpAQCAtMTA2LDkgKzExNSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYXF1ZShib29sKTsKICAgICBib29sIG9wYXF1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQp
OwotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLQogICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCkBAIC0xMjQsOSAr
MTMwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3Vi
bGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CiAK
LSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybTsgfQotCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBt
X25hbWUgPSBuYW1lOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAKQEAgLTE0OSw3ICsxNTIsNiBAQCBwdWJsaWM6CiAgICAgQ0NSZW5kZXJTdXJm
YWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJT
dXJmYWNlOyB9CiAgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFj
ZSogc3VyZmFjZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CiAKLSAgICBj
b25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogICAgIHZv
aWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKIAogICAgIGNvbnN0IEludFNpemUmIGNvbnRl
bnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3VuZHM7IH0KQEAgLTE5OCw2ICsy
MDAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJlc2V0QWxsQ2hhbmdl
VHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqIGFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKGludCk7CiAK
QEAgLTMwNSw2ICszMDksOSBAQCBwcml2YXRlOgogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0
IHdhcyByZXBhaW50ZWQvdXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBw
bHVnaW4gbGF5ZXJzIGJ5cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KICAgICBGbG9hdFJl
Y3QgbV91cGRhdGVSZWN0OworCisgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZvciB0aGlzIGxh
eWVyLgorICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IG1fYW5pbWF0
aW9uQ29udHJvbGxlcjsKIH07CiAKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6
aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAppbmRleCA0ZmY4NDM0YjIwMGM5MmQ0OGEwOGJmOTFjMTRiMjdmODIxOWRkYWI2Li5kYjEw
MWU3ZmQ0OTJkOTA4OThhZmRlMTU2MDkxNWYyZGI0YjM0YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVy
YXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKQEAgLTE1NCw5ICsxNTUsMTAgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCiAgICAg
Ly8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBleGlzdHMgYXQgYWxsLi4uCi0gICAgaWYgKHJv
b3RMYXllcigpKQorICAgIGlmIChyb290TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0
Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCks
IGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNl
dE5lZWRzQW5pbWF0ZUxheWVycygpOworICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0
Um9vdExheWVyKDApOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1l
TnVtYmVyKCkpOwpAQCAtMjM2LDYgKzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
TmVlZHNSZWRyYXcoKQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0K
IAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMoUGFzc093blB0cjxD
Q0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMpCit7CisgICAgQVNTRVJUKENDVGhyZWFkUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuIFdpbGwgaGF2
ZSB0byB3YWxrIHRoZSB0cmVlLgorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExh
eWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogewogICAgIGlmIChtX3Jv
b3RMYXllciA9PSByb290TGF5ZXIpCkBAIC0zMTMsOSArMzIxLDExIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAgaWYgKHJvb3RMYXllcigp
KSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAg
ZWxzZQorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKCk7CisgICAgfSBl
bHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKaW5kZXggZjU4MjAzZDE1ZWIyMDQ1MDcxYzJlZmE0NDhiYTQwYmYxOWE1
NGNhYS4uMmUyYWYwM2Q3ZjQwNTZmNDYyODc3MmJjODI0NmY3ZGMzMmZiNmMwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgR3JDb250ZXh0Owog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CkBAIC0xNjYsNiArMTY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdCgpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAorICAg
IHZvaWQgc2V0QW5pbWF0aW9uUmVzdWx0cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4p
OworCiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIu
Z2V0KCk7IH0KICAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCAxODQ2ZDZjMmVmNWI3NGNlYzcxMTUyNmM4ZTRkZTJlMTg3NzE3YTU0Li4wMzhlOTIx
MjliMGFkMjE4OWM2YjQ4MTJhNjMwYmJmYjFhNjg2NTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2lu
Y2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgpAQCAtNTcsNiArNTgs
NyBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0
dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgICwgbV9zZW50UGFnZVNjYWxlRGVsdGEo
MSkKICAgICAsIG1fbWluUGFnZVNjYWxlKDApCiAgICAgLCBtX21heFBhZ2VTY2FsZSgwKQorICAg
ICwgbV9uZWVkc0FuaW1hdGVMYXllcnModHJ1ZSkKICAgICAsIG1fcGluY2hHZXN0dXJlQWN0aXZl
KGZhbHNlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CkBAIC05Nywy
MSArOTksMjcgQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRl
eHQoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVn
aW5UaW1lTXMpCiB7Ci0gICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbikKKyAgICBpZiAoIW1f
cGFnZVNjYWxlQW5pbWF0aW9uICYmICFtX25lZWRzQW5pbWF0ZUxheWVycykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsK
KyAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24pIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKIAotICAgIHNldFBhZ2VTY2FsZURlbHRhKG1f
cGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykgLyBt
X3BhZ2VTY2FsZSk7Ci0gICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRp
b24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKLSAgICBuZXh0U2Nyb2xs
LnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2Nh
bGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNj
YWxlKTsKKyAgICAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24t
PnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKKyAgICAgICAgbmV4dFNjcm9s
bC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwogCi0gICAgaWYgKG1fcGFnZVNj
YWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMp
KSB7Ci0gICAgICAgIG1fcGFnZVNjYWxlQW5pbWF0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fY2xp
ZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBpZiAobV9wYWdlU2Nh
bGVBbmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykp
IHsKKyAgICAgICAgICAgIG1fcGFnZVNjYWxlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgICAgICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIGlmIChtX25lZWRzQW5pbWF0ZUxheWVycyAmJiBtX3Jvb3RMYXllckltcGwuZ2V0
KCkpCisgICAgICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWVNcyAvIDEwMDApOworCisg
ICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91Ymxl
IHN0YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25NcykKQEAgLTI0NCw2ICsyNTIsMjQgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NM
aXN0JiBwYXNzZXMpCiAgICAgICAgIHBhc3Nlc1tpXS0+b3B0aW1pemVRdWFkcygpOwogfQogCiti
b29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllcklt
cGwqIGN1cnJlbnQsIGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVzdWx0
cyogcmVzdWx0cykKK3sKKyAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOworCisg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1
cnJlbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKSB7CisgICAgICAgIG5lZWRzQW5pbWF0ZUxheWVycyA9IHRy
dWU7CisgICAgICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lU2Vj
cywgcmVzdWx0cyk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJyZW50
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhbmltYXRlTGF5ZXJzUmVj
dXJzaXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCksIGZyYW1lQmVnaW5UaW1lU2Vjcywg
cmVzdWx0cykpCisgICAgICAgICAgICBuZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBuZWVkc0FuaW1hdGVMYXllcnM7Cit9CisKIEludFNpemUgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTog
SGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKQEAgLTU0
Miw0ICs1NjgsMTQgQEAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKICAgICByZXR1cm4gc2Nyb2xsSW5mby5y
ZWxlYXNlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhk
b3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKG1fbmVlZHNB
bmltYXRlTGF5ZXJzKTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKEND
QW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOworICAgIG1fbmVlZHNBbmltYXRlTGF5ZXJzID0g
YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIGZyYW1lQmVnaW5U
aW1lU2VjcywgcmVzdWx0cy5nZXQoKSk7CisgICAgaWYgKCFyZXN1bHRzLT5zdGFydGVkQW5pbWF0
aW9ucygpLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnB1c2hBbmltYXRpb25SZXN1bHRU
b01haW5UaHJlYWRPbkltcGxUaHJlYWQocmVzdWx0cy5yZWxlYXNlKCkpOwogfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXgg
YTcxYWRhZTY3NTMyZjMyNDk2YTU0Mjg0YWE1N2Y3MGIzNDA0Y2QwMS4uZjZkMDQ0Yzc2MmI5MWNh
OGVlNTI3NGE5Mjg2ZWMwN2UyOTNlYjJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiAjaWYgVVNFKFNLSUEpCkBAIC0zOCw2ICszOSw3IEBAIGNsYXNzIEdyQ29u
dGV4dDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlvblJlc3VsdHM7
CiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKIGNsYXNzIENDUGFnZVNjYWxlQW5pbWF0aW9uOwog
Y2xhc3MgQ0NMYXllckltcGw7CkBAIC01Miw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1
c2hBbmltYXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0Fu
aW1hdGlvblJlc3VsdHM+KSA9IDA7CiB9OwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMg
dGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0
ZQpAQCAtMTE3LDggKzEyMCwxNSBAQCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKIAorICAgIGJvb2wgbmVlZHNBbmlt
YXRlTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KKyAgICB2
b2lkIHNldE5lZWRzQW5pbWF0ZUxheWVycygpIHsgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVl
OyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGlu
Z3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisKKyAgICAvLyB2aXJ0dWFsIGZvciB0
ZXN0aW5nLgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZVNlY3MpOworCiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7CiAg
ICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CkBAIC0x
MzMsNiArMTQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFj
ZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRl
clBhc3NMaXN0Jik7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NM
aXN0Jik7CisgICAgYm9vbCBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiwgZG91
YmxlIGZyYW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25SZXN1bHRzKik7CiAgICAgSW50U2l6
ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbV9sYXllclJlbmRlcmVyOwpAQCAtMTQ4LDYgKzE1OSw4IEBAIHByaXZhdGU6CiAgICAgZmxv
YXQgbV9zZW50UGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4
UGFnZVNjYWxlOwogCisgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBuZWNlc3NhcnkgdG8g
dHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3JzLgorICAgIGJvb2wg
bV9uZWVkc0FuaW1hdGVMYXllcnM7CiAgICAgYm9vbCBtX3BpbmNoR2VzdHVyZUFjdGl2ZTsKIAog
ICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2NhbGVBbmltYXRpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDcyYmVjMmE3MTY2NGFm
NDNjZDY0ZDAxNGQyOGI4NDI2NTA5NWIyMDMuLmUzMzZkMGNlMDFkNWQ3NTBlYTA5MjliMTM4OTA1
OTAwZGJiNGEyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgpAQCAtMjA4LDYgKzIwOSwxMSBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQ
YXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cykKK3sKKyAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldEFuaW1hdGlvblJlc3VsdHMocmVzdWx0cyk7Cit9CisKIC8vIENhbGxlZCBieSB0
aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMg
dGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVk
aWF0ZWx5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCA0ZmFh
MjI5OTkxMmFlYzljNGU2YWI0YmE3MDI3ZDgxYzgwNmQ0NWVlLi4wNDc5OGY2ZGZjMzEwYzc3MTE5
NmM3NTNlYzRiY2IzNmFmOWQ5MGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NB
bmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogCiBjbGFzcyBDQ1Npbmds
ZVRocmVhZFByb3h5IDogcHVibGljIENDUHJveHksIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQg
ewpAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZl
cnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmVlZHNDb21taXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHB1c2hBbmltYXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQo
UGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KTsKIAogICAgIC8vIENhbGxlZCBieSB0aGUg
bGVnYWN5IHBhdGggd2hlcmUgUmVuZGVyV2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAgICAg
dm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApp
bmRleCA1ZTZhOGY4NjI2MmRmNjI0NDk0MmU1YjQyYjQyZWJhYTg4ODMzYTJkLi5kM2QyMDEzMjhi
MDY1NjA2MDY0NGNjZGE0MDI4ZTMwMmMxNWU3YTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRz
LmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5oIgogI2luY2x1ZGUgImNj
L0NDRnJhbWVSYXRlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgi
CkBAIC0yMjcsNiArMjI4LDEzIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRP
bkltcGxUaHJlYWQoKQogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5zZXROZWVkc0NvbW1p
dCgpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMp
Cit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHMiLCB0aGlzLCAwKTsKKyAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpwdXNoQW5pbWF0aW9uUmVzdWx0cywgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhyZXN1bHRzLmxl
YWtQdHIoKSkpKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTUyOCw2ICs1MzYsMTQgQEAgdm9pZCBD
Q1RocmVhZFByb3h5OjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkKICAgICBtX2xheWVyVHJlZUhv
c3QtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5Ojpw
dXNoQW5pbWF0aW9uUmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHMqIHJlc3VsdHMpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uUmVzdWx0cyhhZG9w
dFB0cihyZXN1bHRzKSk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxP
bkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiB7CiAgICAgVFJBQ0Vf
RVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkIiwgdGhpcywg
MCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggYTExYjUyNzg1OTkzMWNmYjk4Zjg3MjRh
NTEyNDNhMDliNGVjYzNiOS4uNmVkZWUzMDYyZjZkODA0Y2FkYjA3NmZjMmQwZDRkMGU4NzNmOTk4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNzIENDSW5wdXRI
YW5kbGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NTY2hlZHVsZXI7CkBAIC02
OCw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBs
ZXRlT25JbXBsVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7
CisgICAgdmlydHVhbCB2b2lkIHB1c2hBbmltYXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxU
aHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KTsKIAogICAgIC8vIENDU2NoZWR1
bGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBib29sIGNhbkRyYXcoKTsKQEAg
LTg0LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXQoaW50
IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUsIFBhc3NPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4pOwogICAgIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7CiAgICAg
dm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBwdXNoQW5pbWF0aW9uUmVz
dWx0cyhDQ0FuaW1hdGlvblJlc3VsdHMqKTsKIAogICAgIC8vIENhbGxlZCBvbiBpbXBsIHRocmVh
ZAogICAgIHN0cnVjdCBSZWFkYmFja1JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKaW5kZXggZTE1ZmJmY2FhODZkNzU1NjM5ZWVjODFhN2I3ZWY2N2RkNjZjNTBiZi4uZjMzMTk4
MjE5YWRmN2Q1ZjBmOTJiMjE2YWVmMDA4NjI5OGQxMWFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRl
ZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1
ZGU4NjhhMmYzYTI1YWIwMzAyMGVkMjVjMWQwZWM0OTBhLi4yNjFlZGZmZjg1MmYzM2MxM2I0OTIx
YmU3MGU2MDllNDJmNWUyYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0K
LSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2
ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVy
biAxOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJl
dHVybiAwOyB9Ci19OworbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9u
cyhpdGVyYXRpb25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAtMTY0
LDQgKzE2MCw0IEBAIFRFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQogICAg
IEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmQ4YTJmZTIxNTFlNjhm
MmQ1NmM2YzlhMDQ3YjZjZDk4M2VmOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtMCwwICsxLDk5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisjZGVmaW5l
IENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZl
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7
CisKK2NsYXNzIEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYkNvcmU6OkNDRmxv
YXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmFrZUZsb2F0QW5pbWF0
aW9uQ3VydmUoKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlv
bkN1cnZlPiBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKTsKKyAgICB9Cit9OworCitjbGFzcyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IHsKK3B1YmxpYzoKKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24p
IDogbV9kdXJhdGlvbihkdXJhdGlvbikgeyB9CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRy
YW5zaXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRp
b25DdXJ2ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBkb3VibGUgbV9kdXJhdGlvbjsKK307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBw
dWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtl
RmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisg
ICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAg
ICAgICAgLCBtX3RvKHRvKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRU
cmFuc2l0aW9uKCkgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0
aW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOworICAgICAgICBp
ZiAodGltZSA+PSAxKQorICAgICAgICAgICAgdGltZSA9IDE7CisgICAgICAgIHJldHVybiAoMSAt
IHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87CisgICAgfQorCisgICAgdmlydHVhbCBQYXNz
T3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigqdGhpcykpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zy
b207CisgICAgZmxvYXQgbV90bzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisK
KyNlbmRpZiAvLyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QuY3BwCmluZGV4IDNkNTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTVi
MGY1M2IuLjUyYWMzOWY0NWRhNjBmNGMwY2E5MjRmZTUyZWU3MTk2YTI3MDViMDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApAQCAtMjQsMTYgKzI0LDE2IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUu
aCIKLQorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2luY2x1ZGUgPGdtb2Nr
L2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOwogCiBuYW1lc3BhY2UgewogCkBAIC00Miw3NCArNDIsMzkgQEAgcHVibGljOgogICAgIEZh
a2VDb250cm9sbGVyQ2xpZW50KCkgOiBtX29wYWNpdHkoMCkgeyB9CiAgICAgdmlydHVhbCB+RmFr
ZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KIAorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhY2l0eTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsg
bV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKiBjb250cm9sbGVyKQotICAgIHsKLSAgICAgICAgbV9hY3RpdmVDb250cm9sbGVycy5hcHBl
bmQoY29udHJvbGxlcik7Ci0gICAgfQotCi0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVycygpIHsgcmV0dXJuIG1fYWN0aXZlQ29udHJv
bGxlcnM7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRzOyB9CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwotICAgIFZlY3RvcjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwqPiBtX2FjdGl2ZUNvbnRyb2xsZXJzOwotfTsKLQotY2xhc3MgRmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb24gOiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7
Ci1wdWJsaWM6Ci0gICAgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKSA6
IG1fZHVyYXRpb24oZHVyYXRpb24pIHsgfQotICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0
aW9ucyBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBU
cmFuc2Zvcm1PcGVyYXRpb25zKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX2R1
cmF0aW9uOworICAgIEludFNpemUgbV9ib3VuZHM7CiB9OwogCi1jbGFzcyBGYWtlRmxvYXRUcmFu
c2l0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgRmFr
ZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQot
ICAgICAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCi0gICAgICAgICwgbV9mcm9tKGZyb20pCi0g
ICAgICAgICwgbV90byh0bykKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBkb3VibGUgZHVy
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBn
ZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHRpbWUgLz0gbV9kdXJh
dGlvbjsKLSAgICAgICAgaWYgKHRpbWUgPj0gMSkKLSAgICAgICAgICAgIHRpbWUgPSAxOwotICAg
ICAgICByZXR1cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLSAgICBmbG9hdCBtX2Zyb207Ci0gICAg
ZmxvYXQgbV90bzsKLX07CitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3Rp
dmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCit7CisgICAgcmV0dXJu
IENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIGlkLCBwcm9wZXJ0eSk7Cit9CiAKIC8v
IFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4
cGVjdGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFs
VHJhbnNpdGlvbikKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKEND
QW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1
bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xs
ZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAK
ICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
RVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTE3LDIwICs4MiwyMSBAQCBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogLy8gVGVzdHMg
dGhhdCB0d28gcXVldWVkIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1
biBpbiBzZXF1ZW5jZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwg
VHJpdmlhbFF1ZXVpbmcpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0
cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVu
dCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0
cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVD
VF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0xMzgsMjIgKzEwNCwyMyBAQCBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQogLy8gVGVz
dHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KIFRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogeworICAg
IE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpj
cmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0gICAgY29udHJvbGxl
ci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGljaywgMCk7
CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAuNSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLjUsIHJlc3VsdHMuZ2V0KCkpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9X
LgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUsIHJlc3VsdHMuZ2V0KCkpOwogICAg
IEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0xNjEsMjMgKzEyOCwyNCBAQCBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEludGVycnVwdCkKIC8vIFRl
c3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdoZW4gb25seSBv
bmUgcHJvcGVydHkgaXMgZnJlZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCiB7CisgICAgT3du
UHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0
ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3Jt
KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgLy8gU2hvdWxkIG5v
dCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKICAgICAvLyBUaGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2
ZSBzdGFydGVkIGF0IHRpbWUgMSBhbmQgc2hvdWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOwog
ICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0xODcsMjkgKzE1NSwzMCBAQCBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJX
aGVuQVByb3BlcnR5SXNCbG9ja2VkKQogLy8gZm9yIGJvdGggdG8gZmluaXNoKS4KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFu
aW1XYWl0aW5nKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NB
bmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVt
bXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxl
cigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAu
NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKIAogICAgIC8vIEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCi0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3Vs
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAgICAvLyBUaGUgb3Bh
Y2l0eSBhbmltYXRpb24gc2hvdWxkIGhhdmUgZmluaXNoZWQgYXQgdGltZSAxLCBidXQgdGhlIGdy
b3VwCiAgICAgLy8gb2YgYW5pbWF0aW9ucyB3aXRoIGlkIDEgZG9uJ3QgZmluaXNoIHVudGlsIHRp
bWUgMiBiZWNhdXNlIG9mIHRoZSBsZW5ndGgKICAgICAvLyBvZiB0aGUgdHJhbnNmb3JtIGFuaW1h
dGlvbi4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhl
IGZsb2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIAog
ICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0
aW1lIDIgYW5kIHNob3VsZCBiZQogICAgIC8vIGRvbmUgYnkgdGltZSAzCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIHJlc3VsdHMuZ2V0KCkp
OwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxT
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0yMTcsMjIgKzE4Niwy
MyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9n
ZXRoZXJXaXRoQW5BbmltV2FpdGluZykKIC8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9u
IHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJl
c3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNv
bnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAg
ICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1t
eS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiB9CkBAIC0yNDAsMjggKzIxMCwyOSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQogLy8gVGVzdHMgc2NoZWR1bGlu
ZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZSB0aGF0J3MgaW50ZXJydXB0aW5n
IGEgcnVubmluZyBhbmltYXRpb24uCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uKQogewor
ICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRz
OjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250
cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41Ziwg
MCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdG
b3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJv
bGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRy
YW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAu
MjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiB9CkBAIC0yNzAsMzQgKzI0MSwzNSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbQog
Ly8gYW5kIHRoZXJlIGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgbGF0
ZXIuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFu
aW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1ZXVlKQogeworICAg
IE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpj
cmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cisg
ICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41ZiwgMCkp
LCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JT
dGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxl
ci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAw
Ljc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAg
IC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHku
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIHJlc3Vs
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAu
NzVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0zMDUsNjQgKzI3Nyw2NiBAQCBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNS
dW5uaW5nQW5pbQogLy8gVGVzdCB0aGF0IGEgbG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZv
ciB0aGUgY29ycmVjdCBudW1iZXIgb2YgaXRlcmF0aW9ucy4KIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbExvb3BpbmcpCiB7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAg
ICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKDMpOwogICAg
IGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIC8vIEp1c3QgYmUgZXh0cmEgc3VyZS4KLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgcmVzdWx0cy5n
ZXQoKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKIC8vIFRlc3Qg
dGhhdCBhbiBpbmZpbml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGls
IGFib3J0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmlu
aXRlTG9vcGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKEND
QW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1
bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xs
ZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKICAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEw
NzM3NDE4MjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSwgcmVz
dWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MTA3Mzc0MTgyNC43NSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKIApAQCAtMzc1LDgwICszNDksNjYgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiAvLyBUZXN0IHRoYXQgcGF1c2luZyBh
bmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVz
dWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29u
dHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJv
bGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAu
NSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UGF1c2VkLCAwLjVmKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAg
Y29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKIAot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxMDI0LjI1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41KTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEwMjQuNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKIH0KIAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBBYm9y
dEFHcm91cGVkQW5pbWF0aW9uKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJl
c3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJD
bGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29u
dHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAw
Ljc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkp
OwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3Vs
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7
CiAgICAgRVhQRUNUX1RSVUUoIWNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKLS8vIFRlc3RzIHRoYXQg
YWRkaW5nIGFuIGFuaW1hdGlvbiB0byB0aGUgY29udHJvbGxlciBjYWxscyB0aGUgYXBwcm9wcmlh
dGUgY2FsbGJhY2sgb24gdGhlIGNvbnRyb2xsZXIgY2xpZW50Ci0vLyAoaW4gdGhpcyBjYXNlLCBh
ZGRpbmcgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGNvbnRyb2xsZXIpLgot
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBEaWRBY3RpdmF0ZSkKLXsK
LSAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKLSAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAotICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLQotICAgIEVYUEVDVF9FUShzaXplX3Qo
MCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKCkuc2l6ZSgpKTsKLQotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLQotICAg
IEVYUEVDVF9FUShzaXplX3QoMSksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKCkuc2l6ZSgpKTsK
LSAgICBFWFBFQ1RfRVEoY29udHJvbGxlci5nZXQoKSwgZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMo
KVswXSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGY1OTg5M2Rl
OTA2NDE4ZjhjYmQ3NTc0MGFlMjkzOWUyM2NjMjM1MGEuLmE4ZmE1ZWE5NjE0Y2QyMTJhYzFkMWVl
M2NmYzExNmQ2ZmUyNTg1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC01Miw2ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFk
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgeyBt
X2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVlc3RDb21taXQgPSB0cnVlOyB9CisgICAgdmly
dHVhbCB2b2lkIHB1c2hBbmltYXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFz
c093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KSB7IH0KIAogICAgIHN0YXRpYyB2b2lkIGV4cGVj
dENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCmluZGV4IDQxZmU0ZmI2NTliOTQwNTFjNjdlYWJmM2VlYTljMDg0Njc2ZWVhYjQuLmRi
MjhmMmNlM2U4OGM4YjVlNzExZDc5MGM1NmJjNDhhNDZiYTIzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjYs
NiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAKKyNpbmNsdWRl
ICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDb21wb3NpdG9yRmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKQEAgLTM0LDYgKzM1LDggQEAKICNp
bmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oIgpAQCAtNDcsMTEgKzUwLDExIEBACiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXRUZXN0czsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLW5hbWVzcGFjZSB7CituYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIFVzZWQgYnkgdGVzdCBzdHVicyB0byBub3RpZnkgdGhlIHRl
c3Qgd2hlbiBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVucy4KIGNsYXNzIFRlc3RIb29rcyB7
CkBAIC01OSw5ICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZs
b2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVC
ZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KIH07CiAKIC8vIEFkYXB0cyBDQ0xheWVyVHJl
ZUhvc3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9v
a3MuCkBAIC05MCw2ICs5NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdGVzdEhvb2tzLT5kcmF3
TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQorICAgIHsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZVNl
Y3MpOworICAgICAgICBtX3Rlc3RIb29rcy0+YW5pbWF0ZUxheWVycyh0aGlzKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgTW9ja0xheWVyVHJlZUhvc3RJbXBsKFRlc3RIb29rcyogdGVzdEhvb2tz
LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCog
Y2xpZW50KQogICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGwoc2V0dGluZ3MsIGNsaWVudCkK
QEAgLTEzMSw2ICsxNDMsMjIgQEAgcHJpdmF0ZToKICAgICBUZXN0SG9va3MqIG1fdGVzdEhvb2tz
OwogfTsKIAorLy8gQWRhcHRzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIGZvciB0ZXN0Lgor
Y2xhc3MgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgfQorCitwcml2YXRl
OgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQorICAgIHsKKyAgICAgICAgYWN0aXZl
QW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMS4wZiwgMC4wZikpLCAwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiBjbGFz
cyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6
IHB1YmxpYyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0
aFRleHR1cmVUcmFja2luZz4gY3JlYXRlKEF0dHJpYnV0ZXMgYXR0cnMpCkBAIC0yMjUsNyArMjUz
LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkKKyAg
ICB7CisgICAgICAgIG1fdGVzdEhvb2tzLT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBNb2NrTGF5ZXJUcmVlSG9zdENsaWVudChUZXN0SG9va3Mq
IHRlc3RIb29rcykgOiBtX3Rlc3RIb29rcyh0ZXN0SG9va3MpIHsgfQpAQCAtMjU1LDYgKzI4Niwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVz
dDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGUsIHRoaXMpOwogICAgIH0KIAorICAgIHZvaWQgcG9z
dEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpCisgICAgeworICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uLCB0aGlzKTsKKyAg
ICB9CisKICAgICB2b2lkIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFpblRocmVhZCgpCiAgICAgewog
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0
TmVlZHNDb21taXQsIHRoaXMpOwpAQCAtMjcwLDcgKzMwNiw2IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQW5p
bWF0ZUFuZENvbW1pdCwgdGhpcyk7CiAgICAgfQogCi0KICAgICB2b2lkIHBvc3RTZXRWaXNpYmxl
VG9NYWluVGhyZWFkKGJvb2wgdmlzaWJsZSkKICAgICB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQodmlzaWJsZSA/IENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0VmlzaWJsZSA6IEND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0SW52aXNpYmxlLCB0aGlzKTsKQEAgLTMxMyw2
ICszNDgsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+
c2V0TmVlZHNBbmltYXRlKCk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBZGRB
bmltYXRpb24odm9pZCogc2VsZikKKyAgICB7CisgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJU
cmVlSG9zdFRlc3QqPihzZWxmKTsKKyAgICAgIEFTU0VSVCh0ZXN0KTsKKyAgICAgIGlmICh0ZXN0
LT5tX2xheWVyVHJlZUhvc3QgJiYgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSkK
KyAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRBbmltYXRp
b24oS2V5ZnJhbWVWYWx1ZUxpc3QoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpLCBJbnRTaXplKCks
IDAsICIiLCAwLjApOworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNB
bmltYXRlQW5kQ29tbWl0KHZvaWQqIHNlbGYpCiAgICAgewogICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKQEAgLTQ2Myw2ICs1MDcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRv
QmVnaW5UZXN0KCkKICAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlKHRoaXMsIG1fY2xpZW50LmdldCgpLCByb290TGF5ZXIsIG1fc2V0dGluZ3MpOwogICAgIEFT
U0VSVF9UUlVFKG1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgcm9vdExheWVyLT5zZXRMYXllclRyZWVI
b3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgcm9vdExheWVyLT5zZXRBbmltYXRpb25D
b250cm9sbGVyKE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKIAogICAg
IG1fYmVnaW5uaW5nID0gdHJ1ZTsKICAgICBiZWdpblRlc3QoKTsKQEAgLTc4OSw2ICs4MzQsNDkg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0FuaW1hdGVJbnNpZGVBbmltYXRp
b25DYWxsYmFjaywgcnVuTXVsdGlUaHJlYWQKICAgICBydW5UZXN0VGhyZWFkZWQoKTsKIH0KIAor
Ly8gQWRkIGEgbGF5ZXIgYW5pbWF0aW9uIGFuZCBjb25maXJtIHRoYXQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6YW5pbWF0ZUxheWVycyBkb2VzIGdldAorLy8gY2FsbGVkIGFuZCBjb250aW51ZXMgdG8g
Z2V0IGNhbGxlZC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24gOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3RBZGRBbmltYXRpb24oKQorICAgICAgICA6IG1fbnVtQW5pbWF0ZXMoMCkKKyAg
ICAgICAgLCBtX2xheWVyVHJlZUhvc3RJbXBsKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFp
blRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5
ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X251bUFuaW1hdGVzKSB7CisgICAgICAgICAgICBtX251bUFuaW1hdGVzKys7CisgICAgICAgICAg
ICBsYXllclRyZWVIb3N0SW1wbC0+YW5pbWF0ZSgwLjUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICAvLyBHZXRzIGFuaW1h
dGlvbiBydW5uaW5nIGluIHRoZSBtdWx0aS10aHJlYWRlZCBjYXNlLCBidXQgZG9lcyBub3QgZ2V0
IGNhbGxlZCBpbiB0aGUKKyAgICAvLyBzaW5nbGUtdGhyZWFkZWQgY2FzZS4KKyAgICB2aXJ0dWFs
IHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVy
VHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAgIGxheWVyVHJlZUhvc3RJbXBsLT5hbmltYXRl
KDAuMCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAg
IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1BbmltYXRlczsKKyAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsKiBtX2xheWVyVHJlZUhvc3RJbXBsOworfTsKKworU0lOR0xFX0FORF9NVUxUSV9USFJF
QURfVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOworCiBjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RU
aHJlYWRPbmx5IHsKIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9u
aXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25p
emVyVGVzdC5jcHAKaW5kZXggMTU1N2E3ZDkzMjJjYzZiZTIwNmJmNTBiMDBjMGY0NzA2M2M1NDc4
Yi4uODgzOGJlOTY3MTE5ZGI1YmUyN2Y1ZThlZGYxNGJjNTE5NWFmNjE1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAK
QEAgLTI2LDEzICsyNiwzMSBAQAogCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogCisj
aW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25SZXN1bHRzLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHku
aCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0VGVzdHM7Cit1c2luZyB0ZXN0aW5nOjpUZXN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRyZWVTeW5jaHJvbml6ZXJUZXN0IDogcHVibGljIFRlc3QgeworcHVibGljOgorICAg
IHN0YXRpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogZ2V0QW5pbWF0aW9uQ29udHJvbGxl
cihMYXllckNocm9taXVtKiBsYXllcikKKyAgICB7CisgICAgICAgIHJldHVybiBsYXllci0+YW5p
bWF0aW9uQ29udHJvbGxlcigpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogbmFtZXNwYWNlIHsKIApAQCAtMTE2LDcgKzEzNCw3IEBAIHZvaWQgZXhwZWN0VHJlZXNBcmVJ
ZGVudGljYWwoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5ZXJJbXBsKiBjY0xheWVyKQogfQog
CiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSBhbmQgc3luY2hyb25pemVzIGl0IHdp
dGhvdXQgdHJ5aW5nIHRvIHJldXNlIGFueSBwcmVleGlzdGluZyBsYXllcnMuCi1URVNUKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkKK1RFU1RfRihUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCiB7CiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJl
ZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTEyOSw3ICsxNDcsNyBAQCBURVNU
KFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkKIH0KIAogLy8g
Q29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCBhdHRlbXB0
aW5nIHRvIHJldXNlIHNvbWUgbGF5ZXJzCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5j
U2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5
bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVycykKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwpAQCAtMTU1
LDcgKzE3Myw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1
c2luZ0xheWVycykKICAgICBFWFBFQ1RfRVEoc2Vjb25kQ0NMYXllcklkLCBjY0xheWVyRGVzdHJ1
Y3Rpb25MaXN0WzBdKTsKIH0KIAotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBs
ZVRyZWVBbmRQcm9wZXJ0aWVzKQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2lt
cGxlVHJlZUFuZFByb3BlcnRpZXMpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKQEAgLTE4Nyw3ICsyMDUsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJU
ZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCiAgICAgRVhQRUNUX0VRKHNlY29uZENo
aWxkQm91bmRzLmhlaWdodCgpLCBzZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMuaGVpZ2h0KCkpOwog
fQogCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1
cmFsQ2hhbmdlKQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0
ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0yMzQsNyArMjUy
LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0
dXJhbENoYW5nZSkKIH0KIAogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUsIHN5bmNo
cm9uaXplcyBpdCwgdGhlbiBzeW5jaHJvbml6ZXMgdG8gYSB0b3RhbGx5IG5ldyB0cmVlLiBBbGwg
bGF5ZXJzIGZyb20gdGhlIG9sZCB0cmVlIHNob3VsZCBiZSBkZWxldGVkLgotVEVTVChUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKK1RFU1RfRihUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKIHsKICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rp
b25MaXN0OwpAQCAtMjY1LDcgKzI4Myw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5
bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kpCiB9CiAKIC8vIENvbnN0cnVjdHMrc3luY3MgYSB0cmVl
IHdpdGggbWFzaywgcmVwbGljYSwgYW5kIHJlcGxpY2EgbWFzayBsYXllcnMuCi1URVNUKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykKK1RF
U1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGljYU1hc2tM
YXllcnMpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
QEAgLTMwNyw1ICszMjUsODUgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tS
ZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIH0KIAorVEVTVF9G
KFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQoreworICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRy
ZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdpdGggbm8g
YW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7
CisKKyAgICAvLyBBZGQgYW5pbWF0aW9uIHRvIG1haW4gdGhyZWFkIGNvbnRyb2xsZXIuCisgICAg
Z2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0
aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVz
KGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZl
QW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VR
KENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVy
VHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1RfRihUcmVl
U3luY2hyb25pemVyVGVzdCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMpCit7CisgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVy
VHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxh
eWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NM
YXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
LT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFB1c2ggYW4gYW5pbWF0aW9uIHByb3BlcnR5IGNoYW5n
ZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBub3QgY2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJl
IGFkZGVkKS4KKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkp
LT5hY3RpdmVBbmltYXRpb25zKClbMF0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQ
YXVzZWQsIDApOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsK
KworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY2NMYXllclRyZWVSb290LT5h
bmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQorCitURVNUX0YoVHJlZVN5bmNocm9uaXpl
clRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4K
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZ2V0QW5p
bWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygp
LmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRB
bmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
Y0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICAvLyBBYm9ydCBhbiBh
bmltYXRpb24gZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxl
cihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmNsZWFyKCk7CisgICAg
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNjTGF5ZXJUcmVlUm9v
dC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKK30KKworVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBz
eW5jQ29tcGxldGVkQW5pbWF0aW9uKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZ2V0QW5pbWF0aW9u
Q29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVu
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRp
b25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJU
cmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVu
U3RhdGUoKSk7CisKKyAgICAvLyBTdGVwIHRocm91Z2ggdGhlIGFuaW1hdGlvbiB1bnRpbCBpdCBp
cyBmaW5pc2hlZC4gQXQgdGhlIG5leHQgc3luYywgdGhlIG1haW4gdGhyZWFkJ3MgYW5pbWF0aW9u
IHNob3VsZCBiZSBjbGVhcmVkLgorICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3Vs
dHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CisgICAgY2NMYXllclRyZWVSb290LT5h
bmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CisgICAgY2NM
YXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUoMiwgcmVzdWx0cy5n
ZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250
cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIEVYUEVDVF9FUShzaXplX3QoMSksIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5
ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkpOworCisgICAgVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xh
eWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZ2V0QW5pbWF0
aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNp
emUoKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125431</attachid>
            <date>2012-02-03 15:12:54 -0800</date>
            <delta_ts>2012-02-03 15:21:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120203181252.patch</filename>
            <type>text/plain</type>
            <size>114560</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJjMWY2NWI1MTQ3NWMy
Y2Y0ZWMwOTgwODUyMWFkNTM3NTBkNjRmZi4uZDY0MzA5NzA1ZThkZTZlNDkxN2NjZDNkZmYyZTJl
OGNlNzE3MDQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0wMyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtQ2hyb21pdW1MYXllckFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRD
b250ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhh
c1J1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBs
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRp
b25TaWduYXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDQW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHQ6OkNDQW5pbWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5p
bWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvblJlc3VsdHM6On5DQ0FuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHRzOjpzdGFydGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OkNDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEy
LTAyLTAxICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
Q29udGVudCBlbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3Jl
bW92ZWQvcmVwbGFjZWQgaW4gYSBzaGFkb3cgdHJlZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggYzk3ZTRjM2I4YjRhNTE3NzgzOWJiY2Y3YTFmNWI2YjUyODNlMDcwMC4uZTBiZDUxYjhh
NTU0YjE2YTYyMzI0Y2VhODI4OTg2NGVmMDk5YjI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMi0wMi0wMyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBsdW1iIGZyb20gR3JhcGhpY3NMYXll
ciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoRmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjp+
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChG
YWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFu
c2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNvbnRyb2xsZXJDbGllbnQ6OmlkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJv
bGxlckNsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OnB1c2hBbmlt
YXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAgICAqIHRlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJl
ZVN5bmNocm9uaXplclRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplclRl
c3Q6OmdldEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTAyLTAxICBLZW50IFRhbXVyYSAg
PHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIERpc2FibGUgV2ViRnJh
bWVUZXN0LkZpbmRJblBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDFjODdmNjlkY2E4MWNjMGVj
NDA0ZTFmYzhhMDY0YTg1MjNkMzgzLi42OTU5NjZhYmVjZTI0YjI1MWE2MjRiYjhmNTExZGYxYmIx
YTlkMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjI0LDYgKzMyMjQsNyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLApA
QCAtMzI0MSw2ICszMjQyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3ZTUxZTI0YWVlZDMyYWZlOTcwZS4uOGNhYmYzZWJj
NjdkZDc0ODM2ZmJlNTJkMTI0NzFhMzkyNzE0MWNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVu
KQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNo
aWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0g
ICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAg
ICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIApAQCAtMzY5LDYgKzM2OSwzNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXllci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFt
ZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJl
bW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1
c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGxhdGZvcm1DaHJvbWl1bUxheWVyQW5p
bWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgbV9jbGllbnQtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgc3RhcnRUaW1lKTsK
K30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwpA
QCAtMzgzLDEyICs0MTQsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAobV9jb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVl
OwotICAKKwogICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJl
bW92ZWQgdmlhIHVwZGF0ZUNoaWxkTGlzdC4KICAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9
IDA7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAg
ICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CkBAIC01MzcsNyArNTY4LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICBtX2xh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9y
bShpZGVudGl0eSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNldCB0aGUgb2xkIGxheWVyIHRv
IG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRo
ZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIG1fbGF5ZXItPnNldE9wYWNpdHkoMSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggMzliMzY3YjlkM2YwZTJmODNhMzIw
ZjkwMmI1NDA2MmZiOTMxZTg2Ni4uZDE5MDFlZmEyYTc4MjFiNmFlYjE4NDNiMjNiZjY4ZmRhYTZk
NDNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTkyLDYgKzkyLDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3Jt
TGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxh
eWVyKik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBwbGF0Zm9ybUNo
cm9taXVtTGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpOworCiAgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggYjJmNzAxNDFiNDdhNWQ0N2I0NDAyOTM4MGQzOGNiM2RjM2M1YjMyOC4u
NWNjMGRmNzkwZmJlMDliMTVjMGZmYTUyYWJjZWRlNjgxNTQ5YTMwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTksNiArNjAsNyBA
QCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICA6IG1fbmVlZHNEaXNwbGF5KGZh
bHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDAp
CisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQb2lu
dCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05Niw2
ICs5OCwzOCBAQCB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewogfQog
Citib29sIExheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sK
KyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9hbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmlt
YXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZz
ZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsK
KyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNl
dCkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlv
bk5hbWUsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkK
K3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25O
YW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1
c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxl
ci0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwor
dm9pZCBMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKK3sKKyAgICBtX2FuaW1hdGlv
bkNvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwor
fQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBp
c05vbkNvbXBvc2l0ZWRDb250ZW50KQogewogICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9
IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQ7CkBAIC01MTQsNiArNTQ4LDExIEBAIGJvb2wgTGF5ZXJD
aHJvbWl1bTo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit2b2lkIExheWVyQ2hyb21pdW06OnNldEFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlcikKK3sKKyAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXIgPSBhbmltYXRpb25Db250cm9sbGVyOworfQorCiB2b2lkIHNv
cnRMYXllcnMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3Vy
cmVudGx5IHdlIGRvbid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0
aGVyZSdzIG5vIG5lZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCA3NjRmNzMwMTU1YjU0NTM3Y2RhNGM3MzgxYjNmZDNiY2I3OTYwNjRkLi44
OWI2MjY1ZDBmMTNkZGU1ZGRmYzkzZTU0NDgxZTZiZDIzMzBjMzA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC01MSw2ICs1MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5
ZXJUcmVlSG9zdDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CkBAIC02MCw3ICs2MSw2IEBAIGNs
YXNzIFJlZ2lvbjsKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFs
IGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBMYXll
ckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewotICAgIGZyaWVu
ZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKCk7CiAKQEAgLTIxMSw3ICsyMTEsMjAgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRl
eHR1cmVzKSB7IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVz
OyB9CiAgICAgYm9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Fs
d2F5c1Jlc2VydmVUZXh0dXJlczsgfQogCisgICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24q
LCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2
b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSk7CisKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAg
ICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKwogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFz
cyBDQ0xheWVySW1wbDsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdDsKKyAg
ICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVl
U3luY2hyb25pemVyOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdDsKKwog
ICAgIExheWVyQ2hyb21pdW0oKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVw
IHJlc291cmNlcyBiZWluZyBoZWxkIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKQEAgLTIzNCw4ICsy
NDcsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5
ZXI7CiAKLSAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xh
c3MgQ0NMYXllckltcGw7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBj
b3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGlu
dCBtX2xheWVySWQ7CkBAIC0yNDQsMTAgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQ
YXJlbnQoTGF5ZXJDaHJvbWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1
bSopIGNvbnN0OwogCi0gICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVy
bnMgdGhlIGluZGV4IG9mIHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGlu
ZGV4T2ZDaGlsZChjb25zdCBMYXllckNocm9taXVtKik7CkBAIC0yNTUsMTEgKzI2MywxNiBAQCBw
cml2YXRlOgogICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJv
bVBhcmVudC4KICAgICB2b2lkIHJlbW92ZUNoaWxkKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1cm4g
bV9hbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb25Db250
cm9sbGVyKFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+KTsKKwogICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2NoaWxkcmVuOwogICAgIExheWVyQ2hyb21p
dW0qIG1fcGFyZW50OwogCiAgICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVI
b3N0OwogCisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlv
bkNvbnRyb2xsZXI7CisKICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwCmluZGV4IGQwZmQwY2U1MjNkNjM4ODRiZTkzMmUxYmQ0MTY1ODJmMjU3NjJlNDAu
LmRlMWNmOGE2OTRiYTFiM2ZmMWNhZjE3ODQ2ZmRiMWRlNTYyMTg0NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVHJlZVN5bmNocm9u
aXplci5oIgogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTc0LDYgKzc1LDggQEAgUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0KICAgICBlbHNlCiAgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIo
MCk7CiAKKyAgICBsYXllci0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5zeW5jaHJvbml6ZUFuaW1h
dGlvbnMoY2NMYXllckltcGwtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisKICAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhjY0xheWVySW1wbC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJ
bXBsLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcAppbmRl
eCAyMWU2Y2M3YTllMjQ2ZWMwYmVmYWFhMDU4NGY2ZDIyMWM0NDYyMGVhLi4wMDA5Y2M4ODk4M2Ew
NjU5YjM4YTY5M2E5NjljYTRjMDc3NjY1N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uY3BwCkBAIC00NCw2ICs0NCw4IEBAIENDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBHcm91cElECiB7CiB9
CiAKK0NDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24oKSB7IH0KKwogdm9pZCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6c2V0UnVuU3RhdGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSBu
b3cpCiB7CiAgICAgaWYgKHJ1blN0YXRlID09IFJ1bm5pbmcgJiYgbV9ydW5TdGF0ZSA9PSBQYXVz
ZWQpCkBAIC02Myw2ICs2NSwyMSBAQCBib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc0ZpbmlzaGVk
QXQoZG91YmxlIHRpbWUpIGNvbnN0CiAgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0
aW9uQ3VydmUtPmR1cmF0aW9uKCkgPD0gdGltZSAtIHN0YXJ0VGltZSgpIC0gbV90b3RhbFBhdXNl
ZFRpbWU7CiB9CiAKK2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzV2FpdGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gV2FpdGluZ0Zvck5leHRUaWNrCisgICAgICAgIHx8
IG1fcnVuU3RhdGUgPT0gV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eQorICAgICAgICB8fCBt
X3J1blN0YXRlID09IFdhaXRpbmdGb3JTdGFydFRpbWU7Cit9CisKK2Jvb2wgQ0NBY3RpdmVBbmlt
YXRpb246OmlzUnVubmluZ09ySGFzUnVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0
ZSA9PSBSdW5uaW5nCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gRmluaXNoZWQKKyAgICAgICAg
fHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gUGF1c2Vk
OworfQorCiBkb3VibGUgQ0NBY3RpdmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0
aW9uKGRvdWJsZSBub3cpIGNvbnN0CiB7CiAgICAgZG91YmxlIHRyaW1tZWQgPSBub3c7CkBAIC05
NSw0ICsxMTIsMzYgQEAgZG91YmxlIENDQWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVu
dEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdAogICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1f
YW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkpOwogfQogCitQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3QKK3sK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0Fj
dGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1cnZlLT5jbG9uZSgpLCBtX2dyb3VwLCBtX3Rhcmdl
dFByb3BlcnR5KSkpOworICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKKyAg
ICB0b1JldHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIHRvUmV0dXJuLT5t
X3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAgIHRvUmV0dXJuLT5tX3BhdXNlVGltZSA9IG1f
cGF1c2VUaW1lOworICAgIHRvUmV0dXJuLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVz
ZWRUaW1lOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NBY3Rp
dmVBbmltYXRpb246OnN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiogb3Ro
ZXIpCit7CisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBpbXBsIHRocmVhZCB0byBpbml0
aWF0ZSBhIHJ1biBzdGF0ZSBjaGFuZ2UuCisgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGFu
aW1hdGlvbiB3YXMgd2FpdGluZyBmb3IgYSBmdXR1cmUgZXZlbnQgdG8gdGFrZQorICAgIC8vIHBs
YWNlLCBhbmQgdGhlIGV2ZW50IGhhcyB0YWtlbiBwbGFjZS4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50
ICd0aGlzJyB0bworICAgIC8vIGFzc3VtZSB0aGUgaW1wbCB0aHJlYWQncyBydW4gc3RhdGUgYW5k
IHN0YXJ0IHRpbWUuCisgICAgaWYgKGlzV2FpdGluZygpICYmIG90aGVyLT5pc1J1bm5pbmdPckhh
c1J1bigpKSB7CisgICAgICAgIG1fcnVuU3RhdGUgPSBvdGhlci0+bV9ydW5TdGF0ZTsKKyAgICAg
ICAgbV9zdGFydFRpbWUgPSBvdGhlci0+bV9zdGFydFRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgb3RoZXItPm1fcnVuU3RhdGUgPSBtX3J1blN0YXRlOworICAgICAgICBvdGhlci0+bV9zdGFy
dFRpbWUgPSBtX3N0YXJ0VGltZTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2UgaW4gc3RhdGUgcmVs
YXRlZCB0byBpdGVyYXRpb25zIGFuZCBwYXVzZSBpcyBhbHdheXMgaW5pdGlhdGVkIGZyb20KKyAg
ICAvLyB0aGUgbWFpbiB0aHJlYWQsIHNvIGl0IGlzIHNhZmUgdG8gcHVzaCBwcm9wZXJ0aWVzIGlu
IHRoYXQgZGlyZWN0aW9uLgorICAgIG90aGVyLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlvbnM7
CisgICAgb3RoZXItPm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgb3RoZXItPm1fdG90
YWxQYXVzZWRUaW1lID0gbV90b3RhbFBhdXNlZFRpbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2Vk
MTJkNjU4ZDc2ZDYwNGVlZTlmYmFkMGEzZDEuLjY5NDQ4ZTUzYjI5NWVlYjQ4ZDgxMDMyYTM0OTgz
YjZmMDdlODQwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMjUsMjQg
KzI1LDI3IEBACiAjaWZuZGVmIENDQWN0aXZlQW5pbWF0aW9uX2gKICNkZWZpbmUgQ0NBY3RpdmVB
bmltYXRpb25faAogCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIENDQW5pbWF0aW9uQ3VydmU7Ci0KIC8vIEEgQ0NBY3RpdmVBbmlt
YXRpb24sIGNvbnRhaW5zIGFsbCB0aGUgc3RhdGUgcmVxdWlyZWQgdG8gcGxheSBhIENDQW5pbWF0
aW9uQ3VydmUuCiAvLyBTcGVjaWZpY2FsbHksIHRoZSBhZmZlY3RlZCBwcm9wZXJ0eSwgdGhlIHJ1
biBzdGF0ZSAocGF1c2VkLCBmaW5pc2hlZCwgZXRjLiksCiAvLyBsb29wIGNvdW50LCBsYXN0IHBh
dXNlIHRpbWUsIGFuZCB0aGUgdG90YWwgdGltZSBzcGVudCBwYXVzZWQuCiBjbGFzcyBDQ0FjdGl2
ZUFuaW1hdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NBY3RpdmVBbmltYXRpb24p
OwogcHVibGljOgogICAgIC8vIEFuaW1hdGlvbnMgdGhhdCBtdXN0IGJlIHJ1biB0b2dldGhlciBh
cmUgY2FsbGVkICdncm91cGVkJyBhbmQgaGF2ZSB0aGUgc2FtZSBHcm91cElECiAgICAgLy8gR3Jv
dXBlZCBhbmltYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUg
YW5kIG5vIG90aGVyIGFuaW1hdGlvbnMKICAgICAvLyBtYXkgYW5pbWF0ZSBhbnkgb2YgdGhlIGdy
b3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMgdW50aWwgYWxsIGFuaW1hdGlvbnMgaW4gdGhlCiAgICAg
Ly8gZ3JvdXAgaGF2ZSBmaW5pc2hlZCBhbmltYXRpbmcuIE5vdGU6IGFuIGFjdGl2ZSBhbmltYXRp
b24ncyBncm91cCBpZCBhbmQgdGFyZ2V0CiAgICAgLy8gcHJvcGVydHkgdW5pcXVlbHkgaWRlbnRp
ZnkgdGhhdCBhbmltYXRpb24uCi0gICAgdHlwZWRlZiBpbnQgR3JvdXBJRDsKKyAgICB0eXBlZGVm
IHNpemVfdCBHcm91cElEOwogCiAgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhl
ICd3YWl0aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawog
ICAgIC8vIHdpbGwgc3RhcnQgdGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4g
QW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKQEAgLTY4LDEyICs3MSwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIE9wYWNpdHkKICAgICB9OwogCisgICAgc3RydWN0IEFuaW1hdGlvblNpZ25hdHVy
ZSB7CisgICAgICAgIEFuaW1hdGlvblNpZ25hdHVyZShHcm91cElEIGdyb3VwSUQsIFRhcmdldFBy
b3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgOiBncm91cElEKGdyb3VwSUQpCisg
ICAgICAgICAgICAsIHRhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KSB7IH0KKyAgICAgICAg
R3JvdXBJRCBncm91cElEOworICAgICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eTsK
KyAgICB9OworCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0
ZShQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBHcm91cElEIGdyb3VwLCBUYXJn
ZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIGdyb3VwLCB0YXJnZXRQcm9wZXJ0eSkpOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVh
bCB+Q0NBY3RpdmVBbmltYXRpb24oKTsKIAogICAgIEdyb3VwSUQgZ3JvdXAoKSBjb25zdCB7IHJl
dHVybiBtX2dyb3VwOyB9CiAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkoKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldFByb3BlcnR5OyB9CkBAIC05Myw2ICsxMDQsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OwogICAgIGJvb2wgaXNG
aW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5T
dGF0ZSA9PSBBYm9ydGVkOyB9CiAKKyAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OworICAgIGJv
b2wgaXNSdW5uaW5nT3JIYXNSdW4oKSBjb25zdDsKKwogICAgIENDQW5pbWF0aW9uQ3VydmUqIGFu
aW1hdGlvbkN1cnZlKCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogICAgIGNv
bnN0IENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogCkBAIC0xMDAsNiArMTE0LDEyIEBAIHB1YmxpYzoKICAg
ICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJy
ZW50IGl0ZXJhdGlvbi4KICAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91
YmxlIG5vdykgY29uc3Q7CiAKKyAgICBBbmltYXRpb25TaWduYXR1cmUgc2lnbmF0dXJlKCkgY29u
c3QgeyByZXR1cm4gQW5pbWF0aW9uU2lnbmF0dXJlKG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkp
OyB9CisKKyAgICBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjbG9uZUZvckltcGxUaHJl
YWQoKSBjb25zdDsKKworICAgIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0aXZlQW5p
bWF0aW9uKik7CisKIHByaXZhdGU6CiAgICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkN1cnZlLmgKaW5kZXggZGU5N2UzOGMwYTI0ZTc3NzhiOGQ5NmRjOTBmZWY2ZWM5
OTM5YmFlMy4uNTMzYWJhZmVmNDU0N2Q1NDkzYmE1OTcxMWJlMTU1MTY2N2VlMjRmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaApAQCAtMjUsNiArMjUsMTAgQEAKICNpZm5kZWYgQ0NB
bmltYXRpb25DdXJ2ZV9oCiAjZGVmaW5lIENDQW5pbWF0aW9uQ3VydmVfaAogCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOwpAQCAt
NDEsNiArNDUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCA9IDA7CiAKICAgICBj
b25zdCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIHRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpIGNvbnN0
OwogICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRvVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUoKSBjb25zdDsKQEAgLTYwLDcgKzY1LDcgQEAgY2xhc3MgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0FuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5DQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKLSAgICB2aXJ0dWFsIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUoZG91YmxlIHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0LCBjb25zdCBJbnRTaXplJiBs
YXllclNpemUpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBhcnRpYWwgQ0NBbmltYXRpb24gaW1wbGVt
ZW50YXRpb24uCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBUcmFuc2Zv
cm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJlODY5
MDM0OTYwOGIzOWI1MGQxYjIyMTRjMDJjYmVkMjcwYTFlMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uUmVz
dWx0cy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRp
b25SZXN1bHRzX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25SZXN1bHRzX2gKKworI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gVXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIGFuaW1hdGlvbiBldmVudCBoYXMgdGFr
ZW4gcGxhY2Ugb24gdGhlIGdpdmVuIGxheWVyIGF0IHRoZSBnaXZlbiB0aW1lLgorc3RydWN0IEND
QW5pbWF0aW9uUmVzdWx0IHsKKyAgICBDQ0FuaW1hdGlvblJlc3VsdChpbnQgbGF5ZXJJRCwgZG91
YmxlIHRpbWUpCisgICAgICAgIDogbGF5ZXJJRChsYXllcklEKQorICAgICAgICAsIHRpbWUodGlt
ZSkgeyB9CisgICAgaW50IGxheWVySUQ7CisgICAgZG91YmxlIHRpbWU7Cit9OworCisvLyBUaGlz
IGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgYmFjayB0byBtYWluIGFuaW1hdGlvbiBlbmdpbmUgdGhh
dCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGhhdmUgc3RhcnRlZC4KK2NsYXNzIENDQW5pbWF0aW9u
UmVzdWx0cyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1
bHRzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvblJlc3VsdHMpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uUmVzdWx0cygp
IHsgfQorCisgICAgVmVjdG9yPENDQW5pbWF0aW9uUmVzdWx0PiYgc3RhcnRlZEFuaW1hdGlvbnMo
KSB7IHJldHVybiBtX3N0YXJ0ZWRBbmltYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAgQ0NBbmlt
YXRpb25SZXN1bHRzKCkgeyB9CisKKyAgICBWZWN0b3I8Q0NBbmltYXRpb25SZXN1bHQ+IG1fc3Rh
cnRlZEFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBDQ0FuaW1hdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYTU1MDM4N2UxNjc1OGVmMjE4NGU0ZTIy
N2E1ODBjODIyNjAyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlzdAorI2luY2x1ZGUgImNjL0NDQWN0
aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworfQorCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCit7Cit9CisKKy8vIEVuc3VyZXMg
dGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5k
IHRoZSBpbXBsIHRocmVhZAorLy8gYXJlIGtlcHQgaW4gc3luYy4KK3ZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIHJlbW92ZUFuaW1hdGlvbnNDb21w
bGV0ZWRPbkltcGxUaHJlYWQoY29udHJvbGxlckltcGwpOworICAgIHB1c2hOZXdBbmltYXRpb25z
VG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICByZW1vdmVBbmltYXRpb25zQ29tcGxl
dGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBwdXNoQW5pbWF0aW9uUHJvcGVy
dGllcyhjb250cm9sbGVySW1wbCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBBbnkgYW5pbWF0aW9u
cyBmaW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQncyBjb2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxl
ckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmUo
Y29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSUQsIGNvbnRyb2xs
ZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7CisgICAgY29u
dHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7CisgICAgLy8g
QW55IG5ldyBhbmltYXRpb25zIG93bmVkIGJ5IHRoZSBtYWluIHRocmVhZCdzIGNvbnRyb2xsZXIg
YXJlIGNsb25lZCBhbmQgYWRkZSB0byB0aGUgaW1wbCB0aHJlYWQncyBjb250cm9sbGVyLgorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICghY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbihtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJv
cGVydHkoKSkpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVh
ZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAg
IC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMg
bm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVy
YXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50
ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dh
cmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9s
bGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgQ0NBY3RpdmVB
bmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRpb24oY29udHJvbGxlckltcGwtPm1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIGlmICghY3VycmVudCkKKyAg
ICAgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0ZSBhbGwg
aW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGlu
ZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xs
ZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNy
ZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWlu
YXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBj
dXJyZW50SW1wbCA9IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7
CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0aW9u
KGN1cnJlbnRJbXBsLT5ncm91cCgpLCBjdXJyZW50SW1wbC0+dGFyZ2V0UHJvcGVydHkoKSk7Cisg
ICAgICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAg
ICBjdXJyZW50LT5zeW5jaHJvbml6ZVByb3BlcnRpZXMoY3VycmVudEltcGwpOworICAgIH0KK30K
KworQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3Rp
dmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAg
ICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOworfQor
Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoQ0NBY3RpdmVBbmltYXRp
b246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSA9PSB0YXJnZXRQcm9wZXJ0eSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJl
bW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNhOTYwN2U5ODE0NmE2YmQ2NTUwM2U3NGYxMDRlYTM4
MGM0MTg3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9o
CisjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uOwor
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOworc3RydWN0IEludFNpemU7Citj
bGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIFRoZXNlIGFyZSB2aXJ0dWFsIGZvciB0
ZXN0aW5nLgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKworICAgIC8v
IEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0
aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAorICAgIC8vIGFyZSBrZXB0IGluIHN5bmMuIFRoaXMg
ZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGltcGwgdGhyZWFkIGNvbnRy
b2xsZXIuCisgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKik7CisKKyAgICAvLyBUaGlzIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u
bHkuCisgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiYgYWN0aXZlQW5pbWF0
aW9ucygpIHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJl
bW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKik7CisgICAgdm9pZCBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnND
b21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Cisg
ICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwqKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eSk7CisgICAgdm9pZCByZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisKKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCmluZGV4
IGJiY2E5Y2JkOTA1NWUxZWMxM2NjMGE5NzQ2MzljNWY5NzA4ODA5OTIuLjUxYTg0ZDQ2NDM2Nzhm
Y2IxYTU3ODA4ZGY4MjlmYTk2ZmRlYWViZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtMjYsNyArMjYsOSBAQAogCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00NCwyMiArNDYsMjIgQEAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkMKIHsKIH0K
IAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91YmxlIGZy
YW1lQmVnaW5UaW1lU2VjcykKK0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpIHsgfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1h
dGlvblJlc3VsdHMqIHJlc3VsdHMpCiB7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5l
eHRUaWNrKGZyYW1lQmVnaW5UaW1lU2Vjcyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZShmcmFtZUJlZ2luVGltZVNlY3MpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzKTsK
KyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vj
cywgcmVzdWx0cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOwogICAgIHJlc29sdmVDb25mbGljdHMo
ZnJhbWVCZWdpblRpbWVTZWNzKTsKICAgICB0aWNrQW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZVNl
Y3MpOwogICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7Ci0gICAgc3RhcnRBbmltYXRpb25z
V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHN0
YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVT
ZWNzLCByZXN1bHRzKTsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQogewogICAgIG1fYWN0aXZl
QW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+YW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZSh0aGlzKTsKIH0KIAogQ0NB
Y3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZl
QW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCkBAIC04MCwyNSArODIsMjggQEAgYm9vbCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
ck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVzdWx0cyogcmVzdWx0cykKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5v
dyk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cp
OworICAgICAgICAgICAgcmVzdWx0cy0+c3RhcnRlZEFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBbmlt
YXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5vdykpOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdywg
Q0NBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdG
b3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBub3cp
CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5zdGFydFRpbWUoKSA8PSBub3cpIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CisgICAgICAg
ICAgICByZXN1bHRzLT5zdGFydGVkQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3Vs
dChtX2NsaWVudC0+aWQoKSwgbm93KSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3Vi
bGUgbm93LCBDQ0FuaW1hdGlvblJlc3VsdHMqIHJlc3VsdHMpCiB7CiAgICAgLy8gRmlyc3QgY29s
bGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCiAgICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJv
cGVydGllczsKQEAgLTEzNCw2ICsxMzksNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eQogICAg
ICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1f
YWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVu
bmluZywgbm93KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tq
XS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLT5z
dGFydGVkQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3VsdChtX2NsaWVudC0+aWQo
KSwgbm93KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0xNzgsOSArMTg0LDEwIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRB
cmVGaW5pc2hlZCkKKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKSB7
CisgICAgICAgICAgICBtX2ZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zaWduYXR1cmUoKSk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVt
b3ZlKGkpOwotICAgICAgICBlbHNlCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaSsrOwog
ICAgIH0KIH0KQEAgLTE5NCwxNCArMjAxLDExIEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUgbm93KQogCiAgICAgICAgICAgICBjYXNl
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBD
Q1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+YW5pbWF0aW9uQ3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9ucyA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSB0cmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwgbV9jbGllbnQtPmJvdW5kcygpKTsKICAg
ICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobm93
KSkKICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIG5vdyk7CiAKLSAgICAgICAgICAgICAgICAv
LyBEZWNpZGUgaGVyZSBpZiBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gQWJzb2x1dGUgZm9yIG5vdy4K
LSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b0FwcGx5OwotICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbnMuYXBwbHkoRmxvYXRTaXplKCksIHRvQXBwbHkpOwotICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0odG9BcHBseSk7CisgICAgICAgICAgICAgICAg
bV9jbGllbnQtPnNldFRyYW5zZm9ybShtYXRyaXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbC5oCmluZGV4IDFhZDIyM2RiYTgyM2EyYTA1N2IxMDJkOTZhYTk1YWVhYjJk
NTI4NjQuLjI0NWUwZDY4NjE4OWJiZTYwOTkzMmI0MTQ0MDY3ZDNmYzE4ZTEzOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCkBAIC0y
OSwxMiArMjksMTQgQEAKICNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCiAKICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlv
blJlc3VsdHM7CiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CiBjbGFzcyBJ
bnRTaXplOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBAIC00NCwxOCArNDYsMjIgQEAg
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KIAor
ICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0
eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwog
ICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1wbERp
ZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07CiAKIGNsYXNzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0ZShDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJh
bWVCZWdpblRpbWVTZWNzKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwoKTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBD
Q0FuaW1hdGlvblJlc3VsdHMqKTsKIAogICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+KTsKIApAQCAtNjcsMTIgKzczLDE0IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0Fj
dGl2ZUFuaW1hdGlvbigpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKKwogICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBi
eSB0aGUgbGF5ZXIuCiAgICAgZXhwbGljaXQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwogCi0gICAgdm9pZCBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3cpOwotICAgIHZvaWQgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93KTsKKyAg
ICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbm93LCBDQ0Fu
aW1hdGlvblJlc3VsdHMqKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzKik7CisgICAgdm9pZCBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0
aW9uUmVzdWx0cyopOwogICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbm93KTsKICAg
ICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7CiAKQEAgLTgwLDYgKzg4LDcgQEAgcHJp
dmF0ZToKIAogICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCogbV9jbGll
bnQ7CiAgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1h
dGlvbnM7CisgICAgVmVjdG9yPENDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25TaWduYXR1cmU+
IG1fZmluaXNoZWRBbmltYXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDgxZjk3MTJlMGZhYzBmOTgxMjg4OGRhMmU3M2ZmMzNl
ZmQ2MDY1YTQuLmU4OTI5OGUxZjNkMzNhOGEwZGRiMjQxNjM0NzQ2MTcyZjNjMTQxNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1
ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CkBAIC02MSw2ICs2Miw3IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQp
CiAgICAgLCBtX2RyYXdPcGFjaXR5KDApCiAgICAgLCBtX2RlYnVnQm9yZGVyQ29sb3IoMCwgMCwg
MCwgMCkKICAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQorICAgICwgbV9hbmltYXRpb25Db250
cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKHRoaXMpKQogewog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAppbmRleCAwMGUwYWRmOGE1MWZkZWMwNGE5ZjQyNWYwNDU3YWEzMzg4Y2VhM2FhLi4zM2ViZDQ3
MzdhZGY0N2VjNjE2ZjQ2ZDU2NzNmYmNkYWQzNzFiZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgpAQCAtNDAsMTYgKzQxLDI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOwogY2xhc3MgQ0NMYXllclNvcnRlcjsK
IGNsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKLWNs
YXNzIENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsKK2NsYXNz
IENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+LCBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwoaWQpKTsKICAgICB9CisKKyAgICAvLyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmly
dHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisgICAg
dmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsg
fQorCiAgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKIAogICAgIC8vIFRyZWUgc3RydWN0dXJl
LgpAQCAtNjUsOCArNzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIoUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4pOwogICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQogCi0gICAgaW50IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllcklkOyB9Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVn
SUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgpAQCAtMTA2LDkgKzExNSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYXF1ZShib29sKTsKICAgICBib29sIG9wYXF1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQp
OwotICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KLQogICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCkBAIC0xMjQsOSAr
MTMwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3Vi
bGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CiAK
LSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybTsgfQotCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBt
X25hbWUgPSBuYW1lOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAKQEAgLTE0OSw3ICsxNTIsNiBAQCBwdWJsaWM6CiAgICAgQ0NSZW5kZXJTdXJm
YWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJT
dXJmYWNlOyB9CiAgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFj
ZSogc3VyZmFjZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CiAKLSAgICBj
b25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogICAgIHZv
aWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKIAogICAgIGNvbnN0IEludFNpemUmIGNvbnRl
bnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3VuZHM7IH0KQEAgLTE5OCw2ICsy
MDAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllclByb3BlcnR5Q2hhbmdlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXJQcm9wZXJ0eUNoYW5nZWQ7IH0KICAgICB2b2lkIHJlc2V0QWxsQ2hhbmdl
VHJhY2tpbmdGb3JTdWJ0cmVlKCk7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqIGFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKGludCk7CiAK
QEAgLTMwNSw2ICszMDksOSBAQCBwcml2YXRlOgogICAgIC8vIFJlY3QgaW5kaWNhdGluZyB3aGF0
IHdhcyByZXBhaW50ZWQvdXBkYXRlZCBkdXJpbmcgdXBkYXRlLgogICAgIC8vIE5vdGUgdGhhdCBw
bHVnaW4gbGF5ZXJzIGJ5cGFzcyB0aGlzIGFuZCBsZWF2ZSBpdCBlbXB0eS4KICAgICBGbG9hdFJl
Y3QgbV91cGRhdGVSZWN0OworCisgICAgLy8gTWFuYWdlcyBhbmltYXRpb25zIGZvciB0aGlzIGxh
eWVyLgorICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IG1fYW5pbWF0
aW9uQ29udHJvbGxlcjsKIH07CiAKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6
aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAppbmRleCA0ZmY4NDM0YjIwMGM5MmQ0OGEwOGJmOTFjMTRiMjdmODIxOWRkYWI2Li5kYjEw
MWU3ZmQ0OTJkOTA4OThhZmRlMTU2MDkxNWYyZGI0YjM0YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVy
YXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKQEAgLTE1NCw5ICsxNTUsMTAgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCiAgICAg
Ly8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBleGlzdHMgYXQgYWxsLi4uCi0gICAgaWYgKHJv
b3RMYXllcigpKQorICAgIGlmIChyb290TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0
Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCks
IGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNl
dE5lZWRzQW5pbWF0ZUxheWVycygpOworICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0
Um9vdExheWVyKDApOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1l
TnVtYmVyKCkpOwpAQCAtMjM2LDYgKzIzOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
TmVlZHNSZWRyYXcoKQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0K
IAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMoUGFzc093blB0cjxD
Q0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMpCit7CisgICAgQVNTRVJUKENDVGhyZWFkUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuIFdpbGwgaGF2
ZSB0byB3YWxrIHRoZSB0cmVlLgorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExh
eWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogewogICAgIGlmIChtX3Jv
b3RMYXllciA9PSByb290TGF5ZXIpCkBAIC0zMTMsOSArMzIxLDExIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAgaWYgKHJvb3RMYXllcigp
KSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAg
ZWxzZQorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKCk7CisgICAgfSBl
bHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKaW5kZXggZjU4MjAzZDE1ZWIyMDQ1MDcxYzJlZmE0NDhiYTQwYmYxOWE1
NGNhYS4uMmUyYWYwM2Q3ZjQwNTZmNDYyODc3MmJjODI0NmY3ZGMzMmZiNmMwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgR3JDb250ZXh0Owog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CkBAIC0xNjYsNiArMTY3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdCgpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAorICAg
IHZvaWQgc2V0QW5pbWF0aW9uUmVzdWx0cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4p
OworCiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIu
Z2V0KCk7IH0KICAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCAxODQ2ZDZjMmVmNWI3NGNlYzcxMTUyNmM4ZTRkZTJlMTg3NzE3YTU0Li43ODlhOWYx
ZjIxYzBkMTI4OWZlMjM1ZDk4MGVhODI3NGNlYjFjMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2lu
Y2x1ZGUgImNjL0NDRGFtYWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgpAQCAtNTcsNiArNTgs
NyBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0
dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgICwgbV9zZW50UGFnZVNjYWxlRGVsdGEo
MSkKICAgICAsIG1fbWluUGFnZVNjYWxlKDApCiAgICAgLCBtX21heFBhZ2VTY2FsZSgwKQorICAg
ICwgbV9uZWVkc0FuaW1hdGVMYXllcnModHJ1ZSkKICAgICAsIG1fcGluY2hHZXN0dXJlQWN0aXZl
KGZhbHNlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CkBAIC05Nywy
MSArOTksMjcgQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRl
eHQoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVn
aW5UaW1lTXMpCiB7Ci0gICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbikKKyAgICBpZiAoIW1f
cGFnZVNjYWxlQW5pbWF0aW9uICYmICFtX25lZWRzQW5pbWF0ZUxheWVycykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSW50U2l6ZSBzY3JvbGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsK
KyAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24pIHsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKIAotICAgIHNldFBhZ2VTY2FsZURlbHRhKG1f
cGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykgLyBt
X3BhZ2VTY2FsZSk7Ci0gICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRp
b24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKLSAgICBuZXh0U2Nyb2xs
LnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2Nh
bGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNj
YWxlKTsKKyAgICAgICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRpb24t
PnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKKyAgICAgICAgbmV4dFNjcm9s
bC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXJJbXBs
LT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwogCi0gICAgaWYgKG1fcGFnZVNj
YWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMp
KSB7Ci0gICAgICAgIG1fcGFnZVNjYWxlQW5pbWF0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fY2xp
ZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICBpZiAobV9wYWdlU2Nh
bGVBbmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykp
IHsKKyAgICAgICAgICAgIG1fcGFnZVNjYWxlQW5pbWF0aW9uLmNsZWFyKCk7CisgICAgICAgICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIGlmIChtX25lZWRzQW5pbWF0ZUxheWVycyAmJiBtX3Jvb3RMYXllckltcGwuZ2V0
KCkpCisgICAgICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWVNcyAvIDEwMDApOworCisg
ICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91Ymxl
IHN0YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25NcykKQEAgLTI0NCw2ICsyNTIsMjQgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NM
aXN0JiBwYXNzZXMpCiAgICAgICAgIHBhc3Nlc1tpXS0+b3B0aW1pemVRdWFkcygpOwogfQogCiti
b29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllcklt
cGwqIGN1cnJlbnQsIGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVzdWx0
cyogcmVzdWx0cykKK3sKKyAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOworCisg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1
cnJlbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKSB7CisgICAgICAgIG5lZWRzQW5pbWF0ZUxheWVycyA9IHRy
dWU7CisgICAgICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lU2Vj
cywgcmVzdWx0cyk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXJyZW50
LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhbmltYXRlTGF5ZXJzUmVj
dXJzaXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCksIGZyYW1lQmVnaW5UaW1lU2Vjcywg
cmVzdWx0cykpCisgICAgICAgICAgICBuZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBuZWVkc0FuaW1hdGVMYXllcnM7Cit9CisKIEludFNpemUgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTog
SGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKQEAgLTU0
Miw0ICs1NjgsMTcgQEAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKCkKICAgICByZXR1cm4gc2Nyb2xsSW5mby5y
ZWxlYXNlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhk
b3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKG1fbmVlZHNB
bmltYXRlTGF5ZXJzKTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKEND
QW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOworICAgIG1fbmVlZHNBbmltYXRlTGF5ZXJzID0g
YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIGZyYW1lQmVnaW5U
aW1lU2VjcywgcmVzdWx0cy5nZXQoKSk7CisgICAgaWYgKCFyZXN1bHRzLT5zdGFydGVkQW5pbWF0
aW9ucygpLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnB1c2hBbmltYXRpb25SZXN1bHRU
b01haW5UaHJlYWRPbkltcGxUaHJlYWQocmVzdWx0cy5yZWxlYXNlKCkpOworICAgIGlmIChtX25l
ZWRzQW5pbWF0ZUxheWVycykKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCk7CisKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGE3MWFkYWU2NzUzMmYzMjQ5NmE1NDI4NGFhNTdmNzBi
MzQwNGNkMDEuLmY2ZDA0NGM3NjJiOTFjYThlZTUyNzRhOTI4NmVjMDdlMjkzZWIyYzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShTS0lBKQpAQCAt
MzgsNiArMzksNyBAQCBjbGFzcyBHckNvbnRleHQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFz
cyBDQ1BhZ2VTY2FsZUFuaW1hdGlvbjsKIGNsYXNzIENDTGF5ZXJJbXBsOwpAQCAtNTIsNiArNTQs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1w
bFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJl
YWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPikgPSAwOwogfTsKIAogLy8g
Q0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMg
YXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKQEAgLTExNyw4ICsxMjAsMTUgQEAgcHVibGljOgog
CiAgICAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBwcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7CiAKKyAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNBbmltYXRlTGF5ZXJzOyB9CisgICAgdm9pZCBzZXROZWVkc0FuaW1hdGVMYXllcnMoKSB7IG1f
bmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCop
OworCisgICAgLy8gdmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKTsKKwogICAgIENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOwogICAg
IGludCBtX2ZyYW1lTnVtYmVyOwpAQCAtMTMzLDYgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBj
b25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBjYWxj
dWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogICAgIHZvaWQgb3B0aW1pemVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIGJvb2wgYW5pbWF0ZUxheWVyc1Jl
Y3Vyc2l2ZShDQ0xheWVySW1wbCosIGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0
aW9uUmVzdWx0cyopOwogICAgIEludFNpemUgY29udGVudFNpemUoKSBjb25zdDsKIAogICAgIE93
blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKQEAgLTE0OCw2ICsx
NTksOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fc2VudFBhZ2VTY2FsZURlbHRhOwogICAgIGZs
b2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VTY2FsZTsKIAorICAgIC8vIElmIHRoaXMgaXMg
dHJ1ZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHRyYXZlcnNlIHRoZSBsYXllciB0cmVlIHRpY2tpbmcg
dGhlIGFuaW1hdG9ycy4KKyAgICBib29sIG1fbmVlZHNBbmltYXRlTGF5ZXJzOwogICAgIGJvb2wg
bV9waW5jaEdlc3R1cmVBY3RpdmU7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+
IG1fcGFnZVNjYWxlQW5pbWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmNwcAppbmRleCA3MmJlYzJhNzE2NjRhZjQzY2Q2NGQwMTRkMjhiODQyNjUwOTViMjAzLi5lMzM2
ZDBjZTAxZDVkNzUwZWEwOTI5YjEzODkwNTkwMGRiYjRhMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTIwOCw2ICsyMDksMTEg
QEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKICAgICBtX2xheWVyVHJlZUhvc3Qg
PSAwOwogfQogCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRU
b01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJl
c3VsdHMpCit7CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpb25SZXN1bHRzKHJlc3Vs
dHMpOworfQorCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4g
d2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQogdm9pZCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgKaW5kZXggNGZhYTIyOTk5MTJhZWM5YzRlNmFiNGJhNzAyN2Q4MWM4MDZk
NDVlZS4uMDQ3OThmNmRmYzMxMGM3NzExOTZjNzUzZWM0YmNiMzZhZjlkOTBjYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMzIsNiArMzIsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdDsKIAogY2xhc3MgQ0NTaW5nbGVUaHJlYWRQcm94eSA6IHB1YmxpYyBDQ1Byb3h5LCBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCkgeyBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9zdC0+
c2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uUmVzdWx0
VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPik7
CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdldCBk
b2VzIHRoZSBzY2hlZHVsaW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggNWU2YThmODYyNjJkZjYyNDQ5NDJlNWI0MmI0
MmViYWE4ODgzM2EyZC4uZDNkMjAxMzI4YjA2NTYwNjA2NDRjY2RhNDAyOGUzMDJjMTVlN2E0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1
ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2luY2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRp
bWVTb3VyY2UuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgpAQCAtMjI3LDYgKzIyOCwxMyBAQCB2b2lkIENDVGhy
ZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKICAgICBtX3NjaGVkdWxlck9u
SW1wbFRocmVhZC0+c2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5Ojpw
dXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NB
bmltYXRpb25SZXN1bHRzPiByZXN1bHRzKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRzIiwg
dGhpcywgMCk7CisgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHMsIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3MocmVzdWx0cy5sZWFrUHRyKCkpKSk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6c2V0TmVlZHNSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBA
IC01MjgsNiArNTM2LDE0IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6ZGlkQ29tcGxldGVTd2FwQnVm
ZmVycygpCiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CiB9
CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHMoQ0NBbmltYXRpb25S
ZXN1bHRzKiByZXN1bHRzKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldEFuaW1hdGlvblJlc3VsdHMoYWRvcHRQdHIocmVzdWx0cykpOworfQorCiB2b2lkIENDVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXpl
SW1wbE9uSW1wbFRocmVhZCIsIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4
IGExMWI1Mjc4NTk5MzFjZmI5OGY4NzI0YTUxMjQzYTA5YjRlY2MzYjkuLjZlZGVlMzA2MmY2ZDgw
NGNhZGIwNzZmYzJkMGQ0ZDBlODczZjk5ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAg
LTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlv
blJlc3VsdHM7CiBjbGFzcyBDQ0lucHV0SGFuZGxlcjsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsK
IGNsYXNzIENDU2NoZWR1bGVyOwpAQCAtNjgsNiArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9u
UmVzdWx0VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1
bHRzPik7CiAKICAgICAvLyBDQ1NjaGVkdWxlckNsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZp
cnR1YWwgYm9vbCBjYW5EcmF3KCk7CkBAIC04NCw2ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVn
aW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+KTsKICAgICB2b2lkIGRpZENv
bW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwor
ICAgIHZvaWQgcHVzaEFuaW1hdGlvblJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzKik7CiAKICAg
ICAvLyBDYWxsZWQgb24gaW1wbCB0aHJlYWQKICAgICBzdHJ1Y3QgUmVhZGJhY2tSZXF1ZXN0IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGUxNWZiZmNhYTg2ZDc1NTYzOWVlYzgx
YTdiN2VmNjdkZDY2YzUwYmYuLmYzMzE5ODIxOWFkZjdkNWYwZjkyYjIxNmFlZjAwODYyOThkMTFh
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjEsNiArNjEsNyBAQAogICAg
ICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDQW5p
bWF0aW9uVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFnZVRyYWNrZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0
aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0
aW9uVGVzdC5jcHAKaW5kZXggM2U5M2Q5NWRlODY4YTJmM2EyNWFiMDMwMjBlZDI1YzFkMGVjNDkw
YS4uMjYxZWRmZmY4NTJmMzNjMTNiNDkyMWJlNzBlNjA5ZTQyZjVlMmI5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNw
cApAQCAtMjUsMjQgKzI1LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJj
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
IgorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogCiAjaW5jbHVkZSA8Z21vY2sv
Z21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNsYXNzIEZha2VGbG9hdEFuaW1hdGlvbiA6IHB1
YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgewotcHVibGljOgotICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFs
dWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4gMDsgfQotfTsKK25hbWVzcGFjZSB7CiAKIFBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihpbnQgaXRl
cmF0aW9ucykKIHsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbiksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAg
ICAgdG9SZXR1cm4tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRvUmV0
dXJuLnJlbGVhc2UoKTsKIH0KQEAgLTE2NCw0ICsxNjAsNCBAQCBURVNUKENDQWN0aXZlQW5pbWF0
aW9uVGVzdCwgSXNGaW5pc2hlZCkKICAgICBFWFBFQ1RfVFJVRShhbmltLT5pc0ZpbmlzaGVkKCkp
OwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2JkOGEyZmUyMTUxZTY4ZjJkNTZjNmM5YTA0N2I2Y2Q5ODNlZjliOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1h
dGlvblRlc3RDb21tb25faAorI2RlZmluZSBDQ0FuaW1hdGlvblRlc3RDb21tb25faAorCisjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0VGVzdHMgeworCitjbGFzcyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2
ZSA6IHB1YmxpYyBXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAg
IHZpcnR1YWwgfkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdl
dFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk7CisgICAg
fQorfTsKKworY2xhc3MgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24gOiBwdWJsaWMgV2ViQ29yZTo6
Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgRmFrZVRyYW5zZm9ybVRy
YW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKSA6IG1fZHVyYXRpb24oZHVyYXRpb24pIHsgfQorICAg
IHZpcnR1YWwgfkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCkgeyB9CisKKyAgICB2aXJ0dWFsIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNz
T3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKnRoaXMp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fZHVyYXRpb247Cit9OworCitjbGFz
cyBGYWtlRmxvYXRUcmFuc2l0aW9uIDogcHVibGljIFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25D
dXJ2ZSB7CitwdWJsaWM6CisgICAgRmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24s
IGZsb2F0IGZyb20sIGZsb2F0IHRvKQorICAgICAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCisg
ICAgICAgICwgbV9mcm9tKGZyb20pCisgICAgICAgICwgbV90byh0bykKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB+RmFrZUZsb2F0VHJhbnNpdGlvbigpIHsgfQorCisgICAgdmlydHVhbCBk
b3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVh
bCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRpbWUg
Lz0gbV9kdXJhdGlvbjsKKyAgICAgICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAgICAgIHRpbWUg
PSAxOworICAgICAgICByZXR1cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOwor
ICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZl
PiBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oKnRoaXMpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1f
ZHVyYXRpb247CisgICAgZmxvYXQgbV9mcm9tOworICAgIGZsb2F0IG1fdG87Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXRUZXN0cworCisjZW5kaWYgLy8gQ0NBbmltYXRpb25UZXNjdENvbW1v
bl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcAppbmRleCAzZDUwZDA2ZTYy
MzEyMThmMTQwMjEyYjFkZmVkNmU3ODk1YjBmNTNiLi41MmFjMzlmNDVkYTYwZjRjMGNhOTI0ZmU1
MmVlNzE5NmEyNzA1YjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAK
QEAgLTI0LDE2ICsyNCwxNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJD
Q0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaCIKLQotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCi0KKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJl
c3VsdHMuaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAogbmFtZXNwYWNlIHsKIApAQCAtNDIsNzQg
KzQyLDM5IEBAIHB1YmxpYzoKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCgpIDogbV9vcGFjaXR5
KDApIHsgfQogICAgIHZpcnR1YWwgfkZha2VDb250cm9sbGVyQ2xpZW50KCkgeyB9CiAKKyAgICB2
aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG9w
YWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fb3BhY2l0eSA9IG9wYWNpdHk7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsg
fQotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlcikKLSAgICB7Ci0gICAgICAg
IG1fYWN0aXZlQ29udHJvbGxlcnMuYXBwZW5kKGNvbnRyb2xsZXIpOwotICAgIH0KLQotICAgIFZl
Y3RvcjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqPiYgYWN0aXZlQ29udHJvbGxlcnMo
KSB7IHJldHVybiBtX2FjdGl2ZUNvbnRyb2xsZXJzOyB9CisgICAgdmlydHVhbCBjb25zdCBJbnRT
aXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogCiBwcml2YXRlOgogICAg
IGZsb2F0IG1fb3BhY2l0eTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsK
LSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4gbV9hY3RpdmVDb250
cm9sbGVyczsKLX07Ci0KLWNsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgewotcHVibGljOgotICAgIEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0KLSAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAg
ICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBJbnRTaXplIG1fYm91bmRzOwog
fTsKIAotY2xhc3MgRmFrZUZsb2F0VHJhbnNpdGlvbiA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9u
Q3VydmUgewotcHVibGljOgotICAgIEZha2VGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9u
LCBmbG9hdCBmcm9tLCBmbG9hdCB0bykKLSAgICAgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKQot
ICAgICAgICAsIG1fZnJvbShmcm9tKQotICAgICAgICAsIG1fdG8odG8pCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlv
bjsgfQotICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Ci0gICAg
ewotICAgICAgICB0aW1lIC89IG1fZHVyYXRpb247Ci0gICAgICAgIGlmICh0aW1lID49IDEpCi0g
ICAgICAgICAgICB0aW1lID0gMTsKLSAgICAgICAgcmV0dXJuICgxIC0gdGltZSkgKiBtX2Zyb20g
KyB0aW1lICogbV90bzsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZHVyYXRpb247
Ci0gICAgZmxvYXQgbV9mcm9tOwotICAgIGZsb2F0IG1fdG87Ci19OworUGFzc093blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRp
b25DdXJ2ZT4gY3VydmUsIGludCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5
IHByb3BlcnR5KQoreworICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZl
LCBpZCwgcHJvcGVydHkpOworfQogCiAvLyBUZXN0cyB0aGF0IHRyYW5zaXRpb25pbmcgb3BhY2l0
eSBmcm9tIDAgdG8gMSB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiB7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAg
ICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVh
c2UoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVz
dWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTExNywy
MCArODIsMjEgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2
aWFsVHJhbnNpdGlvbikKIC8vIFRlc3RzIHRoYXQgdHdvIHF1ZXVlZCBhbmltYXRpb25zIGFmZmVj
dGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBydW4gaW4gc2VxdWVuY2UuCiBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQogeworICAgIE93blB0cjxD
Q0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7
CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJv
bGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCBy
ZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAt
MTM4LDIyICsxMDQsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsUXVldWluZykKIC8vIFRlc3RzIGludGVycnVwdGluZyBhIHRyYW5zaXRpb24gd2l0
aCBhbm90aGVyIHRyYW5zaXRpb24uCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QsIEludGVycnVwdCkKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1
bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxl
YXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBz
dGFydHMgTk9XLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCByZXN1bHRzLmdldCgpKTsg
Ly8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MS41LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgp
KTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
fQpAQCAtMTYxLDIzICsxMjgsMjQgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBJbnRlcnJ1cHQpCiAvLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRv
IHJ1biB0b2dldGhlciB3aGVuIG9ubHkgb25lIHByb3BlcnR5IGlzIGZyZWUuCiBURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3Bl
cnR5SXNCbG9ja2VkKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMo
Q0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2
ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMu
Z2V0KCkpOwogICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0
aW9uIHlldC4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgLy8gVGhlIHRoZSBm
bG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBhdCB0aW1lIDEgYW5kIHNob3VsZCBi
ZSBkb25lLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgp
KTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
fQpAQCAtMTg3LDI5ICsxNTUsMzAgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIC8vIGZvciBi
b3RoIHRvIGZpbmlzaCkuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qs
IFNjaGVkdWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmlt
YXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAg
IEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
KDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hv
dWxkIGJvdGggc3RhcnQgbm93LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9w
YWNpdHkoKSk7CiAgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBoYXZlIGZpbmlz
aGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAogICAgIC8vIG9mIGFuaW1hdGlvbnMgd2l0aCBp
ZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0aGUgbGVuZ3RoCiAgICAg
Ly8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOwogICAgIC8vIFNo
b3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4KICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBUaGUgdGhlIHNlY29uZCBvcGFjaXR5IGFu
aW1hdGlvbiBzaG91bGQgc3RhcnQgYXQgdGltZSAyIGFuZCBzaG91bGQgYmUKICAgICAvLyBkb25l
IGJ5IHRpbWUgMwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgzLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogfQpAQCAtMjE3LDIyICsxODYsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAvLyBUZXN0
cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgogVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKIHsK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0
czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0
b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNl
KCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVz
dWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCByZXN1bHRzLmdldCgp
KTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMjQwLDI4ICsyMTAsMjkg
QEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1h
dGlvbikKIC8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBm
dXR1cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1
cHRzUnVubmluZ0FuaW1hdGlvbikKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiBy
ZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVy
Q2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0
U3RhcnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCiAg
ICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVs
eS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgcmVz
dWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVzdWx0cy5n
ZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCByZXN1bHRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMjcwLDM0ICsyNDEsMzUgQEAg
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRp
b25JbnRlcnJ1cHRzUnVubmluZ0FuaW0KIC8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmlt
YXRpb24gcXVldWVkIHRvIHN0YXJ0IGxhdGVyLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlv
bldpdGhBbmltSW5RdWV1ZSkKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1
bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3Rh
cnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24g
c2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMC41LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1t
eS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgz
LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsIHJlc3VsdHMu
Z2V0KCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBF
Q1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMzA1LDY0
ICsyNzcsNjYgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW0KIC8vIFRlc3QgdGhhdCBhIGxvb3Bp
bmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlv
bnMuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29w
aW5nKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRp
b25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAK
LSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0SXRlcmF0aW9ucygzKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgp
KTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsIHJlc3Vs
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBKdXN0
IGJlIGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDQsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5v
cGFjaXR5KCkpOwogfQogCiAvLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBsb29waW5nIGFuaW1h
dGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBhYm9ydGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiB7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAg
ICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0g
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0SXRlcmF0aW9ucygtMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2Uo
KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1
LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1
LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1KTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEwNzM3NDE4MjQuMjUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1KTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUsIHJlc3VsdHMuZ2V0KCkpOwog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBF
WFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKQEAgLTM3NSw4MCArMzQ5LDY2IEBA
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5n
KQogLy8gVGVzdCB0aGF0IHBhdXNpbmcgYW5kIHJlc3VtaW5nIHdvcmsgYXMgZXhwZWN0ZWQuCiBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFBhdXNlUmVzdW1lKQogewor
ICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRz
OjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25z
dCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41
ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFj
dGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250
cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CiAKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEwMjQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCwg
cmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6UnVubmluZywgMTAyNCk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC4yNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEw
MjQuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjUsIHJlc3VsdHMuZ2V0KCkpOwog
ICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgQWJvcnRBR3JvdXBlZEFuaW1hdGlvbikKIHsKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRl
KCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlk
ID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVy
LT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29u
dHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEs
IHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OkFib3J0ZWQsIDEpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5
KCkpOwogfQogCi0vLyBUZXN0cyB0aGF0IGFkZGluZyBhbiBhbmltYXRpb24gdG8gdGhlIGNvbnRy
b2xsZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIG9uIHRoZSBjb250cm9sbGVyIGNs
aWVudAotLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRoZSBjb250cm9sbGVyIHRvIHRoZSBsaXN0
IG9mIGFjdGl2ZSBjb250cm9sbGVyKS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdCwgRGlkQWN0aXZhdGUpCi17Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
LSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNp
emUoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBkdW1teS5hY3Rp
dmVDb250cm9sbGVycygpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNvbnRyb2xsZXIuZ2V0KCks
IGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOwotfQotCiB9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCBmNTk4OTNkZTkwNjQxOGY4Y2JkNzU3NDBhZTI5MzllMjNjYzIzNTBh
Li5hOGZhNWVhOTYxNGNkMjEyYWMxZDFlZTNjZmMxMTZkNmZlMjU4NTQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1
ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1JlZHJhd09uSW1wbFRocmVhZCgpIHsgbV9kaWRSZXF1ZXN0UmVkcmF3ID0gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIHsgbV9kaWRSZXF1ZXN0
Q29tbWl0ID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uUmVzdWx0VG9N
YWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPikgeyB9
CiAKICAgICBzdGF0aWMgdm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCA0MWZlNGZiNjU5Yjk0MDUxYzY3
ZWFiZjNlZWE5YzA4NDY3NmVlYWI0Li4wYmI3MGZkZDkyNTA3NGM1OWVmNWY1ODZhNWEzMjQ4ZGU3
MGUzNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5j
bHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkNv
bnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgiCkBAIC0zNCw2ICszNSw4IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNs
dWRlICJXZWJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2NvcGVkVGhyZWFkUHJveHkuaCIKQEAg
LTQ3LDExICs1MCwxMSBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCi1uYW1lc3BhY2UgeworbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBVc2VkIGJ5IHRl
c3Qgc3R1YnMgdG8gbm90aWZ5IHRoZSB0ZXN0IHdoZW4gc29tZXRoaW5nIGludGVyZXN0aW5nIGhh
cHBlbnMuCiBjbGFzcyBUZXN0SG9va3MgewpAQCAtNTksNiArNjIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJl
ZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhD
Q0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5k
U2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKSB7IH0KQEAgLTkwLDYgKzk0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV90ZXN0SG9v
a3MtPmRyYXdMYXllcnNPbkNDVGhyZWFkKHRoaXMpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpCisg
ICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKGZyYW1lQmVn
aW5UaW1lU2Vjcyk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hbmltYXRlTGF5ZXJzKHRoaXMpOwor
ICAgIH0KKwogcHJpdmF0ZToKICAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhvb2tzKiB0
ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50KiBjbGllbnQpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChzZXR0aW5ncywg
Y2xpZW50KQpAQCAtMTMxLDYgKzE0MiwyMiBAQCBwcml2YXRlOgogICAgIFRlc3RIb29rcyogbV90
ZXN0SG9va3M7CiB9OwogCisvLyBBZGFwdHMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgZm9y
IHRlc3QuCitjbGFzcyBNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIDogcHVibGljIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
b2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCisgICAgeworICAgICAg
ICBhY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMS4wLCAxLjBmLCAwLjBmKSksIDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKIGNsYXNzIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRy
YWNraW5nIDogcHVibGljIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nPiBjcmVhdGUoQXR0cmlidXRlcyBhdHRycykKQEAgLTIy
NSw3ICsyNTIsOSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
ZSgpCisgICAgeworICAgIH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBNb2NrTGF5ZXJUcmVl
SG9zdENsaWVudChUZXN0SG9va3MqIHRlc3RIb29rcykgOiBtX3Rlc3RIb29rcyh0ZXN0SG9va3Mp
IHsgfQpAQCAtMjU1LDYgKzI4NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGUsIHRoaXMpOwog
ICAgIH0KIAorICAgIHZvaWQgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpCisgICAgewor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQWRk
QW5pbWF0aW9uLCB0aGlzKTsKKyAgICB9CisKICAgICB2b2lkIHBvc3RTZXROZWVkc0NvbW1pdFRv
TWFpblRocmVhZCgpCiAgICAgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNDb21taXQsIHRoaXMpOwpAQCAtMjcwLDcgKzMwNCw2
IEBAIHB1YmxpYzoKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0
OjpkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZUFuZENvbW1pdCwgdGhpcyk7CiAgICAgfQogCi0KICAg
ICB2b2lkIHBvc3RTZXRWaXNpYmxlVG9NYWluVGhyZWFkKGJvb2wgdmlzaWJsZSkKICAgICB7CiAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQodmlzaWJsZSA/IENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRp
c3BhdGNoU2V0VmlzaWJsZSA6IENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0SW52aXNp
YmxlLCB0aGlzKTsKQEAgLTMxMyw2ICszNDYsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICAgIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNBbmltYXRlKCk7CiAgICAgfQogCisgICAgc3Rh
dGljIHZvaWQgZGlzcGF0Y2hBZGRBbmltYXRpb24odm9pZCogc2VsZikKKyAgICB7CisgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9
IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKKyAgICAgIEFTU0VSVCh0
ZXN0KTsKKyAgICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QgJiYgdGVzdC0+bV9sYXllclRy
ZWVIb3N0LT5yb290TGF5ZXIoKSkKKyAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJv
b3RMYXllcigpLT5hZGRBbmltYXRpb24oS2V5ZnJhbWVWYWx1ZUxpc3QoQW5pbWF0ZWRQcm9wZXJ0
eU9wYWNpdHkpLCBJbnRTaXplKCksIDAsICIiLCAwLjApOworICAgIH0KKwogICAgIHN0YXRpYyB2
b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0KHZvaWQqIHNlbGYpCiAgICAgewog
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTQ2Myw2ICs1MDUsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KCkKICAgICBtX2xheWVyVHJlZUhvc3QgPSBN
b2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1fY2xpZW50LmdldCgpLCByb290TGF5ZXIs
IG1fc2V0dGluZ3MpOwogICAgIEFTU0VSVF9UUlVFKG1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgcm9v
dExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CisgICAgcm9v
dExheWVyLT5zZXRBbmltYXRpb25Db250cm9sbGVyKE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgpKTsKIAogICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKICAgICBiZWdpblRlc3Qo
KTsKQEAgLTc4OSw2ICs4MzIsNDQgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVk
c0FuaW1hdGVJbnNpZGVBbmltYXRpb25DYWxsYmFjaywgcnVuTXVsdGlUaHJlYWQKICAgICBydW5U
ZXN0VGhyZWFkZWQoKTsKIH0KIAorLy8gQWRkIGEgbGF5ZXIgYW5pbWF0aW9uIGFuZCBjb25maXJt
IHRoYXQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyBkb2VzIGdldAorLy8gY2Fs
bGVkIGFuZCBjb250aW51ZXMgdG8gZ2V0IGNhbGxlZC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRl
c3RBZGRBbmltYXRpb24gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewor
cHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24oKQorICAgICAgICA6
IG1fbnVtQW5pbWF0ZXMoMCkKKyAgICAgICAgLCBtX2xheWVyVHJlZUhvc3RJbXBsKDApCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAg
cG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX251bUFuaW1hdGVzKSB7CisgICAgICAgICAgICBtX251bUFu
aW1hdGVzKys7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZW5kVGVz
dCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQW5pbWF0ZXM7CisgICAgQ0NMYXllclRyZWVIb3N0
SW1wbCogbV9sYXllclRyZWVIb3N0SW1wbDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RU
ZXN0QWRkQW5pbWF0aW9uLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQo
KTsKK30KKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZSA6IHB1YmxpYyBD
Q0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CiBwdWJsaWM6CiAgICAgQ0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbFNpbXBsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDE1NTdhN2Q5MzIyY2M2YmUyMDZi
ZjUwYjAwYzBmNDcwNjNjNTQ3OGIuLjg4MzhiZTk2NzExOWRiNWJlMjdmNWU4ZWRmMTRiYzUxOTVh
ZjYxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNo
cm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwCkBAIC0yNiwxMyArMjYsMzEgQEAKIAogI2luY2x1ZGUgIlRyZWVT
eW5jaHJvbml6ZXIuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
IgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdCA6IHB1YmxpYyBU
ZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGdl
dEFuaW1hdGlvbkNvbnRyb2xsZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gbGF5ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSB7CiAKQEAgLTExNiw3ICsxMzQsNyBAQCB2
b2lkIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVy
SW1wbCogY2NMYXllcikKIH0KIAogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5k
IHN5bmNocm9uaXplcyBpdCB3aXRob3V0IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3Rpbmcg
bGF5ZXJzLgotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1w
dHkpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5
KQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0x
MjksNyArMTQ3LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVG
cm9tRW1wdHkpCiB9CiAKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5j
aHJvbml6ZXMgaXQgYXR0ZW1wdGluZyB0byByZXVzZSBzb21lIGxheWVycwotVEVTVChUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQorVEVTVF9GKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiB7CiAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3Ry
dWN0aW9uTGlzdDsKQEAgLTE1NSw3ICsxNzMsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiAgICAgRVhQRUNUX0VRKHNlY29uZENDTGF5
ZXJJZCwgY2NMYXllckRlc3RydWN0aW9uTGlzdFswXSk7CiB9CiAKLVRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKK1RFU1RfRihUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogewogICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRy
ZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0xODcsNyArMjA1LDcgQEAgVEVT
VChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogICAg
IEVYUEVDVF9FUShzZWNvbmRDaGlsZEJvdW5kcy5oZWlnaHQoKSwgc2Vjb25kQ0NMYXllckNoaWxk
Qm91bmRzLmhlaWdodCgpKTsKIH0KIAotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VD
Q0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVz
dCwgcmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKIHsKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25M
aXN0OwpAQCAtMjM0LDcgKzI1Miw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNl
Q0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiB9CiAKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5
IHNpbXBsZSB0cmVlLCBzeW5jaHJvbml6ZXMgaXQsIHRoZW4gc3luY2hyb25pemVzIHRvIGEgdG90
YWxseSBuZXcgdHJlZS4gQWxsIGxheWVycyBmcm9tIHRoZSBvbGQgdHJlZSBzaG91bGQgYmUgZGVs
ZXRlZC4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ry
b3kpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ry
b3kpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGlu
dD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKQEAgLTI2NSw3ICsyODMsNyBAQCBURVNUKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQogfQogCiAvLyBDb25z
dHJ1Y3RzK3N5bmNzIGEgdHJlZSB3aXRoIG1hc2ssIHJlcGxpY2EsIGFuZCByZXBsaWNhIG1hc2sg
bGF5ZXJzLgotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVw
bGljYU1hc2tMYXllcnMpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVw
bGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0zMDcsNSArMzI1LDg1IEBAIFRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogICAgIGV4cGVj
dFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5n
ZXQoKSk7CiB9CiAKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY05ld0FuaW1hdGlv
bikKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisg
ICAgLy8gU3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBj
Y0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIDApOworCisgICAgLy8gQWRkIGFuaW1hdGlvbiB0byBtYWluIHRocmVh
ZCBjb250cm9sbGVyLgorICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5n
ZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3Qu
Z2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250
cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2
YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkp
OworfQorCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0
aWVzKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisK
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZ2V0QW5p
bWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygp
LmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRB
bmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
Y0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJv
b3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisKKyAgICAvLyBQdXNoIGFuIGFuaW1h
dGlvbiBwcm9wZXJ0eSBjaGFuZ2UgdG8gdGhlIGltcGwgdGhyZWFkIChzaG91bGQgbm90IGNhdXNl
IGFuIGFuaW1hdGlvbiB0byBiZSBhZGRlZCkuCisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihs
YXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpWzBdLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5
ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQs
IGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRp
b24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKK30KKworVEVT
VF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKK3sKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3
aXRoIG5vIGFuaW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJv
b3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0
KCksIDApOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSkt
PmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkp
OworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVy
KCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
CisgICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGdl
dEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlv
bnMoKS5jbGVhcigpOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9G
QUxTRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cit9CisKK1RFU1RfRihUcmVl
U3luY2hyb25pemVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlvbikKK3sKKyAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJU
cmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRoIG5v
IGFuaW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBU
cmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDAp
OworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2
ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVS
b290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NM
YXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5h
bmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBh
bmltYXRpb24gdW50aWwgaXQgaXMgZmluaXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWlu
IHRocmVhZCdzIGFuaW1hdGlvbiBzaG91bGQgYmUgY2xlYXJlZC4KKyAgICBPd25QdHI8Q0NBbmlt
YXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOworICAg
IGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRlKDAsIHJlc3Vs
dHMuZ2V0KCkpOworICAgIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5h
bmltYXRlKDIsIHJlc3VsdHMuZ2V0KCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNjTGF5ZXJUcmVl
Um9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBnZXRBbmlt
YXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCku
c2l6ZSgpKTsKKworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJU
cmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9FUShz
aXplX3QoMCksIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFj
dGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125432</attachid>
            <date>2012-02-03 15:21:05 -0800</date>
            <delta_ts>2012-02-10 07:57:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120203182103.patch</filename>
            <type>text/plain</type>
            <size>114528</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJjMWY2NWI1MTQ3NWMy
Y2Y0ZWMwOTgwODUyMWFkNTM3NTBkNjRmZi4uZDY0MzA5NzA1ZThkZTZlNDkxN2NjZDNkZmYyZTJl
OGNlNzE3MDQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0wMyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtQ2hyb21pdW1MYXllckFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRD
b250ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhh
c1J1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBs
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRp
b25TaWduYXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDQW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHQ6OkNDQW5pbWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5p
bWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvblJlc3VsdHM6On5DQ0FuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHRzOjpzdGFydGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OkNDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEy
LTAyLTAxICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
Q29udGVudCBlbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGJlIGR5bmFtaWNhbGx5IGFkZGVkL3Jl
bW92ZWQvcmVwbGFjZWQgaW4gYSBzaGFkb3cgdHJlZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggYzk3ZTRjM2I4YjRhNTE3NzgzOWJiY2Y3YTFmNWI2YjUyODNlMDcwMC4uZTBiZDUxYjhh
NTU0YjE2YTYyMzI0Y2VhODI4OTg2NGVmMDk5YjI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMi0wMi0wMyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBsdW1iIGZyb20gR3JhcGhpY3NMYXll
ciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoRmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjp+
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChG
YWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFu
c2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUNvbnRyb2xsZXJDbGllbnQ6OmlkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJv
bGxlckNsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OnB1c2hBbmlt
YXRpb25SZXN1bHRUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAgICAqIHRlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVHJl
ZVN5bmNocm9uaXplclRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplclRl
c3Q6OmdldEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorCiAyMDEyLTAyLTAxICBLZW50IFRhbXVyYSAg
PHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIERpc2FibGUgV2ViRnJh
bWVUZXN0LkZpbmRJblBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDFjODdmNjlkY2E4MWNjMGVj
NDA0ZTFmYzhhMDY0YTg1MjNkMzgzLi42OTU5NjZhYmVjZTI0YjI1MWE2MjRiYjhmNTExZGYxYmIx
YTlkMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMjI0LDYgKzMyMjQsNyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLApA
QCAtMzI0MSw2ICszMjQyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3ZTUxZTI0YWVlZDMyYWZlOTcwZS4uMTFmYTQ2Yjc5
MjEwMmQ1YmFiZTk0ZjIwZWJlMWZlOWU4NTcyNzQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVu
KQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNo
aWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0g
ICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAorICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAg
ICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIApAQCAtMzY5LDYgKzM2OSwzNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXllci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFt
ZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJl
bW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1
c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOwor
fQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bGF5ZXJBbmltYXRpb25TdGFydGVkKGRv
dWJsZSBzdGFydFRpbWUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBzdGFydFRpbWUpOworfQorCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVy
KQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC0zODMsMTIgKzQxNCwx
MiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRm
b3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5
ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7Ci0gIAorCiAgICAgICAg
ICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRl
Q2hpbGRMaXN0LgogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKICAgICAgICAgfQog
ICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQogICAgICAgICB1cGRhdGVDaGls
ZExpc3QoKTsKIH0KQEAgLTUzNyw3ICs1NjgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAgICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKLSAg
ICAgICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBG
dXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXll
ci4KICAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eSgxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uaAppbmRleCAzOWIzNjdiOWQzZjBlMmY4M2EzMjBmOTAyYjU0MDYyZmI5MzFl
ODY2Li4yYjc4NTAxODZlYTFjOWUwOTQ2ZGEzNzMyYzUzNTJlY2RjOWVjMGI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTIsNiArOTIsMTQgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAorICAgIHZp
cnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmLCBkb3VibGUg
dGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXN1bWVBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3Vi
bGUgc3RhcnRUaW1lKTsKKwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGIyZjcwMTQxYjQ3YTVkNDdi
NDQwMjkzODBkMzhjYjNkYzNjNWIzMjguLjVjYzBkZjc5MGZiZTA5YjE1YzBmZmE1MmFiY2VkZTY4
MTU0OWEzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
IAorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpZiBV
U0UoU0tJQSkKQEAgLTU5LDYgKzYwLDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgp
CiAgICAgOiBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXll
cklkKyspCiAgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSkKICAgICAsIG1fc2Nyb2xsYWJsZShm
YWxzZSkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRD
b2xvcigwLCAwLCAwLCAwKQpAQCAtOTYsNiArOTgsMzggQEAgdm9pZCBMYXllckNocm9taXVtOjpj
bGVhbnVwUmVzb3VyY2VzKCkKIHsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6
ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fYW5p
bWF0aW9uQ29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9u
LCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBpZiAoYWRkZWRBbmltYXRpb24pCisg
ICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOworfQor
Cit2b2lkIExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVy
LT5wYXVzZUFuaW1hdGlvbihhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBzZXROZWVk
c0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5y
ZW1vdmVBbmltYXRpb24oYW5pbWF0aW9uTmFtZSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30K
Kwordm9pZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sK
KyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworICAg
IHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0
aW9ucygpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7
CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05v
bkNvbXBvc2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBt
X2lzTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpAQCAtNTE0
LDYgKzU0OCwxMSBAQCBib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQo
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRBbmltYXRp
b25Db250cm9sbGVyKFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1h
dGlvbkNvbnRyb2xsZXIpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyID0gYW5pbWF0aW9u
Q29udHJvbGxlcjsKK30KKwogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0
b3IsIHZvaWQqKQogewogICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCB1c2Ugei1vcmRlciB0byBk
ZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGFjdHVhbGx5IHNvcnQg
TGF5ZXJDaHJvbWl1bXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNzY0ZjczMDE1NWI1NDUzN2Nk
YTRjNzM4MWIzZmQzYmNiNzk2MDY0ZC4uODliNjI2NWQwZjEzZGRlNWRkZmM5M2U1NDQ4MWU2YmQy
MzMwYzMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTEsNiArNTEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3Mg
Q0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRh
dGVyOwpAQCAtNjAsNyArNjEsNiBAQCBjbGFzcyBSZWdpb247CiAvLyBCYXNlIGNsYXNzIGZvciBj
b21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAv
LyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExh
eWVyQ2hyb21pdW0+IHsKLSAgICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpOwogCkBA
IC0yMTEsNyArMjExLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0
dXJlcyhib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJl
cyA9IGFsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1
cmVzKCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAorICAgIGJv
b2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHJlbW92ZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOworCisgICAgdm9pZCBzdXNwZW5kQW5p
bWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKIHBy
b3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7CisgICAgZnJpZW5kIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdFRlc3Q7CisgICAgZnJpZW5kIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1
bTsKKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKKyAgICBmcmllbmQgY2xhc3Mg
VHJlZVN5bmNocm9uaXplclRlc3Q7CisKICAgICBMYXllckNocm9taXVtKCk7CiAKICAgICAvLyBU
aGlzIGlzIGNhbGxlZCB0byBjbGVhbiB1cCByZXNvdXJjZXMgYmVpbmcgaGVsZCBpbiB0aGUgc2Ft
ZSBjb250ZXh0IGFzCkBAIC0yMzQsOCArMjQ3LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IG1fbWFza0xheWVyOwogCi0gICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5j
aHJvbml6ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwogICAgIC8vIENvbnN0cnVj
dHMgYSBDQ0xheWVySW1wbCBvZiB0aGUgY29ycmVjdCBydW50aW1lIHR5cGUgZm9yIHRoaXMgTGF5
ZXJDaHJvbWl1bSB0eXBlLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3Jl
YXRlQ0NMYXllckltcGwoKTsKICAgICBpbnQgbV9sYXllcklkOwpAQCAtMjQ0LDEwICsyNTUsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KExheWVyQ2hyb21pdW0qKTsKICAgICBib29s
IGhhc0FuY2VzdG9yKExheWVyQ2hyb21pdW0qKSBjb25zdDsKIAotICAgIHNpemVfdCBudW1DaGls
ZHJlbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7Ci0g
ICAgfQorICAgIHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4u
c2l6ZSgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2hpbGQgb3IgLTEg
aWYgbm90IGZvdW5kLgogICAgIGludCBpbmRleE9mQ2hpbGQoY29uc3QgTGF5ZXJDaHJvbWl1bSop
OwpAQCAtMjU1LDExICsyNjMsMTYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21QYXJlbnQuCiAgICAgdm9pZCByZW1vdmVDaGlsZChM
YXllckNocm9taXVtKik7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0
aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0QW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyPik7CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9j
aGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAogICAgIFJlZlB0cjxDQ0xh
eWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAgICAgLy8gTGF5ZXIgcHJv
cGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5
ZXJSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBkMGZkMGNlNTIzZDYzODg0
YmU5MzJlMWJkNDE2NTgyZjI1NzYyZTQwLi5kZTFjZjhhNjk0YmExYjNmZjFjYWYxNzg0NmZkYjFk
ZTU2MjE4NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03NCw2
ICs3NSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxzZQogICAgICAgICBjY0xh
eWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXItPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+c3luY2hyb25pemVBbmltYXRpb25zKGNjTGF5ZXJJbXBsLT5hbmltYXRpb25Db250
cm9sbGVyKCkpOworCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oY2NMYXllckltcGwuZ2V0
KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVjMGJlZmFhYTA1ODRmNmQy
MjFjNDQ2MjBlYS4uMDAwOWNjODg5ODNhMDY1OWIzOGE2OTNhOTY5Y2E0YzA3NzY2NTdhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
Y3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtNDQsNiArNDQsOCBAQCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1
cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1hdGlvbjo6fkNDQWN0aXZl
QW5pbWF0aW9uKCkgeyB9CisKIHZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1blN0YXRlKFJ1
blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQogewogICAgIGlmIChydW5TdGF0ZSA9PSBSdW5u
aW5nICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQpAQCAtNjMsNiArNjUsMjEgQEAgYm9vbCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdAogICAgICAgICAm
JiBtX2l0ZXJhdGlvbnMgKiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpIDw9IHRpbWUgLSBz
dGFydFRpbWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwogfQogCitib29sIENDQWN0aXZlQW5pbWF0
aW9uOjppc1dhaXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3J1blN0YXRlID09IFdhaXRp
bmdGb3JOZXh0VGljaworICAgICAgICB8fCBtX3J1blN0YXRlID09IFdhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHkKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9yU3RhcnRUaW1l
OworfQorCitib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhhc1J1bigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gUnVubmluZworICAgICAgICB8fCBtX3J1blN0
YXRlID09IEZpbmlzaGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZAorICAgICAg
ICB8fCBtX3J1blN0YXRlID09IFBhdXNlZDsKK30KKwogZG91YmxlIENDQWN0aXZlQW5pbWF0aW9u
Ojp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdAogewogICAgIGRv
dWJsZSB0cmltbWVkID0gbm93OwpAQCAtOTUsNCArMTEyLDM2IEBAIGRvdWJsZSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKICAg
ICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpKTsKIH0K
IAorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVBbmltYXRpb246OmNsb25l
Rm9ySW1wbFRocmVhZCgpIGNvbnN0Cit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9hbmltYXRpb25DdXJ2ZS0+
Y2xvbmUoKSwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAgICB0b1JldHVybi0+bV9y
dW5TdGF0ZSA9IG1fcnVuU3RhdGU7CisgICAgdG9SZXR1cm4tPm1faXRlcmF0aW9ucyA9IG1faXRl
cmF0aW9uczsKKyAgICB0b1JldHVybi0+bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZTsKKyAgICB0
b1JldHVybi0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZTsKKyAgICB0b1JldHVybi0+bV90b3Rh
bFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICByZXR1cm4gdG9SZXR1cm4ucmVs
ZWFzZSgpOworfQorCit2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6ZVByb3BlcnRp
ZXMoQ0NBY3RpdmVBbmltYXRpb24qIG90aGVyKQoreworICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZv
ciB0aGUgaW1wbCB0aHJlYWQgdG8gaW5pdGlhdGUgYSBydW4gc3RhdGUgY2hhbmdlLgorICAgIC8v
IFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gd2FzIHdhaXRpbmcgZm9yIGEgZnV0dXJl
IGV2ZW50IHRvIHRha2UKKyAgICAvLyBwbGFjZSwgYW5kIHRoZSBldmVudCBoYXMgdGFrZW4gcGxh
Y2UuIEluIHRoYXQgY2FzZSwgd2Ugd2FudCAndGhpcycgdG8KKyAgICAvLyBhc3N1bWUgdGhlIGlt
cGwgdGhyZWFkJ3MgcnVuIHN0YXRlIGFuZCBzdGFydCB0aW1lLgorICAgIGlmIChpc1dhaXRpbmco
KSAmJiBvdGhlci0+aXNSdW5uaW5nT3JIYXNSdW4oKSkgeworICAgICAgICBtX3J1blN0YXRlID0g
b3RoZXItPm1fcnVuU3RhdGU7CisgICAgICAgIG1fc3RhcnRUaW1lID0gb3RoZXItPm1fc3RhcnRU
aW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIG90aGVyLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0
ZTsKKyAgICAgICAgb3RoZXItPm1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWU7CisgICAgfQorCisg
ICAgLy8gQ2hhbmdlIGluIHN0YXRlIHJlbGF0ZWQgdG8gaXRlcmF0aW9ucyBhbmQgcGF1c2UgaXMg
YWx3YXlzIGluaXRpYXRlZCBmcm9tCisgICAgLy8gdGhlIG1haW4gdGhyZWFkLCBzbyBpdCBpcyBz
YWZlIHRvIHB1c2ggcHJvcGVydGllcyBpbiB0aGF0IGRpcmVjdGlvbi4KKyAgICBvdGhlci0+bV9p
dGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIG90aGVyLT5tX3BhdXNlVGltZSA9IG1fcGF1
c2VUaW1lOworICAgIG90aGVyLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVzZWRUaW1l
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRp
b24uaAppbmRleCBjMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2MDRlZWU5ZmJhZDBhM2QxLi42OTQ0
OGU1M2IyOTVlZWI0OGQ4MTAzMmEzNDk4M2I2ZjA3ZTg0MDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0
aXZlQW5pbWF0aW9uLmgKQEAgLTI1LDI0ICsyNSwyNyBAQAogI2lmbmRlZiBDQ0FjdGl2ZUFuaW1h
dGlvbl9oCiAjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKIAorI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDQ0FuaW1hdGlvbkN1
cnZlOwotCiAvLyBBIENDQWN0aXZlQW5pbWF0aW9uLCBjb250YWlucyBhbGwgdGhlIHN0YXRlIHJl
cXVpcmVkIHRvIHBsYXkgYSBDQ0FuaW1hdGlvbkN1cnZlLgogLy8gU3BlY2lmaWNhbGx5LCB0aGUg
YWZmZWN0ZWQgcHJvcGVydHksIHRoZSBydW4gc3RhdGUgKHBhdXNlZCwgZmluaXNoZWQsIGV0Yy4p
LAogLy8gbG9vcCBjb3VudCwgbGFzdCBwYXVzZSB0aW1lLCBhbmQgdGhlIHRvdGFsIHRpbWUgc3Bl
bnQgcGF1c2VkLgogY2xhc3MgQ0NBY3RpdmVBbmltYXRpb24geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENDQWN0aXZlQW5pbWF0aW9uKTsKIHB1YmxpYzoKICAgICAvLyBBbmltYXRpb25zIHRo
YXQgbXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcgYW5kIGhhdmUgdGhl
IHNhbWUgR3JvdXBJRAogICAgIC8vIEdyb3VwZWQgYW5pbWF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0
byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBubyBvdGhlciBhbmltYXRpb25zCiAgICAgLy8g
bWF5IGFuaW1hdGUgYW55IG9mIHRoZSBncm91cCdzIHRhcmdldCBwcm9wZXJ0aWVzIHVudGlsIGFs
bCBhbmltYXRpb25zIGluIHRoZQogICAgIC8vIGdyb3VwIGhhdmUgZmluaXNoZWQgYW5pbWF0aW5n
LiBOb3RlOiBhbiBhY3RpdmUgYW5pbWF0aW9uJ3MgZ3JvdXAgaWQgYW5kIHRhcmdldAogICAgIC8v
IHByb3BlcnR5IHVuaXF1ZWx5IGlkZW50aWZ5IHRoYXQgYW5pbWF0aW9uLgotICAgIHR5cGVkZWYg
aW50IEdyb3VwSUQ7CisgICAgdHlwZWRlZiBzaXplX3QgR3JvdXBJRDsKIAogICAgIC8vIEFuaW1h
dGlvbnMgYmVnaW4gaW4gb25lIG9mIHRoZSAnd2FpdGluZycgc3RhdGVzLiBBbmltYXRpb25zIHdh
aXRpbmcgZm9yIHRoZSBuZXh0IHRpY2sKICAgICAvLyB3aWxsIHN0YXJ0IHRoZSBuZXh0IHRpbWUg
dGhlIGNvbnRyb2xsZXIgYW5pbWF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0CkBA
IC02OCwxMiArNzEsMjAgQEAgcHVibGljOgogICAgICAgICBPcGFjaXR5CiAgICAgfTsKIAorICAg
IHN0cnVjdCBBbmltYXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmltYXRpb25TaWduYXR1cmUo
R3JvdXBJRCBncm91cElELCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAg
ICAgIDogZ3JvdXBJRChncm91cElEKQorICAgICAgICAgICAgLCB0YXJnZXRQcm9wZXJ0eSh0YXJn
ZXRQcm9wZXJ0eSkgeyB9CisgICAgICAgIEdyb3VwSUQgZ3JvdXBJRDsKKyAgICAgICAgVGFyZ2V0
UHJvcGVydHkgdGFyZ2V0UHJvcGVydHk7CisgICAgfTsKKwogICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBn
cm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFu
aW1hdGlvbigpIHsgfQorICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCk7CiAKICAgICBH
cm91cElEIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cDsgfQogICAgIFRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0eTsgfQpA
QCAtOTMsNiArMTA0LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaW5pc2hlZEF0KGRvdWJsZSB0
aW1lKSBjb25zdDsKICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3J1blN0
YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZDsgfQogCisgICAgYm9vbCBp
c1dhaXRpbmcoKSBjb25zdDsKKyAgICBib29sIGlzUnVubmluZ09ySGFzUnVuKCkgY29uc3Q7CisK
ICAgICBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5pbWF0
aW9uQ3VydmUuZ2V0KCk7IH0KICAgICBjb25zdCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25D
dXJ2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KIApAQCAtMTAw
LDYgKzExNCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUg
cmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1U
aW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0OwogCisgICAgQW5pbWF0aW9u
U2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1hdGlvblNpZ25hdHVyZSht
X2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7CisKKyAgICB2b2lkIHN5bmNocm9u
aXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiopOworCiBwcml2YXRlOgogICAgIENDQWN0
aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4sIEdyb3VwSUQsIFRhcmdl
dFByb3BlcnR5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGRlOTdlMzhj
MGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMuLjUzM2FiYWZlZjQ1NDdkNTQ5M2JhNTk3
MTFiZTE1NTE2NjdlZTI0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKQEAgLTI1
LDYgKzI1LDEwIEBACiAjaWZuZGVmIENDQW5pbWF0aW9uQ3VydmVfaAogI2RlZmluZSBDQ0FuaW1h
dGlvbkN1cnZlX2gKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEND
RmxvYXRBbmltYXRpb25DdXJ2ZTsKQEAgLTQxLDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNs
b25lKCkgY29uc3QgPSAwOwogCiAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiB0b0Zs
b2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiB0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7CkBAIC02MCw3ICs2NSw3
IEBAIGNsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NBbmltYXRpb25D
dXJ2ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgp
IHsgfQogCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShk
b3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdCA9IDA7CiAKICAgICAvLyBQ
YXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uUmVz
dWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJiZTg2OTAzNDk2MDhiMzliNTBkMWIyMjE0YzAyY2JlZDI3MGEx
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uUmVzdWx0c19oCisjZGVmaW5lIENDQW5pbWF0aW9u
UmVzdWx0c19oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCBh
biBhbmltYXRpb24gZXZlbnQgaGFzIHRha2VuIHBsYWNlIG9uIHRoZSBnaXZlbiBsYXllciBhdCB0
aGUgZ2l2ZW4gdGltZS4KK3N0cnVjdCBDQ0FuaW1hdGlvblJlc3VsdCB7CisgICAgQ0NBbmltYXRp
b25SZXN1bHQoaW50IGxheWVySUQsIGRvdWJsZSB0aW1lKQorICAgICAgICA6IGxheWVySUQobGF5
ZXJJRCkKKyAgICAgICAgLCB0aW1lKHRpbWUpIHsgfQorICAgIGludCBsYXllcklEOworICAgIGRv
dWJsZSB0aW1lOworfTsKKworLy8gVGhpcyBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJhY2sgdG8g
bWFpbiBhbmltYXRpb24gZW5naW5lIHRoYXQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBoYXZlIHN0
YXJ0ZWQuCitjbGFzcyBDQ0FuaW1hdGlvblJlc3VsdHMgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25SZXN1bHRzKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5DQ0FuaW1hdGlvblJlc3VsdHMoKSB7IH0KKworICAgIFZlY3RvcjxDQ0FuaW1hdGlvblJl
c3VsdD4mIHN0YXJ0ZWRBbmltYXRpb25zKCkgeyByZXR1cm4gbV9zdGFydGVkQW5pbWF0aW9uczsg
fQorCitwcml2YXRlOgorICAgIENDQW5pbWF0aW9uUmVzdWx0cygpIHsgfQorCisgICAgVmVjdG9y
PENDQW5pbWF0aW9uUmVzdWx0PiBtX3N0YXJ0ZWRBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25SZXN1bHRzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YmE1NTAzODdlMTY3NThlZjIxODRlNGUyMjdhNTgwYzgyMjYwMmY2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1
ZUxpc3QKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYg
Lypib3hTaXplKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZU9mZnNldCkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVt
b3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKK30KKwordm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUp
Cit7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlv
bnMoKQoreworfQorCisvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlv
bnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGlu
IHN5bmMuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1h
dGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sK
KyAgICByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBs
KTsKKyAgICBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChjb250cm9sbGVySW1wbCk7Cisg
ICAgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChjb250cm9sbGVySW1wbCk7
CisgICAgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoY29udHJvbGxlckltcGwpOworfQorCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25J
bXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwp
Cit7CisgICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkIGFy
ZSByZW1vdmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0
aW9uc1tpXS5ncm91cElELCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0u
dGFyZ2V0UHJvcGVydHkpOworICAgIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9u
cy5jbGVhcigpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3
QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNv
bnRyb2xsZXJJbXBsKQoreworICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0aGUg
bWFpbiB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhlIGltcGwg
dGhyZWFkJ3MgY29udHJvbGxlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQorICAgICAgICAgICAgY29udHJvbGxl
ckltcGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1h
dGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1h
dGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5p
bWF0aW9uLgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1h
dGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBn
dWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7KSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5p
bWF0aW9uKGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIGNv
bnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOwor
ICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+bV9hY3Rp
dmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOwor
ICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlv
blByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1w
bCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNo
IHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgorICAgIC8v
IEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlz
IGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJv
Z3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+bV9h
Y3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3Vy
cmVudCA9IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVudElt
cGwtPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBBU1NFUlQoY3VycmVudCk7CisgICAgICAg
IGlmIChjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0aWVz
KGN1cnJlbnRJbXBsKTsKKyAgICB9Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpH
cm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkg
PT0gZ3JvdXAgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRh
cmdldFByb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS5n
ZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6cmVtb3ZlKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjYTk2MDdl
OTgxNDZhNmJkNjU1MDNlNzRmMTA0ZWEzODBjNDE4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorI2RlZmluZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlZlY3Rvci5o
IgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEFuaW1hdGlvbjsKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDsKK3N0cnVjdCBJbnRTaXplOworY2xhc3MgS2V5ZnJhbWVWYWx1ZUxpc3Q7CisKK2NsYXNz
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkpOworICAgIH0K
KworICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkgeyB9CisKKyAgICAv
LyBUaGVzZSBhcmUgdmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwg
Y29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVBbmltYXRpb25zKCk7CisKKyAgICAvLyBFbnN1cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZl
IGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0aHJlYWQKKyAgICAv
LyBhcmUga2VwdCBpbiBzeW5jLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2Ugb3duZXJzaGlw
IG9mIHRoZSBpbXBsIHRocmVhZCBjb250cm9sbGVyLgorICAgIHZvaWQgc3luY2hyb25pemVBbmlt
YXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisgICAgLy8gVGhpcyBp
cyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+ID4mIGFjdGl2ZUFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlv
bnM7IH0KKworcHJvdGVjdGVkOgorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkgeyB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25JbXBsVGhy
ZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7Cisg
ICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlv
biogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIHZvaWQgcmVtb3ZlKENDQWN0aXZlQW5p
bWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisg
ICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmNwcAppbmRleCBiYmNhOWNiZDkwNTVlMWVjMTNjYzBhOTc0NjM5YzVm
OTcwODgwOTkyLi41MWE4NGQ0NjQzNjc4ZmNiMWE1NzgwOGRmODI5ZmE5NmZkZWFlYmQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5j
cHAKQEAgLTI2LDcgKzI2LDkgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oIgogCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1
bHRzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsMjIgKzQ2LDIyIEBAIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KENDTGF5ZXJBbmltYXRpb25DCiB7CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpCitDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoKSB7IH0K
Kwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91YmxlIGZy
YW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25SZXN1bHRzKiByZXN1bHRzKQogewotICAgIHN0
YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhmcmFtZUJlZ2luVGltZVNlY3MpOwotICAg
IHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZnJhbWVCZWdpblRpbWVTZWNzKTsK
LSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVn
aW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGZyYW1l
QmVnaW5UaW1lU2VjcywgcmVzdWx0cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOworICAgIHN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRz
KTsKICAgICByZXNvbHZlQ29uZmxpY3RzKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgdGlja0Fu
aW1hdGlvbnMoZnJhbWVCZWdpblRpbWVTZWNzKTsKICAgICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9u
cygpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJh
bWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2VjcywgcmVzdWx0cyk7CiB9CiAKIHZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gYW5pbSkKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlk
QWN0aXZhdGUodGhpcyk7CiB9CiAKIENDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3Jv
dXBJRCBncm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQpA
QCAtODAsMjUgKzgyLDI4IEBAIGJvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpo
YXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JO
ZXh0VGljayhkb3VibGUgbm93KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbm93LCBDQ0FuaW1hdGlv
blJlc3VsdHMqIHJlc3VsdHMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNr
KSB7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwogICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsKKyAgICAgICAgICAgIHJlc3VsdHMtPnN0YXJ0ZWRB
bmltYXRpb25zKCkuYXBwZW5kKENDQW5pbWF0aW9uUmVzdWx0KG1fY2xpZW50LT5pZCgpLCBub3cp
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdykKK3Zv
aWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVzdWx0cyogcmVzdWx0cykKIHsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KQorICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1l
ICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KSB7CiAgICAgICAg
ICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpSdW5uaW5nLCBub3cpOworICAgICAgICAgICAgcmVzdWx0cy0+c3RhcnRlZEFuaW1hdGlvbnMo
KS5hcHBlbmQoQ0NBbmltYXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5vdykpOworICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93KQordm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzKiByZXN1
bHRzKQogewogICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgogICAgIFRh
cmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7CkBAIC0xMzQsNiArMTM5LDcgQEAgdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmdyb3VwKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0cy0+c3RhcnRlZEFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBbmlt
YXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5vdykpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTc4LDkgKzE4NCwxMCBAQCB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlv
bnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisgICAgICAgIGlmIChhbGxBbmlt
c1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgbV9maW5pc2hlZEFuaW1hdGlv
bnMuYXBwZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0dXJlKCkpOwogICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgZWxzZQorICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGkrKzsKICAgICB9CiB9CkBAIC0xOTQsMTQgKzIwMSwxMSBAQCB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMoZG91Ymxl
IG5vdykKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7
CiAgICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZl
KCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+
Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQs
IG1fY2xpZW50LT5ib3VuZHMoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBu
b3cpOwogCi0gICAgICAgICAgICAgICAgLy8gRGVjaWRlIGhlcmUgaWYgYWJzb2x1dGUgb3IgcmVs
YXRpdmUuIEFic29sdXRlIGZvciBub3cuCi0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdG9BcHBseTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGx5KEZsb2F0U2l6
ZSgpLCB0b0FwcGx5KTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKHRv
QXBwbHkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCAxYWQyMjNkYmE4
MjNhMmEwNTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Li4yNDVlMGQ2ODYxODliYmU2MDk5MzJiNDE0
NDA2N2QzZmMxOGUxMzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaApAQCAtMjksMTIgKzI5LDE0IEBACiAjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0
cml4OwpAQCAtNDQsMTggKzQ2LDIyIEBAIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbENsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50KCkgeyB9CiAKKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwqKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25z
dCA9IDA7CiB9OwogCiBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsPiBjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CiAKLSAg
ICB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgdmlydHVhbCB+
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCk7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91
YmxlIGZyYW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25SZXN1bHRzKik7CiAKICAgICB2b2lk
IGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7CiAKQEAgLTY3LDEyICs3MywxNCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIAogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisKICAgICAv
LyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgogICAgIGV4cGxpY2l0IENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQqKTsKIAotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRv
dWJsZSBub3cpOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShk
b3VibGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFp
bGFiaWxpdHkoZG91YmxlIG5vdyk7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
TmV4dFRpY2soZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzKik7CisgICAgdm9pZCBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVz
dWx0cyopOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eShkb3VibGUgbm93LCBDQ0FuaW1hdGlvblJlc3VsdHMqKTsKICAgICB2b2lkIHJlc29sdmVD
b25mbGljdHMoZG91YmxlIG5vdyk7CiAgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygp
OwogCkBAIC04MCw2ICs4OCw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZlY3RvcjxDQ0FjdGl2ZUFuaW1h
dGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlPiBtX2ZpbmlzaGVkQW5pbWF0aW9uczsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA4MWY5NzEy
ZTBmYWMwZjk4MTI4ODhkYTJlNzNmZjMzZWZkNjA2NWE0Li5lODkyOThlMWYzZDMzYThhMGRkYjI0
MTYzNDc0NjE3MmYzYzE0MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjEsNiArNjIsNyBAQCBDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9kcmF3T3BhY2l0eSgwKQogICAgICwg
bV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgo
MCkKKyAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSh0aGlzKSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMDBlMGFkZjhhNTFmZGVjMDRhOWY0MjVm
MDQ1N2FhMzM4OGNlYTNhYS4uMzNlYmQ0NzM3YWRmNDdlYzYxNmY0NmQ1NjczZmJjZGFkMzcxYmUx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5o
IgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQwLDE2ICs0MSwyNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDsKIGNsYXNzIENDTGF5ZXJTb3J0ZXI7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtOwogCi1jbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENDTGF5ZXJJbXBsPiB7CitjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVk
PENDTGF5ZXJJbXBsPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShp
bnQgaWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKGlk
KSk7CiAgICAgfQorCisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50
IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9s
YXllcklkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1
YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KKwogICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7
CiAKICAgICAvLyBUcmVlIHN0cnVjdHVyZS4KQEAgLTY1LDggKzc2LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKICAgICBDQ0xh
eWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0
KCk7IH0KIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQotCiAjaWZu
ZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9
CiAjZW5kaWYKQEAgLTEwNiw5ICsxMTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFxdWUo
Ym9vbCk7CiAgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCi0g
ICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9Ci0KICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KIApAQCAtMTI0LDkgKzEzMCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN1
YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9zdWJsYXllclRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQogICAgIHZvaWQgc2V0TmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkBAIC0xNDksNyArMTUyLDYgQEAg
cHVibGljOgogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJm
YWNlID0gc3VyZmFjZTsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CiAK
ICAgICBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50Qm91bmRzOyB9CkBAIC0xOTgsNiArMjAwLDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJQ
cm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOyB9
CiAgICAgdm9pZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCisgICAgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBhbmltYXRpb25Db250cm9sbGVyKCkgeyByZXR1
cm4gbV9hbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisKIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBDQ0xheWVySW1wbChpbnQpOwogCkBAIC0zMDUsNiArMzA5LDkgQEAgcHJpdmF0ZToKICAg
ICAvLyBSZWN0IGluZGljYXRpbmcgd2hhdCB3YXMgcmVwYWludGVkL3VwZGF0ZWQgZHVyaW5nIHVw
ZGF0ZS4KICAgICAvLyBOb3RlIHRoYXQgcGx1Z2luIGxheWVycyBieXBhc3MgdGhpcyBhbmQgbGVh
dmUgaXQgZW1wdHkuCiAgICAgRmxvYXRSZWN0IG1fdXBkYXRlUmVjdDsKKworICAgIC8vIE1hbmFn
ZXMgYW5pbWF0aW9ucyBmb3IgdGhpcyBsYXllci4KKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2b2lkIHNvcnRM
YXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmlyc3QsIFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNvcnRlciopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNGZmODQzNGIyMDBjOTJkNDhhMDhi
ZjkxYzE0YjI3ZjgyMTlkZGFiNi4uZGIxMDFlN2ZkNDkyZDkwODk4YWZkZTE1NjA5MTVmMmRiNGIz
NGFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUg
IlRyZWVTeW5jaHJvbml6ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCkBAIC0x
NTQsOSArMTU1LDEwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxU
aHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhp
c3RzIGF0IGFsbC4uLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICBpZiAocm9vdExheWVyKCkp
IHsKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKLSAgICBl
bHNlCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICB9IGVs
c2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKIAogICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKQEAgLTIzNiw2ICsyMzgsMTIgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKICAgICAgICAgbV9jbGllbnQt
PnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRBbmlt
YXRpb25SZXN1bHRzKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKQorewor
ICAgIEFTU0VSVChDQ1RocmVhZFByb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudCB0aGlzLiBXaWxsIGhhdmUgdG8gd2FsayB0aGUgdHJlZS4KK30KKwogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJv
b3RMYXllcikKIHsKICAgICBpZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVyKQpAQCAtMzEzLDkg
KzMyMSwxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBs
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAgICAgICBob3N0SW1wbC0+c2V0
Um9vdExheWVyKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChyb290TGF5ZXIo
KSkKKworICAgIGlmIChyb290TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExh
eWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJ
bXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNldE5lZWRz
QW5pbWF0ZUxheWVycygpOworICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExh
eWVyKDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGY1ODIwM2QxNWVi
MjA0NTA3MWMyZWZhNDQ4YmE0MGJmMTlhNTRjYWEuLjJlMmFmMDNkN2Y0MDU2ZjQ2Mjg3NzJiYzgy
NDZmN2RjMzJmYjZjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC00NCw2ICs0
NCw3IEBAIGNsYXNzIEdyQ29udGV4dDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
Q0FuaW1hdGlvblJlc3VsdHM7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NU
ZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwpAQCAtMTY2LDYgKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKICAgICB2b2lk
IHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lkIHNldEFuaW1hdGlvblJlc3VsdHMoUGFzc093
blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KTsKKwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXll
cigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2
b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMTg0NmQ2YzJlZjViNzRjZWM3MTE1MjZj
OGU0ZGUyZTE4NzcxN2E1NC4uNzg5YTlmMWYyMWMwZDEyODlmZTIzNWQ5ODBlYTgyNzRjZWIxYzJj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q0FuaW1hdGlvblJlc3VsdHMuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uaCIKQEAgLTU3LDYgKzU4LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXll
clRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAg
ICAsIG1fc2VudFBhZ2VTY2FsZURlbHRhKDEpCiAgICAgLCBtX21pblBhZ2VTY2FsZSgwKQogICAg
ICwgbV9tYXhQYWdlU2NhbGUoMCkKKyAgICAsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKHRydWUpCiAg
ICAgLCBtX3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxzZSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwpAQCAtOTcsMjEgKzk5LDI3IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogewotICAgIGlmICghbV9wYWdlU2Nh
bGVBbmltYXRpb24pCisgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbiAmJiAhbV9uZWVkc0Fu
aW1hdGVMYXllcnMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90YWwg
PSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExh
eWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uKSB7
CisgICAgICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwt
PnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CiAK
LSAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRU
aW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUpOwotICAgIEludFNpemUgbmV4dFNj
cm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdp
blRpbWVNcyk7Ci0gICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7Ci0g
ICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7
Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgICAgIHNl
dFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJh
bWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CisgICAgICAgIEludFNpemUgbmV4dFNjcm9s
bCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdpblRp
bWVNcyk7CisgICAgICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwor
ICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRv
dGFsKTsKIAotICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRpb25Db21wbGV0
ZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSkgewotICAgICAgICBtX3BhZ2VTY2FsZUFuaW1hdGlv
bi5jbGVhcigpOwotICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KTsKKyAgICAgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRl
QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpKSB7CisgICAgICAgICAgICBtX3BhZ2VTY2FsZUFuaW1h
dGlvbi5jbGVhcigpOworICAgICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBs
VGhyZWFkKCk7CisgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAobV9uZWVkc0FuaW1hdGVMYXll
cnMgJiYgbV9yb290TGF5ZXJJbXBsLmdldCgpKQorICAgICAgICBhbmltYXRlTGF5ZXJzKGZyYW1l
QmVnaW5UaW1lTXMgLyAxMDAwKTsKKworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1w
bFRocmVhZCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxl
QW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50
LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMp
CkBAIC0yNDQsNiArMjUyLDI0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogICAgICAgICBwYXNzZXNbaV0t
Pm9wdGltaXplUXVhZHMoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRl
TGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgZnJhbWVCZWdpblRp
bWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMqIHJlc3VsdHMpCit7CisgICAgYm9vbCBuZWVkc0Fu
aW1hdGVMYXllcnMgPSBmYWxzZTsKKworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bCogY3VycmVudENvbnRyb2xsZXIgPSBjdXJyZW50LT5hbmltYXRpb25Db250cm9sbGVyKCk7Cisg
ICAgaWYgKGN1cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSkgeworICAgICAg
ICBuZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworICAgICAgICBjdXJyZW50Q29udHJvbGxlci0+
YW5pbWF0ZShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOworICAgIH0KKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShjdXJyZW50LT5jaGlsZHJlbigpW2ldLmdl
dCgpLCBmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpKQorICAgICAgICAgICAgbmVlZHNBbmlt
YXRlTGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmVlZHNBbmltYXRlTGF5ZXJz
OworfQorCiBJbnRTaXplIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29uc3QK
IHsKICAgICAvLyBUT0RPKGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUg
aXMgd2VpcmQuIFRoaW5rIG9mCkBAIC01NDIsNCArNTY4LDE3IEBAIFBhc3NPd25QdHI8Q0NTY3Jv
bGxBbmRTY2FsZVNldD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJvY2Vzc1Njcm9sbERlbHRhcygp
CiAgICAgcmV0dXJuIHNjcm9sbEluZm8ucmVsZWFzZSgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyIsIHRoaXMs
IDApOworICAgIEFTU0VSVChtX25lZWRzQW5pbWF0ZUxheWVycyk7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKKyAg
ICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnNSZWN1cnNpdmUobV9yb290TGF5
ZXJJbXBsLmdldCgpLCBmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMuZ2V0KCkpOworICAgIGlm
ICghcmVzdWx0cy0+c3RhcnRlZEFuaW1hdGlvbnMoKS5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xp
ZW50LT5wdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKHJlc3VsdHMu
cmVsZWFzZSgpKTsKKyAgICBpZiAobV9uZWVkc0FuaW1hdGVMYXllcnMpCisgICAgICAgIG1fY2xp
ZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworCiB9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBhNzFhZGFl
Njc1MzJmMzI0OTZhNTQyODRhYTU3ZjcwYjM0MDRjZDAxLi5mNmQwNDRjNzYyYjkxY2E4ZWU1Mjc0
YTkyODZlYzA3ZTI5M2ViMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKICNpZiBVU0UoU0tJQSkKQEAgLTM4LDYgKzM5LDcgQEAgY2xhc3MgR3JDb250ZXh0Owog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNz
IENDQ29tcGxldGlvbkV2ZW50OwogY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRpb247CiBjbGFzcyBD
Q0xheWVySW1wbDsKQEAgLTUyLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFuaW1h
dGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9u
UmVzdWx0cz4pID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NM
YXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC0x
MTcsOCArMTIwLDE1IEBAIHB1YmxpYzoKIAogICAgIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gcHJvY2Vzc1Njcm9sbERlbHRhcygpOwogCisgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXll
cnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQW5pbWF0ZUxheWVyczsgfQorICAgIHZvaWQgc2V0
TmVlZHNBbmltYXRlTGF5ZXJzKCkgeyBtX25lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7IH0KKwog
cHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYsIEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKKworICAgIC8vIHZpcnR1YWwgZm9yIHRlc3Rpbmcu
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2Vj
cyk7CisKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQg
bV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKQEAgLTEzMyw2ICsx
NDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xp
c3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsK
KyAgICBib29sIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3VibGUgZnJh
bWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMqKTsKICAgICBJbnRTaXplIGNvbnRl
bnRTaXplKCkgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xh
eWVyUmVuZGVyZXI7CkBAIC0xNDgsNiArMTU5LDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3Nl
bnRQYWdlU2NhbGVEZWx0YTsKICAgICBmbG9hdCBtX21pblBhZ2VTY2FsZSwgbV9tYXhQYWdlU2Nh
bGU7CiAKKyAgICAvLyBJZiB0aGlzIGlzIHRydWUsIGl0IGlzIG5lY2Vzc2FyeSB0byB0cmF2ZXJz
ZSB0aGUgbGF5ZXIgdHJlZSB0aWNraW5nIHRoZSBhbmltYXRvcnMuCisgICAgYm9vbCBtX25lZWRz
QW5pbWF0ZUxheWVyczsKICAgICBib29sIG1fcGluY2hHZXN0dXJlQWN0aXZlOwogCiAgICAgT3du
UHRyPENDUGFnZVNjYWxlQW5pbWF0aW9uPiBtX3BhZ2VTY2FsZUFuaW1hdGlvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNzJiZWMyYTcxNjY0YWY0M2NkNjRk
MDE0ZDI4Yjg0MjY1MDk1YjIwMy4uZTMzNmQwY2UwMWQ1ZDc1MGVhMDkyOWIxMzg5MDU5MDBkYmI0
YTI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ICNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CkBAIC0yMDgsNiArMjA5LDExIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3Rv
cCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFBy
b3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0QW5pbWF0aW9uUmVzdWx0cyhyZXN1bHRzKTsKK30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdh
Y3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2No
ZWR1bGluZykKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHko
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDRmYWEyMjk5OTEy
YWVjOWM0ZTZhYjRiYTcwMjdkODFjODA2ZDQ1ZWUuLjA0Nzk4ZjZkZmMzMTBjNzcxMTk2Yzc1M2Vj
NGJjYjM2YWY5ZDkwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAg
LTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0FuaW1hdGlv
blJlc3VsdHM7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiAKIGNsYXNzIENDU2luZ2xlVGhyZWFk
UHJveHkgOiBwdWJsaWMgQ0NQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CkBAIC02
MCw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBs
ZXRlT25JbXBsVGhyZWFkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0LT5zZXRO
ZWVkc0NvbW1pdCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCkgeyBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3du
UHRyPENDQW5pbWF0aW9uUmVzdWx0cz4pOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kg
cGF0aCB3aGVyZSBSZW5kZXJXaWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNv
bXBvc2l0ZUltbWVkaWF0ZWx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDVl
NmE4Zjg2MjYyZGY2MjQ0OTQyZTViNDJiNDJlYmFhODg4MzNhMmQuLmQzZDIwMTMyOGIwNjU2MDYw
NjQ0Y2NkYTQwMjhlMzAyYzE1ZTdhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKICNp
bmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgiCiAjaW5jbHVkZSAiY2MvQ0NGcmFt
ZVJhdGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKQEAgLTIy
Nyw2ICsyMjgsMTMgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9uSW1wbFRo
cmVhZCgpCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9u
SW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cykKK3sKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpwdXNoQW5pbWF0aW9uUmVzdWx0cyIsIHRoaXMsIDApOworICAgIG1fbWFpblRocmVhZFByb3h5
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnB1c2hB
bmltYXRpb25SZXN1bHRzLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHJlc3VsdHMubGVha1B0cigp
KSkpOworfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNTI4LDYgKzUzNiwxNCBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlk
Q29tcGxldGVTd2FwQnVmZmVycygpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnB1c2hBbmlt
YXRpb25SZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0cyogcmVzdWx0cykKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQorICAgICAgICByZXR1
cm47CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpb25SZXN1bHRzKGFkb3B0UHRyKHJl
c3VsdHMpKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1wbFRo
cmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9FVkVOVCgi
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCBhMTFiNTI3ODU5OTMxY2ZiOThmODcyNGE1MTI0M2Ew
OWI0ZWNjM2I5Li42ZWRlZTMwNjJmNmQ4MDRjYWRiMDc2ZmMyZDBkNGQwZTg3M2Y5OTgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NJbnB1dEhhbmRsZXI7
CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1NjaGVkdWxlcjsKQEAgLTY4LDYgKzY5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbklt
cGxUaHJlYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQ
YXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4pOwogCiAgICAgLy8gQ0NTY2hlZHVsZXJDbGll
bnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygpOwpAQCAtODQsNiAr
ODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVu
Y2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNj
YWxlU2V0Pik7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsKICAgICB2b2lkIGRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHB1c2hBbmltYXRpb25SZXN1bHRzKEND
QW5pbWF0aW9uUmVzdWx0cyopOwogCiAgICAgLy8gQ2FsbGVkIG9uIGltcGwgdGhyZWFkCiAgICAg
c3RydWN0IFJlYWRiYWNrUmVxdWVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRl
eCBlMTVmYmZjYWE4NmQ3NTU2MzllZWM4MWE3YjdlZjY3ZGQ2NmM1MGJmLi5mMzMxOTgyMTlhZGY3
ZDVmMGY5MmIyMTZhZWYwMDg2Mjk4ZDExYWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKQEAgLTYxLDYgKzYxLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9h
ZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwJywK
KyAgICAgICAgICAgICd0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ND
RGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFt
ZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCmluZGV4IDNlOTNkOTVkZTg2OGEy
ZjNhMjVhYjAzMDIwZWQyNWMxZDBlYzQ5MGEuLjI2MWVkZmZmODUyZjMzYzEzYjQ5MjFiZTcwZTYw
OWU0MmY1ZTJiOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
Y3RpdmVBbmltYXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTI1LDI0ICsyNSwyMCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKLQotI2luY2x1
ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21t
b24uaCIKIAogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFz
cyBGYWtlRmxvYXRBbmltYXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7IH0K
LSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KLX07CituYW1lc3BhY2UgewogCiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVh
dGVBY3RpdmVBbmltYXRpb24oaW50IGl0ZXJhdGlvbnMpCiB7Ci0gICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiB0b1JldHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRBbmltYXRpb24pLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvUmV0dXJuLT5zZXRJdGVyYXRpb25zKGl0ZXJh
dGlvbnMpOwogICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7CiB9CkBAIC0xNjQsNCArMTYw
LDQgQEAgVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWQpCiAgICAgRVhQRUNU
X1RSVUUoYW5pbS0+aXNGaW5pc2hlZCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
fSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NBbmltYXRpb25UZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
QW5pbWF0aW9uVGVzdENvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZDhhMmZlMjE1MWU2OGYyZDU2YzZj
OWEwNDdiNmNkOTgzZWY5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NBbmlt
YXRpb25UZXN0Q29tbW9uX2gKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xh
c3MgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1h
dGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRBbmltYXRpb25DdXJ2
ZSgpIHsgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAx
OyB9CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+
IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmUpOworICAgIH0KK307CisKK2NsYXNzIEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uIDogcHVibGljIFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVi
bGljOgorICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1
cmF0aW9uKGR1cmF0aW9uKSB7IH0KKyAgICB2aXJ0dWFsIH5GYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bigpIHsgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBn
ZXRWYWx1ZShkb3VibGUgdGltZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZl
PiBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VU
cmFuc2Zvcm1UcmFuc2l0aW9uKCp0aGlzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGRvdWJs
ZSBtX2R1cmF0aW9uOworfTsKKworY2xhc3MgRmFrZUZsb2F0VHJhbnNpdGlvbiA6IHB1YmxpYyBX
ZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VGbG9hdFRy
YW5zaXRpb24oZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBmcm9tLCBmbG9hdCB0bykKKyAgICAgICAg
OiBtX2R1cmF0aW9uKGR1cmF0aW9uKQorICAgICAgICAsIG1fZnJvbShmcm9tKQorICAgICAgICAs
IG1fdG8odG8pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZha2VGbG9hdFRyYW5zaXRp
b24oKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNv
bnN0CisgICAgeworICAgICAgICB0aW1lIC89IG1fZHVyYXRpb247CisgICAgICAgIGlmICh0aW1l
ID49IDEpCisgICAgICAgICAgICB0aW1lID0gMTsKKyAgICAgICAgcmV0dXJuICgxIC0gdGltZSkg
KiBtX2Zyb20gKyB0aW1lICogbV90bzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIGZsb2F0IG1fZnJvbTsKKyAg
ICBmbG9hdCBtX3RvOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMKKworI2VuZGlm
IC8vIENDQW5pbWF0aW9uVGVzY3RDb21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdC5jcHAKaW5kZXggM2Q1MGQwNmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5NWIwZjUzYi4u
NTJhYzM5ZjQ1ZGE2MGY0YzBjYTkyNGZlNTJlZTcxOTZhMjcwNWIwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QuY3BwCkBAIC0yNCwxNiArMjQsMTYgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFu
c2Zvcm1PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotCisj
aW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAK
IG5hbWVzcGFjZSB7CiAKQEAgLTQyLDc0ICs0MiwzOSBAQCBwdWJsaWM6CiAgICAgRmFrZUNvbnRy
b2xsZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwKSB7IH0KICAgICB2aXJ0dWFsIH5GYWtlQ29udHJv
bGxlckNsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNp
dHkgPSBvcGFjaXR5OyB9CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsg
bV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29u
dHJvbGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNv
bnRyb2xsZXIpCi0gICAgewotICAgICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250
cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsg
fQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Ci19OwotCi1jbGFzcyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKLXB1Ymxp
YzoKLSAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJh
dGlvbihkdXJhdGlvbikgeyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdl
dFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbnMoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZHVyYXRpb247
CisgICAgSW50U2l6ZSBtX2JvdW5kczsKIH07CiAKLWNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24g
OiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlRmxvYXRU
cmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAgICAg
IDogbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAgICAg
LCBtX3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVl
KGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwot
ICAgICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJl
dHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBmbG9hdCBt
X3RvOwotfTsKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgaWQsIHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMg
dGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQu
CiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0
aW9uKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRp
b25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAK
LSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9FUSgxLCBk
dW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiB9CkBAIC0xMTcsMjAgKzgyLDIxIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCiAvLyBUZXN0cyB0aGF0IHR3
byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNl
cXVlbmNlLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFs
UXVldWluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5p
bWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15
OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIo
CiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkp
OwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgp
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTEzOCwyMiArMTA0LDIzIEBAIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCiAvLyBUZXN0cyBpbnRl
cnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFuc2l0aW9uLgogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCiB7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgp
KTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3Vs
dHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKICAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMC41KTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAuNSwgcmVzdWx0cy5nZXQoKSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41KTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNU
X0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE2MSwyMyArMTI4LDI0IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogLy8gVGVzdHMgc2No
ZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9w
ZXJ0eSBpcyBmcmVlLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBT
Y2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIHsKKyAgICBPd25QdHI8Q0NB
bmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwog
ICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xs
ZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICAvLyBTaG91bGQgbm90IGhhdmUg
c3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwogICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0
ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQ
RUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE4NywyOSArMTU1LDMwIEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJv
cGVydHlJc0Jsb2NrZWQpCiAvLyBmb3IgYm90aCB0byBmaW5pc2gpLgogVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRp
bmcpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlv
blJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAg
ICAgLy8gQW5pbXMgd2l0aCBpZCAxIHNob3VsZCBib3RoIHN0YXJ0IG5vdy4KLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQo
KSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIC8vIFRoZSBvcGFjaXR5IGFu
aW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKICAg
ICAvLyBvZiBhbmltYXRpb25zIHdpdGggaWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJl
Y2F1c2Ugb2YgdGhlIGxlbmd0aAogICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCBy
ZXN1bHRzLmdldCgpKTsKICAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQg
dHJhbnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgLy8g
VGhlIHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBh
bmQgc2hvdWxkIGJlCiAgICAgLy8gZG9uZSBieSB0aW1lIDMKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDMpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgcmVzdWx0cy5nZXQoKSk7CiAgICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTIxNywyMiArMTg2LDIzIEBAIFRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldp
dGhBbkFuaW1XYWl0aW5nKQogLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3Rh
cnQgaW4gdGhlIGZ1dHVyZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgU2NoZWR1bGVBbmltYXRpb24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4g
cmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
PiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNy
ZWF0ZSgmZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGlu
Z0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250
cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNp
dHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKIH0KQEAgLTI0MCwyOCArMjEwLDI5IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiAvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFu
aW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5u
aW5nIGFuaW1hdGlvbi4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwg
U2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb24pCiB7CisgICAgT3du
UHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0
ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0
VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlv
biBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLjUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMiwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
IH0KQEAgLTI3MCwzNCArMjQxLDM1IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAvLyBhbmQg
dGhlcmUgaXMgeWV0IGFub3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KIFRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9u
SW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCiB7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgp
KTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250
cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAot
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
PiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGlt
ZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlv
bjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSks
IDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAwLjc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gRmly
c3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0
cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgcmVzdWx0cy5nZXQo
KSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSg0LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1
bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKIH0KQEAgLTMwNSw2NCArMjc3LDY2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdB
bmltCiAvLyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBj
b3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25S
ZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VD
b250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoMyk7CiAgICAgY29udHJv
bGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLjc1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjc1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgzLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5v
cGFjaXR5KCkpOwogCiAgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoNCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCByZXN1bHRzLmdldCgpKTsK
ICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogLy8gVGVzdCB0aGF0IGFu
IGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRl
ZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29w
aW5nKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRp
b25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAK
ICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwogICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgcmVzdWx0cy5nZXQoKSk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgy
NC4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1LCByZXN1bHRzLmdl
dCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQx
ODI0Ljc1LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwogCkBAIC0zNzUsODAgKzM0OSw2NiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKIC8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1
bWluZyB3b3JrIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBQYXVzZVJlc3VtZSkKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiBy
ZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVy
Q2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5h
ZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNv
bnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCByZXN1
bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpQYXVzZWQsIDAuNWYpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0KTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEwMjQsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2
ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwogCi0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQu
MjUsIHJlc3VsdHMuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MTAyNC41LCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwog
fQogCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdyb3Vw
ZWRBbmltYXRpb24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhD
Q0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBk
dW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9s
bGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9u
KDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVy
LT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgcmVzdWx0cy5nZXQoKSk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCByZXN1bHRzLmdldCgpKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYs
IGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3Rp
dmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkt
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgcmVzdWx0cy5nZXQo
KSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCByZXN1bHRzLmdldCgpKTsKICAgICBF
WFBFQ1RfVFJVRSghY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBhZGRpbmcg
YW4gYW5pbWF0aW9uIHRvIHRoZSBjb250cm9sbGVyIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBjYWxs
YmFjayBvbiB0aGUgY29udHJvbGxlciBjbGllbnQKLS8vIChpbiB0aGlzIGNhc2UsIGFkZGluZyB0
aGUgY29udHJvbGxlciB0byB0aGUgbGlzdCBvZiBhY3RpdmUgY29udHJvbGxlcikuCi1URVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIERpZEFjdGl2YXRlKQotewotICAgIEZh
a2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZHVt
bXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgRVhQRUNU
X0VRKHNpemVfdCgxKSwgZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotICAgIEVY
UEVDVF9FUShjb250cm9sbGVyLmdldCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThm
OGNiZDc1NzQwYWUyOTM5ZTIzY2MyMzUwYS4uYThmYTVlYTk2MTRjZDIxMmFjMWQxZWUzY2ZjMTE2
ZDZmZTI1ODU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVx
dWVzdFJlZHJhdyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbklt
cGxUaHJlYWQoKSB7IG1fZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRy
PENDQW5pbWF0aW9uUmVzdWx0cz4pIHsgfQogCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJl
ZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
aW5kZXggNDFmZTRmYjY1OWI5NDA1MWM2N2VhYmYzZWVhOWMwODQ2NzZlZWFiNC4uMGJiNzBmZGQ5
MjUwNzRjNTllZjVmNTg2YTVhMzI0OGRlNzBlMzU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkNDQW5p
bWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgpAQCAtMzQsNiArMzUsOCBAQAogI2luY2x1ZGUg
IlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUg
IldlYktpdC5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q1Njb3BlZFRocmVhZFByb3h5LmgiCkBAIC00NywxMSArNTAsMTEgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dFRlc3RzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAotbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gVXNlZCBieSB0ZXN0IHN0dWJzIHRvIG5vdGlmeSB0aGUgdGVzdCB3aGVu
IHNvbWV0aGluZyBpbnRlcmVzdGluZyBoYXBwZW5zLgogY2xhc3MgVGVzdEhvb2tzIHsKQEAgLTU5
LDYgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21w
bGV0ZU9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1l
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9CkBAIC05MCw2ICs5NCwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fdGVzdEhvb2tzLT5kcmF3TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsK
ICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3Vi
bGUgZnJhbWVCZWdpblRpbWVTZWNzKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZVNlY3MpOworICAgICAgICBtX3Rlc3RIb29r
cy0+YW5pbWF0ZUxheWVycyh0aGlzKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgTW9ja0xheWVy
VHJlZUhvc3RJbXBsKFRlc3RIb29rcyogdGVzdEhvb2tzLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0
aW5ncywgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQogICAgICAgICA6IENDTGF5
ZXJUcmVlSG9zdEltcGwoc2V0dGluZ3MsIGNsaWVudCkKQEAgLTEzMSw2ICsxNDIsMjIgQEAgcHJp
dmF0ZToKICAgICBUZXN0SG9va3MqIG1fdGVzdEhvb2tzOwogfTsKIAorLy8gQWRhcHRzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIGZvciB0ZXN0LgorY2xhc3MgTW9ja0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBhZGRB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXpl
LCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KQorICAgIHsKKyAgICAgICAgYWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEu
MCwgMS4wZiwgMC4wZikpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiBjbGFzcyBDb21wb3NpdG9yRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6IHB1YmxpYyBDb21wb3NpdG9yRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDb21w
b3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZz4gY3JlYXRl
KEF0dHJpYnV0ZXMgYXR0cnMpCkBAIC0yMjUsNyArMjUyLDkgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0ZXN0SG9va3Mp
IDogbV90ZXN0SG9va3ModGVzdEhvb2tzKSB7IH0KQEAgLTI1NSw2ICsyODQsMTEgQEAgcHVibGlj
OgogICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNo
U2V0TmVlZHNBbmltYXRlLCB0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHBvc3RBZGRBbmltYXRp
b25Ub01haW5UaHJlYWQoKQorICAgIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVy
VHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFkZEFuaW1hdGlvbiwgdGhpcyk7CisgICAgfQorCiAgICAg
dm9pZCBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKQogICAgIHsKICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29tbWl0
LCB0aGlzKTsKQEAgLTI3MCw3ICszMDQsNiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRDb21t
aXQsIHRoaXMpOwogICAgIH0KIAotCiAgICAgdm9pZCBwb3N0U2V0VmlzaWJsZVRvTWFpblRocmVh
ZChib29sIHZpc2libGUpCiAgICAgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKHZpc2libGUg
PyBDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldFZpc2libGUgOiBDQ0xheWVyVHJlZUhv
c3RUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSwgdGhpcyk7CkBAIC0zMTMsNiArMzQ2LDE1IEBA
IHByb3RlY3RlZDoKICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQW5p
bWF0ZSgpOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWRkQW5pbWF0aW9uKHZv
aWQqIHNlbGYpCisgICAgeworICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgIEND
TGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0
Kj4oc2VsZik7CisgICAgICBBU1NFUlQodGVzdCk7CisgICAgICBpZiAodGVzdC0+bV9sYXllclRy
ZWVIb3N0ICYmIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisgICAgICAgICAg
dGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtleWZyYW1l
VmFsdWVMaXN0KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAiIiwgMC4w
KTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZUFuZENv
bW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBA
IC00NjMsNiArNTA1LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgp
CiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBt
X2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBBU1NFUlRfVFJVRSht
X2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVy
VHJlZUhvc3QuZ2V0KCkpOworICAgIHJvb3RMYXllci0+c2V0QW5pbWF0aW9uQ29udHJvbGxlcihN
b2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CiAKICAgICBtX2JlZ2lubmlu
ZyA9IHRydWU7CiAgICAgYmVnaW5UZXN0KCk7CkBAIC03ODksNiArODMyLDQ0IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNBbmltYXRlSW5zaWRlQW5pbWF0aW9uQ2FsbGJhY2ss
IHJ1bk11bHRpVGhyZWFkCiAgICAgcnVuVGVzdFRocmVhZGVkKCk7CiB9CiAKKy8vIEFkZCBhIGxh
eWVyIGFuaW1hdGlvbiBhbmQgY29uZmlybSB0aGF0IENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1h
dGVMYXllcnMgZG9lcyBnZXQKKy8vIGNhbGxlZCBhbmQgY29udGludWVzIHRvIGdldCBjYWxsZWQu
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uIDogcHVibGljIENDTGF5ZXJU
cmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0
QWRkQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX251bUFuaW1hdGVzKDApCisgICAgICAgICwgbV9s
YXllclRyZWVIb3N0SW1wbCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmICghbV9udW1BbmltYXRl
cykgeworICAgICAgICAgICAgbV9udW1BbmltYXRlcysrOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCBtX251bUFuaW1h
dGVzOworICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9Owor
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbiwgcnVuTXVsdGlUaHJlYWQp
Cit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRl
c3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewog
cHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApp
bmRleCAxNTU3YTdkOTMyMmNjNmJlMjA2YmY1MGIwMGMwZjQ3MDYzYzU0NzhiLi44ODM4YmU5Njcx
MTlkYjViZTI3ZjVlOGVkZjE0YmM1MTk1YWY2MTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2
LDMxIEBACiAKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3Vs
dHMuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUg
ImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKK3Vz
aW5nIHRlc3Rpbmc6OlRlc3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJlZVN5
bmNocm9uaXplclRlc3QgOiBwdWJsaWMgVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKiBnZXRBbmltYXRpb25Db250cm9sbGVyKExheWVyQ2hyb21p
dW0qIGxheWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxheWVyLT5hbmltYXRpb25Db250cm9s
bGVyKCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2Ug
ewogCkBAIC0xMTYsNyArMTM0LDcgQEAgdm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXll
ckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCiB9CiAKIC8vIENvbnN0cnVj
dHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0cnlpbmcg
dG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxheWVycy4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMTI5LDcgKzE0Nyw3IEBAIFRFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQogfQogCiAvLyBDb25zdHJ1Y3RzIGEg
dmVyeSBzaW1wbGUgdHJlZSBhbmQgc3luY2hyb25pemVzIGl0IGF0dGVtcHRpbmcgdG8gcmV1c2Ug
c29tZSBsYXllcnMKLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1
c2luZ0xheWVycykKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVS
ZXVzaW5nTGF5ZXJzKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAg
IFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0xNTUsNyArMTczLDcgQEAg
VEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQog
ICAgIEVYUEVDVF9FUShzZWNvbmRDQ0xheWVySWQsIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3RbMF0p
OwogfQogCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3Bl
cnRpZXMpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJv
cGVydGllcykKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OwpAQCAtMTg3LDcgKzIwNSw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1w
bGVUcmVlQW5kUHJvcGVydGllcykKICAgICBFWFBFQ1RfRVEoc2Vjb25kQ2hpbGRCb3VuZHMuaGVp
Z2h0KCksIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcy5oZWlnaHQoKSk7CiB9CiAKLVRFU1QoVHJl
ZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCitU
RVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxD
aGFuZ2UpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9y
PGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKQEAgLTIzNCw3ICsyNTIsNyBAQCBURVNUKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQog
fQogCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSwgc3luY2hyb25pemVzIGl0LCB0
aGVuIHN5bmNocm9uaXplcyB0byBhIHRvdGFsbHkgbmV3IHRyZWUuIEFsbCBsYXllcnMgZnJvbSB0
aGUgb2xkIHRyZWUgc2hvdWxkIGJlIGRlbGV0ZWQuCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0
LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0y
NjUsNyArMjgzLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVU
aGVuRGVzdHJveSkKIH0KIAogLy8gQ29uc3RydWN0cytzeW5jcyBhIHRyZWUgd2l0aCBtYXNrLCBy
ZXBsaWNhLCBhbmQgcmVwbGljYSBtYXNrIGxheWVycy4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQorVEVTVF9GKFRyZWVTeW5j
aHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykKIHsKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMzA3LDUgKzMy
NSw4NSBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBs
aWNhTWFza0xheWVycykKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogfQogCitURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNOZXdBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKworICAgIC8vIEFk
ZCBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQgY29udHJvbGxlci4KKyAgICBnZXRBbmltYXRpb25D
b250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5k
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlv
bkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKK30KKworVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJU
ZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGllcykKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIDApOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5n
ZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3Qu
Z2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250
cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2
YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFj
dGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkp
OworCisgICAgLy8gUHVzaCBhbiBhbmltYXRpb24gcHJvcGVydHkgY2hhbmdlIHRvIHRoZSBpbXBs
IHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBhbiBhbmltYXRpb24gdG8gYmUgYWRkZWQpLgorICAg
IGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1h
dGlvbnMoKVswXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMCk7Cisg
ICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhs
YXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNU
X1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFu
aW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0Fi
b3J0ZWRBbmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9s
bGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZl
KCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJUcmVlUm9v
dCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVl
Um9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFib3J0IGFuIGFuaW1hdGlvbiBmcm9t
IHRoZSBtYWluIHRocmVhZC4KKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJv
b3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuY2xlYXIoKTsKKyAgICBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9v
dC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25D
b250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworfQorCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNDb21wbGV0ZWRB
bmltYXRpb24pCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxh
eWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgp
KTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFi
aWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKwor
ICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgYW5pbWF0aW9uIHVudGlsIGl0IGlzIGZpbmlzaGVkLiBB
dCB0aGUgbmV4dCBzeW5jLCB0aGUgbWFpbiB0aHJlYWQncyBhbmltYXRpb24gc2hvdWxkIGJlIGNs
ZWFyZWQuCisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlv
blJlc3VsdHM6OmNyZWF0ZSgpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+YW5pbWF0ZSgwLCByZXN1bHRzLmdldCgpKTsKKyAgICBjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0ZSgyLCByZXN1bHRzLmdldCgpKTsKKworICAg
IEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQ
RUNUX0VRKHNpemVfdCgxKSwgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290Lmdl
dCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisKKyAgICBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5n
ZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBnZXRBbmltYXRpb25Db250cm9sbGVy
KGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKK30KIAog
fSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126515</attachid>
            <date>2012-02-10 07:58:00 -0800</date>
            <delta_ts>2012-02-10 11:59:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120210105749.patch</filename>
            <type>text/plain</type>
            <size>115011</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE5MzI0OWZkMzA2OTQ1
ODFmNjY1YTIwOWFkZDcyNTI3MTk5NTIyMi4uMmM1NTg5MTgyZThlOTIwMjUxNGEwMDQzZWJiMDM2
ZGRiNGFlZGM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0wMyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtQ2hyb21pdW1MYXllckFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRD
b250ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhh
c1J1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBs
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRp
b25TaWduYXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDQW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHQ6OkNDQW5pbWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5p
bWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvblJlc3VsdHM6On5DQ0FuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHRzOjpzdGFydGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OkNDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEy
LTAyLTA5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3Zl
IFRyZWVPcmRlckl0ZXJhdG9yIGFuZCBpdGVyYXRlIG92ZXIgdGhlIGNoaWxkIGJveGVzIGRpcmVj
dGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjNGNhNGMwZWVhYmY0MjQwNzVhZjk2
ZDFiMDliYThmMmI0YzcyMDhjLi5kYjJlNzcxYzIyZTg0YTQxMGVmYTBiYWY4OTI4YWNhN2ExZDVl
NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAy
LTAzICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gUGx1bWIgZnJvbSBHcmFwaGljc0xheWVyIHRvIHRoZSBjYyB0aHJlYWQgYW5pbWF0aW9u
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1
ODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0
cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXRUZXN0cyk6
CisgICAgICAgIChGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjpjbG9uZSk6
CisgICAgICAgIChGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6fkZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRy
YW5zaXRpb246OmNsb25lKToKKyAgICAgICAgKEZha2VGbG9hdFRyYW5zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24p
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246On5GYWtlRmxvYXRU
cmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpk
dXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6Z2V0
VmFsdWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmNsb25l
KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNw
cDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJvbGxlckNsaWVudDo6aWQpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkZha2VDb250cm9sbGVyQ2xpZW50Ojpib3VuZHMpOgorICAgICAg
ICAoRmFrZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICog
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdDo6cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1w
bFRocmVhZCk6CisgICAgICAgICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUcmVlU3luY2hyb25pemVyVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyVGVzdDo6Z2V0QW5pbWF0aW9uQ29udHJvbGxlcik6
CisKIDIwMTItMDItMDkgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBbQ2hyb21pdW1dIEFkZCBjaHJvbWl1bS1zdHlsZSB0cmFjaW5nIHN1cHBvcnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCA5MGNkOGUxNDhlNjY5YWVmYzNhMjVlMTg4Y2VlNDZiZGFlOGY2NWYxLi43ODI0
ZGQxYjJmM2I3MzkzZmU1YzVjYzk3MTAzYjJkYTI0MDc1MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zMjI1LDYgKzMyMjUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdR
dWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLApAQCAtMzI0Miw2ICszMjQzLDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1Vw
RGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3
ZTUxZTI0YWVlZDMyYWZlOTcwZS4uMTFmYTQ2Yjc5MjEwMmQ1YmFiZTk0ZjIwZWJlMWZlOWU4NTcy
NzQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyAr
MTI0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0gICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAor
ICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0K
IApAQCAtMzY5LDYgKzM2OSwzNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRh
dGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0
aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXll
ci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1l
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRv
dWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAg
bV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6bGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCit7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlz
LCBzdGFydFRpbWUpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFu
Z2VkID0gZmFsc2U7CkBAIC0zODMsMTIgKzQxNCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVu
Q2hhbmdlZCA9IHRydWU7Ci0gIAorCiAgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxh
eWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlQ2hpbGRMaXN0LgogICAgICAgICAgICAgbV9j
b250ZW50c0xheWVyID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRy
ZW5DaGFuZ2VkKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KQEAgLTUzNyw3ICs1Njgs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgp
CiAgICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41Zikp
OwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXll
ci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2V0IHRo
ZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhl
IG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4KICAgICAgICAgbV9sYXllci0+c2V0T3Bh
Y2l0eSgxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCAzOWIzNjdi
OWQzZjBlMmY4M2EzMjBmOTAyYjU0MDYyZmI5MzFlODY2Li4yYjc4NTAxODZlYTFjOWUwOTQ2ZGEz
NzMyYzUzNTJlY2RjOWVjMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApA
QCAtOTIsNiArOTIsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
TWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2Fu
dmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmlt
YXRpb24qLCBjb25zdCBTdHJpbmcmLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2
b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91
YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKKyAgICB2
b2lkIGxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKKwogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDhkMGZlMDNiNjEzYjI0ODE3MGU4ZjM2MjAwZDE0MGJlMDkxZjQ0ODMuLjFl
NWUwNmM1MTJkOWJlNDg1YjE3MWIzYjdmNzA1NzE3YzJjZjFhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpZiBVU0UoU0tJQSkKQEAgLTU5LDYgKzYwLDcgQEAg
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxheShmYWxz
ZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQor
ICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUoKSkKICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKICAgICAsIG1fYW5jaG9yUG9pbnQo
MC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQpAQCAtOTIsNiAr
OTQsMzggQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbENo
aWxkcmVuKCk7CiB9CiAKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBtX2FuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9u
TmFtZSwgdGltZU9mZnNldCk7CisgICAgaWYgKGFkZGVkQW5pbWF0aW9uKQorICAgICAgICBzZXRO
ZWVkc0NvbW1pdCgpOworICAgIHJldHVybiBhZGRlZEFuaW1hdGlvbjsKK30KKwordm9pZCBMYXll
ckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmlt
YXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsK
K30KKwordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0
aW9uKGFuaW1hdGlvbk5hbWUpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7CisgICAgbV9hbmlt
YXRpb25Db250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0Nv
bW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQorewor
ICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIHNldE5l
ZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVk
Q29udGVudChib29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBv
c2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsKQEAgLTUwNSw2ICs1MzksMTEg
QEAgYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uQ29udHJvbGxl
cihQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9s
bGVyKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlciA9IGFuaW1hdGlvbkNvbnRyb2xsZXI7
Cit9CisKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0
ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCB2b2lkKikK
IHsKICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQg
dG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21p
dW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGEwNzU4MTMxZmJmZTIzNDY5MGIyNzMzYWVjNmJh
MmY4YTE0ZDBjYTcuLjA4Y2FmZGQ1OTg2ODViNzExMzViMDkzNzIwYTNkZDQ5NzQxOWU1NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENDTGF5ZXJJbXBs
OwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKQEAgLTYw
LDcgKzYxLDYgQEAgY2xhc3MgUmVnaW9uOwogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9taXVt
PiB7Ci0gICAgZnJpZW5kIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjcmVhdGUoKTsKIApAQCAtMjExLDcgKzIx
MSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNSZXNlcnZlVGV4dHVyZXMoYm9vbCBh
bHdheXNSZXNlcnZlVGV4dHVyZXMpIHsgbV9hbHdheXNSZXNlcnZlVGV4dHVyZXMgPSBhbHdheXNS
ZXNlcnZlVGV4dHVyZXM7IH0KICAgICBib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcygpIGNvbnN0
IHsgcmV0dXJuIG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAKKyAgICBib29sIGFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNv
bnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVP
ZmZzZXQpOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKworICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91
YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCiBwcm90ZWN0ZWQ6Cisg
ICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOworICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0OworICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CisgICAgZnJp
ZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CisgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJv
bml6ZXJUZXN0OworCiAgICAgTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgYm9vbCBpc1BhaW50ZWRB
eGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7CkBAIC0yMjksOCArMjQyLDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fbWFza0xheWVyOwogCi0gICAgZnJpZW5k
IGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwog
ICAgIC8vIENvbnN0cnVjdHMgYSBDQ0xheWVySW1wbCBvZiB0aGUgY29ycmVjdCBydW50aW1lIHR5
cGUgZm9yIHRoaXMgTGF5ZXJDaHJvbWl1bSB0eXBlLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKICAgICBpbnQgbV9sYXllcklkOwpAQCAt
MjM5LDEwICsyNTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KExheWVyQ2hyb21p
dW0qKTsKICAgICBib29sIGhhc0FuY2VzdG9yKExheWVyQ2hyb21pdW0qKSBjb25zdDsKIAotICAg
IHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jaGls
ZHJlbi5zaXplKCk7Ci0gICAgfQorICAgIHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0
aGUgY2hpbGQgb3IgLTEgaWYgbm90IGZvdW5kLgogICAgIGludCBpbmRleE9mQ2hpbGQoY29uc3Qg
TGF5ZXJDaHJvbWl1bSopOwpAQCAtMjUwLDExICsyNTgsMTYgQEAgcHJpdmF0ZToKICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21QYXJlbnQuCiAgICAgdm9p
ZCByZW1vdmVDaGlsZChMYXllckNocm9taXVtKik7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJv
bGxlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPik7CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gbV9jaGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAog
ICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAg
ICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBk
MGZkMGNlNTIzZDYzODg0YmU5MzJlMWJkNDE2NTgyZjI1NzYyZTQwLi5kZTFjZjhhNjk0YmExYjNm
ZjFjYWYxNzg0NmZkYjFkZTU2MjE4NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC03NCw2ICs3NSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxz
ZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXIt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+c3luY2hyb25pemVBbmltYXRpb25zKGNjTGF5ZXJJbXBs
LT5hbmltYXRpb25Db250cm9sbGVyKCkpOworCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
Y2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVj
MGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYS4uMDAwOWNjODg5ODNhMDY1OWIzOGE2OTNhOTY5Y2E0
YzA3NzY2NTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtNDQs
NiArNDQsOCBAQCBDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1h
dGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisKIHZvaWQgQ0NBY3RpdmVBbmltYXRpb246
OnNldFJ1blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQogewogICAgIGlmIChy
dW5TdGF0ZSA9PSBSdW5uaW5nICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQpAQCAtNjMsNiArNjUs
MjEgQEAgYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBj
b25zdAogICAgICAgICAmJiBtX2l0ZXJhdGlvbnMgKiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlv
bigpIDw9IHRpbWUgLSBzdGFydFRpbWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwogfQogCitib29s
IENDQWN0aXZlQW5pbWF0aW9uOjppc1dhaXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3J1
blN0YXRlID09IFdhaXRpbmdGb3JOZXh0VGljaworICAgICAgICB8fCBtX3J1blN0YXRlID09IFdh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0
aW5nRm9yU3RhcnRUaW1lOworfQorCitib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdP
ckhhc1J1bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gUnVubmluZworICAg
ICAgICB8fCBtX3J1blN0YXRlID09IEZpbmlzaGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0g
QWJvcnRlZAorICAgICAgICB8fCBtX3J1blN0YXRlID09IFBhdXNlZDsKK30KKwogZG91YmxlIEND
QWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBj
b25zdAogewogICAgIGRvdWJsZSB0cmltbWVkID0gbm93OwpAQCAtOTUsNCArMTEyLDM2IEBAIGRv
dWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91Ymxl
IG5vdykgY29uc3QKICAgICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5k
dXJhdGlvbigpKTsKIH0KIAorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVB
bmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0Cit7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9h
bmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAg
ICB0b1JldHVybi0+bV9ydW5TdGF0ZSA9IG1fcnVuU3RhdGU7CisgICAgdG9SZXR1cm4tPm1faXRl
cmF0aW9ucyA9IG1faXRlcmF0aW9uczsKKyAgICB0b1JldHVybi0+bV9zdGFydFRpbWUgPSBtX3N0
YXJ0VGltZTsKKyAgICB0b1JldHVybi0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZTsKKyAgICB0
b1JldHVybi0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICByZXR1
cm4gdG9SZXR1cm4ucmVsZWFzZSgpOworfQorCit2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXMoQ0NBY3RpdmVBbmltYXRpb24qIG90aGVyKQoreworICAgIC8vIEl0
IGlzIHBvc3NpYmxlIGZvciB0aGUgaW1wbCB0aHJlYWQgdG8gaW5pdGlhdGUgYSBydW4gc3RhdGUg
Y2hhbmdlLgorICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gd2FzIHdhaXRp
bmcgZm9yIGEgZnV0dXJlIGV2ZW50IHRvIHRha2UKKyAgICAvLyBwbGFjZSwgYW5kIHRoZSBldmVu
dCBoYXMgdGFrZW4gcGxhY2UuIEluIHRoYXQgY2FzZSwgd2Ugd2FudCAndGhpcycgdG8KKyAgICAv
LyBhc3N1bWUgdGhlIGltcGwgdGhyZWFkJ3MgcnVuIHN0YXRlIGFuZCBzdGFydCB0aW1lLgorICAg
IGlmIChpc1dhaXRpbmcoKSAmJiBvdGhlci0+aXNSdW5uaW5nT3JIYXNSdW4oKSkgeworICAgICAg
ICBtX3J1blN0YXRlID0gb3RoZXItPm1fcnVuU3RhdGU7CisgICAgICAgIG1fc3RhcnRUaW1lID0g
b3RoZXItPm1fc3RhcnRUaW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIG90aGVyLT5tX3J1blN0
YXRlID0gbV9ydW5TdGF0ZTsKKyAgICAgICAgb3RoZXItPm1fc3RhcnRUaW1lID0gbV9zdGFydFRp
bWU7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIGluIHN0YXRlIHJlbGF0ZWQgdG8gaXRlcmF0aW9u
cyBhbmQgcGF1c2UgaXMgYWx3YXlzIGluaXRpYXRlZCBmcm9tCisgICAgLy8gdGhlIG1haW4gdGhy
ZWFkLCBzbyBpdCBpcyBzYWZlIHRvIHB1c2ggcHJvcGVydGllcyBpbiB0aGF0IGRpcmVjdGlvbi4K
KyAgICBvdGhlci0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIG90aGVyLT5tX3Bh
dXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAgIG90aGVyLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1f
dG90YWxQYXVzZWRUaW1lOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaAppbmRleCBjMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2MDRlZWU5
ZmJhZDBhM2QxLi42OTQ0OGU1M2IyOTVlZWI0OGQ4MTAzMmEzNDk4M2I2ZjA3ZTg0MDNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKQEAgLTI1LDI0ICsyNSwyNyBAQAogI2lmbmRl
ZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKIAorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBDQ0FuaW1hdGlvbkN1cnZlOwotCiAvLyBBIENDQWN0aXZlQW5pbWF0aW9uLCBjb250YWlucyBh
bGwgdGhlIHN0YXRlIHJlcXVpcmVkIHRvIHBsYXkgYSBDQ0FuaW1hdGlvbkN1cnZlLgogLy8gU3Bl
Y2lmaWNhbGx5LCB0aGUgYWZmZWN0ZWQgcHJvcGVydHksIHRoZSBydW4gc3RhdGUgKHBhdXNlZCwg
ZmluaXNoZWQsIGV0Yy4pLAogLy8gbG9vcCBjb3VudCwgbGFzdCBwYXVzZSB0aW1lLCBhbmQgdGhl
IHRvdGFsIHRpbWUgc3BlbnQgcGF1c2VkLgogY2xhc3MgQ0NBY3RpdmVBbmltYXRpb24geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDQWN0aXZlQW5pbWF0aW9uKTsKIHB1YmxpYzoKICAgICAv
LyBBbmltYXRpb25zIHRoYXQgbXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBl
ZCcgYW5kIGhhdmUgdGhlIHNhbWUgR3JvdXBJRAogICAgIC8vIEdyb3VwZWQgYW5pbWF0aW9ucyBh
cmUgZ3VhcmFudGVlZCB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBubyBvdGhlciBhbmlt
YXRpb25zCiAgICAgLy8gbWF5IGFuaW1hdGUgYW55IG9mIHRoZSBncm91cCdzIHRhcmdldCBwcm9w
ZXJ0aWVzIHVudGlsIGFsbCBhbmltYXRpb25zIGluIHRoZQogICAgIC8vIGdyb3VwIGhhdmUgZmlu
aXNoZWQgYW5pbWF0aW5nLiBOb3RlOiBhbiBhY3RpdmUgYW5pbWF0aW9uJ3MgZ3JvdXAgaWQgYW5k
IHRhcmdldAogICAgIC8vIHByb3BlcnR5IHVuaXF1ZWx5IGlkZW50aWZ5IHRoYXQgYW5pbWF0aW9u
LgotICAgIHR5cGVkZWYgaW50IEdyb3VwSUQ7CisgICAgdHlwZWRlZiBzaXplX3QgR3JvdXBJRDsK
IAogICAgIC8vIEFuaW1hdGlvbnMgYmVnaW4gaW4gb25lIG9mIHRoZSAnd2FpdGluZycgc3RhdGVz
LiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHRpY2sKICAgICAvLyB3aWxsIHN0YXJ0
IHRoZSBuZXh0IHRpbWUgdGhlIGNvbnRyb2xsZXIgYW5pbWF0ZXMuIEFuaW1hdGlvbnMgd2FpdGlu
ZyBmb3IgdGFyZ2V0CkBAIC02OCwxMiArNzEsMjAgQEAgcHVibGljOgogICAgICAgICBPcGFjaXR5
CiAgICAgfTsKIAorICAgIHN0cnVjdCBBbmltYXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmlt
YXRpb25TaWduYXR1cmUoR3JvdXBJRCBncm91cElELCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9w
ZXJ0eSkKKyAgICAgICAgICAgIDogZ3JvdXBJRChncm91cElEKQorICAgICAgICAgICAgLCB0YXJn
ZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSkgeyB9CisgICAgICAgIEdyb3VwSUQgZ3JvdXBJRDsK
KyAgICAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHk7CisgICAgfTsKKwogICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5p
bWF0aW9uKGN1cnZlLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsgfQorICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0
aW9uKCk7CiAKICAgICBHcm91cElEIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cDsgfQog
ICAgIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRQcm9wZXJ0eTsgfQpAQCAtOTMsNiArMTA0LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaW5p
c2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdDsKICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7
IHJldHVybiBtX3J1blN0YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZDsg
fQogCisgICAgYm9vbCBpc1dhaXRpbmcoKSBjb25zdDsKKyAgICBib29sIGlzUnVubmluZ09ySGFz
UnVuKCkgY29uc3Q7CisKICAgICBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsg
cmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KICAgICBjb25zdCBDQ0FuaW1hdGlvbkN1
cnZlKiBhbmltYXRpb25DdXJ2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0
KCk7IH0KIApAQCAtMTAwLDYgKzExNCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9u
cywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAg
ICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0Owog
CisgICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1h
dGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAgUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiopOworCiBwcml2
YXRlOgogICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4s
IEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
CmluZGV4IGRlOTdlMzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMuLjUzM2FiYWZl
ZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1NTE2NjdlZTI0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmgKQEAgLTI1LDYgKzI1LDEwIEBACiAjaWZuZGVmIENDQW5pbWF0aW9uQ3VydmVfaAog
I2RlZmluZSBDQ0FuaW1hdGlvbkN1cnZlX2gKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENDRmxvYXRBbmltYXRpb25DdXJ2ZTsKQEAgLTQxLDYgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgPSAwOwogCiAgICAgY29uc3QgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlKiB0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKICAgICBjb25zdCBDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7
CkBAIC02MCw3ICs2NSw3IEBAIGNsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSgpIHsgfQogCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdl
dFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdCA9
IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZp
cnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
blJlc3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uUmVzdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyYzdiYzQ5ZmJlNzM3NmEzMTUwOTcw
MzM2N2E2MjM0ZjQwNDJmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uUmVzdWx0c19oCisjZGVm
aW5lIENDQW5pbWF0aW9uUmVzdWx0c19oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgdG8g
aW5kaWNhdGUgdGhhdCBhbiBhbmltYXRpb24gZXZlbnQgaGFzIHRha2VuIHBsYWNlIG9uIHRoZSBn
aXZlbiBsYXllciBhdCB0aGUgZ2l2ZW4gdGltZS4KK3N0cnVjdCBDQ0FuaW1hdGlvblJlc3VsdCB7
CisgICAgQ0NBbmltYXRpb25SZXN1bHQoaW50IGxheWVySUQsIGRvdWJsZSB0aW1lKQorICAgICAg
ICA6IGxheWVySUQobGF5ZXJJRCkKKyAgICAgICAgLCB0aW1lKHRpbWUpIHsgfQorICAgIGludCBs
YXllcklEOworICAgIGRvdWJsZSB0aW1lOworfTsKKworLy8gVGhpcyBpcyB1c2VkIHRvIGNvbW11
bmljYXRlIGJhY2sgdG8gbWFpbiBhbmltYXRpb24gZW5naW5lIHRoYXQgYWNjZWxlcmF0ZWQgYW5p
bWF0aW9ucyBoYXZlIHN0YXJ0ZWQuCitjbGFzcyBDQ0FuaW1hdGlvblJlc3VsdHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25SZXN1bHRzKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvblJlc3VsdHMoKSB7IH0KKworICAgIFZlY3Rv
cjxDQ0FuaW1hdGlvblJlc3VsdD4mIHN0YXJ0ZWRBbmltYXRpb25zKCkgeyByZXR1cm4gbV9zdGFy
dGVkQW5pbWF0aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxDQ0FuaW1hdGlvblJlc3VsdD4mIHN0
YXRlZEFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ZWRBbmltYXRpb25zOyB9CisK
K3ByaXZhdGU6CisgICAgQ0NBbmltYXRpb25SZXN1bHRzKCkgeyB9CisKKyAgICBWZWN0b3I8Q0NB
bmltYXRpb25SZXN1bHQ+IG1fc3RhcnRlZEFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYTU1
MDM4N2UxNjc1OGVmMjE4NGU0ZTIyN2E1ODBjODIyNjAyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlz
dAorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJv
eFNpemUqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworfQorCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sK
K30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygp
Cit7Cit9CisKKy8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBv
biB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAorLy8gYXJlIGtlcHQgaW4gc3lu
Yy4KK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9u
cyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAg
IHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoY29udHJvbGxlckltcGwpOwor
ICAgIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBy
ZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAg
ICBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhjb250cm9sbGVySW1wbCk7Cit9CisKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxU
aHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sK
KyAgICAvLyBBbnkgYW5pbWF0aW9ucyBmaW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJl
bW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQncyBjb2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsg
KytpKQorICAgICAgICByZW1vdmUoY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25z
W2ldLmdyb3VwSUQsIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJn
ZXRQcm9wZXJ0eSk7CisgICAgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmlt
YXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJv
bGxlckltcGwpCit7CisgICAgLy8gQW55IG5ldyBhbmltYXRpb25zIG93bmVkIGJ5IHRoZSBtYWlu
IHRocmVhZCdzIGNvbnRyb2xsZXIgYXJlIGNsb25lZCBhbmQgYWRkZSB0byB0aGUgaW1wbCB0aHJl
YWQncyBjb250cm9sbGVyLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghY29udHJvbGxlckltcGwtPmdldEFj
dGl2ZUFuaW1hdGlvbihtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpCisgICAgICAgICAgICBjb250cm9sbGVySW1w
bC0+YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAg
IH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9u
c0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNv
bnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9u
cyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRp
b24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJh
bnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsp
IHsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRp
b24oY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgY29udHJv
bGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAg
ICAgIGlmICghY3VycmVudCkKKyAgICAgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFu
aW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAg
fQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJv
cGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQor
eworICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhl
cmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFj
aCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVj
cmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVz
cyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50SW1wbCA9IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2
ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50
ID0gZ2V0QWN0aXZlQW5pbWF0aW9uKGN1cnJlbnRJbXBsLT5ncm91cCgpLCBjdXJyZW50SW1wbC0+
dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICAgICAgaWYg
KGN1cnJlbnQpCisgICAgICAgICAgICBjdXJyZW50LT5zeW5jaHJvbml6ZVByb3BlcnRpZXMoY3Vy
cmVudEltcGwpOworICAgIH0KK30KKworQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3Vw
SUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBn
cm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0
UHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpy
ZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9h
Y3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkgeworICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNhOTYwN2U5ODE0
NmE2YmQ2NTUwM2U3NGYxMDRlYTM4MGM0MTg3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQW5pbWF0aW9uOworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Oworc3RydWN0IEludFNpemU7CitjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKKworY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIFRo
ZXNlIGFyZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25z
dCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zm
c2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFu
aW1hdGlvbnMoKTsKKworICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5p
bWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAorICAgIC8vIGFy
ZSBrZXB0IGluIHN5bmMuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2Yg
dGhlIGltcGwgdGhyZWFkIGNvbnRyb2xsZXIuCisgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlv
bnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisKKyAgICAvLyBUaGlzIGlzIGZv
ciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gPiYgYWN0aXZlQW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uczsg
fQorCitwcm90ZWN0ZWQ6CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAgdm9pZCBwdXNoTmV3QW5pbWF0
aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2
b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKik7CisgICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBn
ZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgdm9pZCByZW1vdmUoQ0NBY3RpdmVBbmltYXRp
b246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisKKyAgICBW
ZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuY3BwCmluZGV4IGJiY2E5Y2JkOTA1NWUxZWMxM2NjMGE5NzQ2MzljNWY5NzA4
ODA5OTIuLjM5ZDFiZGMwODZmOGQxY2NmYjRiNDcyMjY2YTBiOWE0ODcwNWU2N2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApA
QCAtMjYsNyArMjYsOSBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCwyMiArNDYsMjIgQEAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NM
YXllckFuaW1hdGlvbkMKIHsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpIHsgfQorCit2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVC
ZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGZyYW1lQmVnaW5UaW1lU2Vjcyk7Ci0gICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShmcmFtZUJlZ2luVGltZVNlY3MpOwotICAg
IHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRp
bWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdp
blRpbWVTZWNzLCByZXN1bHRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lKGZyYW1lQmVnaW5UaW1lU2VjcywgcmVzdWx0cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOwog
ICAgIHJlc29sdmVDb25mbGljdHMoZnJhbWVCZWdpblRpbWVTZWNzKTsKICAgICB0aWNrQW5pbWF0
aW9ucyhmcmFtZUJlZ2luVGltZVNlY3MpOwogICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7
Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJl
Z2luVGltZVNlY3MpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFi
aWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzKTsKIH0KIAogdm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBh
bmltKQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3Rp
dmF0ZSh0aGlzKTsKIH0KIAogQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
IGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCkBAIC04
MCwyNSArODIsMjggQEAgYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0Fj
dGl2ZUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVz
dWx0cyYgcmVzdWx0cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsK
ICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgcmVzdWx0cy5zdGFydGVkQW5pbWF0
aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3VsdChtX2NsaWVudC0+aWQoKSwgbm93KSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3cpCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1hdGlvblJlc3VsdHMmIHJlc3VsdHMpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnN0YXJ0VGltZSgpIDw9IG5vdykKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG5vdykgewogICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVu
bmluZywgbm93KTsKKyAgICAgICAgICAgIHJlc3VsdHMuc3RhcnRlZEFuaW1hdGlvbnMoKS5hcHBl
bmQoQ0NBbmltYXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5vdykpOworICAgICAgICB9CiAg
ICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93KQordm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzJiByZXN1bHRzKQog
ewogICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgogICAgIFRhcmdldFBy
b3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7CkBAIC0xMzAsNiArMTM1LDcgQEAgdm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHkKICAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbm93KTsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuc3RhcnRl
ZEFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBbmltYXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5v
dykpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKQEAgLTE3OCw5ICsxODQs
MTAgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRB
bmltYXRpb25zKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKQorICAgICAgICBpZiAo
YWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIG1fZmluaXNoZWRB
bmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25hdHVyZSgpKTsKICAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpKys7CiAgICAgfQogfQpAQCAtMTk0LDE0ICsyMDEs
MTEgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25z
KGRvdWJsZSBub3cpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybTogewogICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUq
IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5hbmltYXRp
b25DdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOworICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0
cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChub3cpKQogICAgICAgICAgICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5p
c2hlZCwgbm93KTsKIAotICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRl
IG9yIHJlbGF0aXZlLiBBYnNvbHV0ZSBmb3Igbm93LgotICAgICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRvQXBwbHk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShG
bG9hdFNpemUoKSwgdG9BcHBseSk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5z
Zm9ybSh0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggMWFk
MjIzZGJhODIzYTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uYTg0ZmMzOTllOGVkZDYwMjM1
MmNlMDhkZWMxYmE2NTZlYmRiNjUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTI5LDEyICsyOSwxNCBAQAogI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNzIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKQEAgLTQ0LDE4ICs0NiwyMiBAQCBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KCkgY29uc3QgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCop
OwogCi0gICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHZp
cnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpOworCisgICAgdm9pZCBhbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVzdWx0cyYpOwogCiAg
ICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogCkBAIC02NywxMiAr
NzMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwor
CiAgICAgLy8gVGhlIGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KICAgICBleHBsaWNp
dCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsQ2xpZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0
VGljayhkb3VibGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWUoZG91YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVzdWx0cyYpOworICAgIHZv
aWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1h
dGlvblJlc3VsdHMmKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzJik7CiAgICAgdm9pZCBy
ZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOwogICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFuaW1h
dGlvbnMoKTsKIApAQCAtODAsNiArODgsNyBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8T3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKKyAgICBWZWN0b3I8Q0NBY3Rp
dmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZT4gbV9maW5pc2hlZEFuaW1hdGlvbnM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXgg
ODFmOTcxMmUwZmFjMGY5ODEyODg4ZGEyZTczZmYzM2VmZDYwNjVhNC4uZTg5Mjk4ZTFmM2QzM2E4
YTBkZGIyNDE2MzQ3NDYxNzJmM2MxNDE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYxLDYgKzYyLDcgQEAg
Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZHJhd09wYWNpdHkoMCkK
ICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9kZWJ1Z0JvcmRl
cldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDdiYWUyMDE3NDRiNGVjMjA4
MTRmMzA1MjhhYjZiY2YyZDJkODc5MmQuLjQzYmZiYTdlZTg3M2YwMzAwMzZmNDIxOWIxMjJmYmEw
MzZkMDI1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlICJjYy9DQ1Jl
bmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MCwxNiArNDEsMjYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNs
YXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMg
UmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVm
Q291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBj
cmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVy
SW1wbChpZCkpOwogICAgIH0KKworICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAg
ICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICB2aXJ0dWFsIH5DQ0xheWVy
SW1wbCgpOwogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCkBAIC02NSw4ICs3Niw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CiAg
ICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYUxh
eWVyLmdldCgpOyB9CiAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0K
LQogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdJRDsgfQogI2VuZGlmCkBAIC0xMDcsOSArMTE2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7
IH0KIAotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgZmxvYXQgb3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uOyB9CiAKQEAgLTEyNSw5ICsxMzEsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KICAgICB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KICAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApAQCAtMTUwLDcgKzE1
Myw2IEBAIHB1YmxpYzoKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRh
cmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAotICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6
ZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudEJvdW5kczsgfQpAQCAtMTk5LDYgKzIwMSw4IEBAIHB1YmxpYzoKICAgICBib29s
IGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb3BlcnR5Q2hh
bmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAor
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogYW5pbWF0aW9uQ29udHJvbGxlcigp
IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzA2LDYgKzMxMCw5IEBAIHByaXZh
dGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1
cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMg
YW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisKKyAgICAv
LyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbD4gbV9hbmltYXRpb25Db250cm9sbGVyOwogfTsKIAogdm9p
ZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZpcnN0
LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0
ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI4MjMwMGIxMDdjODhh
YjUxYTMyNTcyMDhjYjI4N2M3MTUzMDdjNmQuLjQ0NzNjNWNmNjk0ZDEzNGNhNjA4MzczNWFjODMy
Mjk2ZWJkYjAwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNp
bmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1
bHRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgpAQCAtMTcxLDkgKzE3MiwxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0
T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYg
b25lIGV4aXN0cyBhdCBhbGwuLi4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RM
YXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7
Ci0gICAgZWxzZQorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKCk7Cisg
ICAgfSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAKICAgICBob3N0
SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CkBAIC0yNTksNiArMjYx
LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdygpCiAgICAgICAgIG1f
Y2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c2V0QW5pbWF0aW9uUmVzdWx0cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0
cykKK3sKKyAgICBBU1NFUlQoQ0NUaHJlYWRQcm94eTo6aXNNYWluVGhyZWFkKCkpOworICAgIC8v
IEltcGxlbWVudGF0ZWQgaXMgY29taW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzc2NDYKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQ
YXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikKIHsKICAgICBpZiAobV9yb290TGF5
ZXIgPT0gcm9vdExheWVyKQpAQCAtMzQyLDkgKzM1MCwxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhv
c3RJbQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmIChyb290TGF5ZXIoKSkKKworICAgIGlmIChyb290TGF5ZXIoKSkgewog
ICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwotICAgIGVsc2UK
KyAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxheWVycygpOworICAgIH0gZWxzZQog
ICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCmluZGV4IGU4MmYyOTgzMDQ3ZWZjYjEzYTA5OWY5YWRiNzUyZjJiMThhZWY1MTcu
LmUxODNiZTUyNDM1ZmUzYzgzODY4ZTFiMjQzYWEyYTU3NThkOWI0YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsK
IGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKQEAgLTE2
Myw2ICsxNjQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0KCk7
CiAgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwogCisgICAgdm9pZCBzZXRBbmltYXRpb25SZXN1
bHRzKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPik7CisKICAgICBMYXllckNocm9taXVt
KiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQogICAgIGNvbnN0IExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgp
OyB9CiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGU0NmFlMzI0OWYzODE1
Y2Q5YjAxOTFhOTI4NzFmYTE3ZjJhOWRiODYuLjJmN2U1YmE2ZTVhYWQzOGI4NzE5MzQyN2UwYmQ3
MzM3MTEyYTQwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFj
a2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgiCkBAIC01Nyw2ICs1OCw3IEBAIENDTGF5ZXJUcmVlSG9zdElt
cGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5
ZXJUcmVlCiAgICAgLCBtX3NlbnRQYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV9taW5QYWdlU2Nh
bGUoMCkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDApCisgICAgLCBtX25lZWRzQW5pbWF0ZUxheWVy
cyh0cnVlKQogICAgICwgbV9waW5jaEdlc3R1cmVBY3RpdmUoZmFsc2UpCiB7CiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKQEAgLTk3LDIxICs5OSwyNyBAQCBHcmFwaGljc0Nv
bnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKLSAgICBpZiAo
IW1fcGFnZVNjYWxlQW5pbWF0aW9uKQorICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24gJiYg
IW1fbmVlZHNBbmltYXRlTGF5ZXJzKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIHNj
cm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsg
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworICAgIGlmIChtX3BhZ2VTY2FsZUFu
aW1hdGlvbikgeworICAgICAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xs
TGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERl
bHRhKCkpOwogCi0gICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBh
Z2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKLSAgICBJbnRT
aXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1l
KGZyYW1lQmVnaW5UaW1lTXMpOwotICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxl
RGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Ny
b2xsVG90YWwpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwor
ICAgICAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNjYWxl
QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUpOworICAgICAgICBJbnRTaXpl
IG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZy
YW1lQmVnaW5UaW1lTXMpOworICAgICAgICBuZXh0U2Nyb2xsLnNjYWxlKDEgLyBtX3BhZ2VTY2Fs
ZURlbHRhKTsKKyAgICAgICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwg
LSBzY3JvbGxUb3RhbCk7CiAKLSAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24tPmlzQW5pbWF0
aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykpIHsKLSAgICAgICAgbV9wYWdlU2Nh
bGVBbmltYXRpb24uY2xlYXIoKTsKLSAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CisgICAgICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRp
b25Db21wbGV0ZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSkgeworICAgICAgICAgICAgbV9wYWdl
U2NhbGVBbmltYXRpb24uY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0Nv
bW1pdE9uSW1wbFRocmVhZCgpOworICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKG1fbmVlZHNB
bmltYXRlTGF5ZXJzICYmIG1fcm9vdExheWVySW1wbC5nZXQoKSkKKyAgICAgICAgYW5pbWF0ZUxh
eWVycyhmcmFtZUJlZ2luVGltZU1zIC8gMTAwMCk7CisKKyAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzdGFy
dFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBh
bmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lTXMsIGRvdWJsZSBk
dXJhdGlvbk1zKQpAQCAtMjQ1LDYgKzI1MywyMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
Om9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKICAgICAgICAg
cGFzc2VzW2ldLT5vcHRpbWl6ZVF1YWRzKCk7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogY3VycmVudCwgZG91YmxlIGZy
YW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25SZXN1bHRzJiByZXN1bHRzKQoreworICAgIGJv
b2wgbmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7CisKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqIGN1cnJlbnRDb250cm9sbGVyID0gY3VycmVudC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpOworICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lU2Vj
cywgcmVzdWx0cyk7CisgICAgaWYgKGN1cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSkKKyAgICAgICAgbmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShjdXJyZW50LT5jaGlsZHJlbigpW2ldLmdldCgp
LCBmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpKQorICAgICAgICAgICAgbmVlZHNBbmltYXRl
TGF5ZXJzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmVlZHNBbmltYXRlTGF5ZXJzOwor
fQorCiBJbnRTaXplIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRTaXplKCkgY29uc3QKIHsK
ICAgICAvLyBUT0RPKGFlbGlhcyk6IEhhcmRjb2RpbmcgdGhlIGZpcnN0IGNoaWxkIGhlcmUgaXMg
d2VpcmQuIFRoaW5rIG9mCkBAIC01NTEsNCArNTc2LDIwIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSgpCiAgICAgfQogfQogCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyIsIHRo
aXMsIDApOworICAgIEFTU0VSVChtX25lZWRzQW5pbWF0ZUxheWVycyk7CisKKyAgICBPd25QdHI8
Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkp
OworCisgICAgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1f
cm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWVCZWdpblRpbWVTZWNzLCAqcmVzdWx0cyk7CisKKyAg
ICBpZiAoIXJlc3VsdHMtPnN0YXJ0ZWRBbmltYXRpb25zKCkuaXNFbXB0eSgpKQorICAgICAgICBt
X2NsaWVudC0+cHVzaEFuaW1hdGlvblJlc3VsdHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQocmVz
dWx0cy5yZWxlYXNlKCkpOworCisgICAgaWYgKG1fbmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAg
ICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKIH0KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDQz
M2ZhZGE2ODA4ZTc0NzI3MGJhY2M0Yzc5NTk5MDgwZDA1Nzc1NTkuLjhmYzJiYmFlZDY2NGVjOGE1
NjBjZmFjMjQ3MmNjNzQ4Nzk4MjQ2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVz
dWx0czsKIGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OwogY2xhc3MgQ0NQYWdlU2NhbGVBbmltYXRp
b247CiBjbGFzcyBDQ0xheWVySW1wbDsKQEAgLTQ4LDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHVzaEFuaW1hdGlvblJlc3VsdHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0
cjxDQ0FuaW1hdGlvblJlc3VsdHM+KSA9IDA7CiB9OwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBs
IG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmlu
ZyBzdGF0ZQpAQCAtMTE3LDggKzEyMCwxNSBAQCBwdWJsaWM6CiAgICAgLy8gbGF5ZXIgcHJvcGVy
dGllcy4gVGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGRhbWFnZSByZWdpb24gZm9yIHRoZSBu
ZXh0IGRyYXcgY3ljbGUuCiAgICAgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CiAKKyAg
ICBib29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRl
TGF5ZXJzOyB9CisgICAgdm9pZCBzZXROZWVkc0FuaW1hdGVMYXllcnMoKSB7IG1fbmVlZHNBbmlt
YXRlTGF5ZXJzID0gdHJ1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1w
bChjb25zdCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworCisgICAg
Ly8gdmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhk
b3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKTsKKwogICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQqIG1fY2xpZW50OwogICAgIGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOwogICAgIGludCBtX2Zy
YW1lTnVtYmVyOwpAQCAtMTMzLDYgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0cmFja0Rh
bWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBjYWxjdWxhdGVSZW5k
ZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQYXNz
ZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIGJvb2wgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShD
Q0xheWVySW1wbCosIGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVzdWx0
cyYpOwogICAgIEludFNpemUgY29udGVudFNpemUoKSBjb25zdDsKIAogICAgIE93blB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKQEAgLTE0OCw2ICsxNTksOCBAQCBw
cml2YXRlOgogICAgIGZsb2F0IG1fc2VudFBhZ2VTY2FsZURlbHRhOwogICAgIGZsb2F0IG1fbWlu
UGFnZVNjYWxlLCBtX21heFBhZ2VTY2FsZTsKIAorICAgIC8vIElmIHRoaXMgaXMgdHJ1ZSwgaXQg
aXMgbmVjZXNzYXJ5IHRvIHRyYXZlcnNlIHRoZSBsYXllciB0cmVlIHRpY2tpbmcgdGhlIGFuaW1h
dG9ycy4KKyAgICBib29sIG1fbmVlZHNBbmltYXRlTGF5ZXJzOwogICAgIGJvb2wgbV9waW5jaEdl
c3R1cmVBY3RpdmU7CiAKICAgICBPd25QdHI8Q0NQYWdlU2NhbGVBbmltYXRpb24+IG1fcGFnZVNj
YWxlQW5pbWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRl
eCAwNzI2NWRiNzcyODBhMGU3NTM2YTdlZTBkOTUwMDE4YWNlYzkzZDZjLi4zMDE2NDlmYzk2Y2Vl
ZTRjYjc5YTdhNTFjMTU0OTgxNmE4NTViZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTIyOCw2ICsyMjksMTMgQEAgdm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwogfQog
Cit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRzVG9NYWluVGhy
ZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKQor
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgRGVidWdTY29wZWRT
ZXRNYWluVGhyZWFkIG1haW47CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpb25SZXN1
bHRzKHJlc3VsdHMpOworfQorCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBh
dGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQogdm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggYTk0NDA1ZjNkOTNlY2EyMDhkZTIwZmRmOGJk
YWM2OWYwNDk3ZjM3NC4uZjhiZmRhNWVhZWJiNGI3YjJhOTcyMDJlMDcyYTYwZGU0OGVjYTgyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMzMsNiArMzMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdDsKIAogY2xhc3MgQ0NTaW5nbGVUaHJlYWRQcm94eSA6IHB1YmxpYyBD
Q1Byb3h5LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKQEAgLTYyLDYgKzYzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQo
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVk
cmF3T25JbXBsVGhyZWFkKCkgeyBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJU
cmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0
aW9uUmVzdWx0c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9u
UmVzdWx0cz4pOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgcGF0aCB3aGVyZSBSZW5k
ZXJXaWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0
ZWx5KCk7CkBAIC0xMTAsNiArMTEyLDI0IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCisvLyBGb3Ig
dXNlIGluIHRoZSBzaW5nbGUtdGhyZWFkZWQgY2FzZS4gSW4gZGVidWcgYnVpbGRzLCBpdCBwcmV0
ZW5kcyB0aGF0IHRoZQorLy8gY29kZSBpcyBydW5uaW5nIG9uIHRoZSBtYWluIHRocmVhZCB0byBz
YXRpc2Z5IGFzc2VydGlvbiBjaGVja3MuCitjbGFzcyBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQg
eworcHVibGljOgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCgpCisgICAgeworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICAgICAgQ0NQcm94eTo6c2V0Q3VycmVudFRocmVhZElzSW1wbFRo
cmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9CisgICAgfkRlYnVnU2NvcGVkU2V0TWFpblRocmVh
ZCgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQ0NQcm94eTo6c2V0Q3Vy
cmVudFRocmVhZElzSW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KK307CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmlu
ZGV4IGI5YTY2YmQ0MDZiZDQyNzBiZTAzNTM4ZDhmODk2MGE4MzA3NTMwOTUuLjhkOGNkZDVlNjcz
Y2UyNjhiYzI5MTZkMDBlMjgxNmVlMzUyZTMyZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMu
aCIKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIK
QEAgLTI0Niw2ICsyNDcsMTMgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHNUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMp
Cit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHMiLCB0aGlzLCAwKTsKKyAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpwdXNoQW5pbWF0aW9uUmVzdWx0cywgcmVzdWx0cykpOworfQorCiB2b2lkIENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAt
NTQ5LDYgKzU1NywxNCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmRpZENvbXBsZXRlU3dhcEJ1ZmZl
cnMoKQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogfQog
Cit2b2lkIENDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRzKFBhc3NPd25QdHI8Q0NB
bmltYXRpb25SZXN1bHRzPiByZXN1bHRzKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVy
VHJlZUhvc3QtPnNldEFuaW1hdGlvblJlc3VsdHMocmVzdWx0cyk7Cit9CisKIHZvaWQgQ0NUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNv
bXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJ
bXBsT25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXgg
ODdhZDI3ZDBlYWM1Zjg1ZDI3NmFiN2QwODliZGJlMmQ3ODkzMjIzMy4uMmVlOTQ3Y2MwYzUyYzYw
ODZhOGM1ODBhN2U2ZTYzOTMzN2ZhMmZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAt
MzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9u
UmVzdWx0czsKIGNsYXNzIENDSW5wdXRIYW5kbGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0Owog
Y2xhc3MgQ0NTY2hlZHVsZXI7CkBAIC02OSw2ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lkIHB1c2hBbmltYXRpb25S
ZXN1bHRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1
bHRzPik7CiAKICAgICAvLyBDQ1NjaGVkdWxlckNsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZp
cnR1YWwgYm9vbCBjYW5EcmF3KCk7CkBAIC04NSw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVn
aW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+KTsKICAgICB2b2lkIGRpZENv
bW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwor
ICAgIHZvaWQgcHVzaEFuaW1hdGlvblJlc3VsdHMoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3Vs
dHM+KTsKIAogICAgIC8vIENhbGxlZCBvbiBpbXBsIHRocmVhZAogICAgIHN0cnVjdCBSZWFkYmFj
a1JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYzg1MDJmNTczYzQ1
MTcwMTczNTQ4NWFmNDc1MjNlNzUxMjk0YzgzZC4uZTg4MjM5MjkyODA2MGFiMjVlMWRhMmU3MDc4
MjhkNWZmNjdjNTQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MSw2ICs2
MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGFt
YWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxl
clRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
Y3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
Y3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1ZGU4NjhhMmYzYTI1YWIwMzAyMGVk
MjVjMWQwZWM0OTBhLi4yNjFlZGZmZjg1MmYzM2MxM2I0OTIxYmU3MGU2MDllNDJmNWUyYjkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1h
dGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAog
I2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0FuaW1h
dGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAKICNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgRmFrZUZsb2F0QW5p
bWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBm
bG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9Ci19OworbmFtZXNw
YWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9S
ZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5p
bWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKICAgICBy
ZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAtMTY0LDQgKzE2MCw0IEBAIFRFU1QoQ0NB
Y3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQogICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlz
RmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVz
dENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RD
b21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YmQ4YTJmZTIxNTFlNjhmMmQ1NmM2YzlhMDQ3YjZjZDk4M2Vm
OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Fu
aW1hdGlvblRlc3RDb21tb24uaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisjZGVmaW5lIENDQW5pbWF0aW9uVGVzdENvbW1v
bl9oCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK2NsYXNzIEZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlIDogcHVibGljIFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSB7IH0KKworICAg
IHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1
YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1
cnZlKTsKKyAgICB9Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1Ymxp
YyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlvbihkdXJhdGlv
bikgeyB9CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKSB7IH0KKworICAg
IHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91Ymxl
IHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigqdGhpcykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsK
K307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9h
dEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJs
ZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgICAgIDogbV9kdXJhdGlvbihk
dXJhdGlvbikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAgICAgLCBtX3RvKHRvKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRUcmFuc2l0aW9uKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0K
KyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAorICAgIHsKKyAg
ICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOworICAgICAgICBpZiAodGltZSA+PSAxKQorICAgICAg
ICAgICAgdGltZSA9IDE7CisgICAgICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGlt
ZSAqIG1fdG87CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5p
bWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxvYXQgbV90bzsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlv
blRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCmluZGV4
IDNkNTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTViMGY1M2IuLjkxNDBkN2UxOTllNWNi
N2ZmY2QzYzUxMTY3ZmVmYzE2MjdhN2U5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcApAQCAtMjQsMTYgKzI0LDE2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLQorI2luY2x1ZGUgImNjL0ND
QW5pbWF0aW9uUmVzdWx0cy5oIgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogCiBuYW1lc3BhY2Ugewog
CkBAIC00Miw3NCArNDIsMzkgQEAgcHVibGljOgogICAgIEZha2VDb250cm9sbGVyQ2xpZW50KCkg
OiBtX29wYWNpdHkoMCkgeyB9CiAgICAgdmlydHVhbCB+RmFrZUNvbnRyb2xsZXJDbGllbnQoKSB7
IH0KIAorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsg
fQogICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0g
dHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlk
QWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQotICAg
IHsKLSAgICAgICAgbV9hY3RpdmVDb250cm9sbGVycy5hcHBlbmQoY29udHJvbGxlcik7Ci0gICAg
fQotCi0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVD
b250cm9sbGVycygpIHsgcmV0dXJuIG1fYWN0aXZlQ29udHJvbGxlcnM7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKIHBy
aXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
dHJhbnNmb3JtOwotICAgIFZlY3RvcjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqPiBt
X2FjdGl2ZUNvbnRyb2xsZXJzOwotfTsKLQotY2xhc3MgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24g
OiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKSA6IG1fZHVyYXRpb24oZHVyYXRpb24p
IHsgfQotICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJh
dGlvbjsgfQotICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUg
dGltZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb25zKCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIEludFNpemUg
bV9ib3VuZHM7CiB9OwogCi1jbGFzcyBGYWtlRmxvYXRUcmFuc2l0aW9uIDogcHVibGljIENDRmxv
YXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgRmFrZUZsb2F0VHJhbnNpdGlvbihkb3Vi
bGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQotICAgICAgICA6IG1fZHVyYXRpb24o
ZHVyYXRpb24pCi0gICAgICAgICwgbV9mcm9tKGZyb20pCi0gICAgICAgICwgbV90byh0bykKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHRpbWUgLz0gbV9kdXJhdGlvbjsKLSAgICAgICAgaWYgKHRp
bWUgPj0gMSkKLSAgICAgICAgICAgIHRpbWUgPSAxOwotICAgICAgICByZXR1cm4gKDEgLSB0aW1l
KSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBkb3VibGUg
bV9kdXJhdGlvbjsKLSAgICBmbG9hdCBtX2Zyb207Ci0gICAgZmxvYXQgbV90bzsKLX07CitQYXNz
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFy
Z2V0UHJvcGVydHkgcHJvcGVydHkpCit7CisgICAgcmV0dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoY3VydmUsIGlkLCBwcm9wZXJ0eSk7Cit9CiAKIC8vIFRlc3RzIHRoYXQgdHJhbnNpdGlv
bmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKIHsKKyAgICBP
d25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3Jl
YXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMCwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0xMTcs
MjAgKzgyLDIxIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJp
dmlhbFRyYW5zaXRpb24pCiAvLyBUZXN0cyB0aGF0IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZl
Y3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGluIHNlcXVlbmNlLgogVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVldWluZykKIHsKKyAgICBPd25QdHI8
Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkp
OwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRk
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqcmVzdWx0cyk7
CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTEzOCwyMiArMTA0LDIz
IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVp
bmcpCiAvLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFu
c2l0aW9uLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1
cHQpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlv
blJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAK
LSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAg
ICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGlj
aywgMCk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAuNSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLjUsICpyZXN1bHRzKTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5P
Vy4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41LCAqcmVzdWx0cyk7CiAgICAgRVhQ
RUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE2MSwyMyArMTI4LDI0IEBAIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogLy8gVGVzdHMg
c2NoZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBw
cm9wZXJ0eSBpcyBmcmVlLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIHsKKyAgICBPd25QdHI8
Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkp
OwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRk
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsK
LSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMSwgKnJlc3VsdHMpOwogICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVk
IHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
CiAgICAgLy8gVGhlIHRoZSBmbG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBhdCB0
aW1lIDEgYW5kIHNob3VsZCBiZSBkb25lLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1
bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKIH0KQEAgLTE4NywyOSArMTU1LDMwIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2Nr
ZWQpCiAvLyBmb3IgYm90aCB0byBmaW5pc2gpLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiB7CisgICAg
T3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNy
ZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xs
ZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gQW5pbXMg
d2l0aCBpZCAxIHNob3VsZCBib3RoIHN0YXJ0IG5vdy4KLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKICAgICAvLyBUaGUgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIGhh
dmUgZmluaXNoZWQgYXQgdGltZSAxLCBidXQgdGhlIGdyb3VwCiAgICAgLy8gb2YgYW5pbWF0aW9u
cyB3aXRoIGlkIDEgZG9uJ3QgZmluaXNoIHVudGlsIHRpbWUgMiBiZWNhdXNlIG9mIHRoZSBsZW5n
dGgKICAgICAvLyBvZiB0aGUgdHJhbnNmb3JtIGFuaW1hdGlvbi4KLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKnJlc3VsdHMpOwogICAgIC8v
IFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4KICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBUaGUgdGhlIHNlY29uZCBvcGFjaXR5
IGFuaW1hdGlvbiBzaG91bGQgc3RhcnQgYXQgdGltZSAyIGFuZCBzaG91bGQgYmUKICAgICAvLyBk
b25lIGJ5IHRpbWUgMwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgzLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNp
dHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKIH0KQEAgLTIxNywyMiArMTg2LDIzIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQogLy8gVGVzdHMg
c2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZS4KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiB7Cisg
ICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6
OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9B
ZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgp
KTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqcmVzdWx0cyk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VR
KDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI0MCwyOCArMjEwLDI5IEBAIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmltYXRpb24pCiAvLyBUZXN0cyBz
Y2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRl
cnJ1cHRpbmcgYSBydW5uaW5nIGFuaW1hdGlvbi4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRp
b24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlv
blJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9w
YWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpyZXN1bHRzKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMiwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwog
ICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBA
IC0yNzAsMzQgKzI0MSwzNSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbQogLy8gYW5kIHRoZXJl
IGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgbGF0ZXIuCiBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVy
cnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1ZXVlKQogeworICAgIE93blB0cjxDQ0Fu
aW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAg
ICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAp
OwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAzLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43
NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEZpcnN0IDJz
IG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpyZXN1bHRzKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgw
LjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNp
dHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDMsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpyZXN1bHRz
KTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTMwNSw2NCArMjc3
LDY2IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVk
QW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAvLyBUZXN0IHRoYXQgYSBsb29waW5nIGFu
aW1hdGlvbiBsb29wcyBhbmQgZm9yIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgog
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykK
IHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVz
dWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNl
dEl0ZXJhdGlvbnMoMyk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwg
KnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKnJlc3VsdHMp
OwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsICpyZXN1bHRzKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mi4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAqcmVzdWx0cyk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43
NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDMsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFj
aXR5KCkpOwogCiAgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoNCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LCAqcmVzdWx0cyk7CiAgICAgRVhQ
RUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAKIC8vIFRlc3QgdGhhdCBhbiBpbmZpbml0
ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFib3J0ZWQuCiBURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKIHsK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0
czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29u
c3QgaW50IGlkID0gMTsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKICAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxLjI1LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMS43NSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUsICpyZXN1bHRzKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogCkBAIC0zNzUsODAgKzM0OSw2NiBAQCBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKIC8vIFRl
c3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3VtZSkKIHsKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRl
KCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlk
ID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAuNSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgp
KTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEwMjQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCwgKnJlc3VsdHMpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAg
ICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwog
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEwMjQuMjUsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41KTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEwMjQuNSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9
CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgQWJvcnRBR3JvdXBl
ZEFuaW1hdGlvbikKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKEND
QW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1
bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xs
ZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24o
MSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwg
MiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFj
aXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9u
KGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFj
dGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpyZXN1bHRzKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDIsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRSghY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBhZGRpbmcgYW4gYW5pbWF0aW9uIHRvIHRoZSBj
b250cm9sbGVyIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBvbiB0aGUgY29udHJvbGxl
ciBjbGllbnQKLS8vIChpbiB0aGlzIGNhc2UsIGFkZGluZyB0aGUgY29udHJvbGxlciB0byB0aGUg
bGlzdCBvZiBhY3RpdmUgY29udHJvbGxlcikuCi1URVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIERpZEFjdGl2YXRlKQotewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1
bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xs
ZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMo
KS5zaXplKCkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgxKSwgZHVtbXku
YWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjb250cm9sbGVyLmdl
dCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThmOGNiZDc1NzQwYWUyOTM5ZTIzY2My
MzUwYS4uYTQ5MTc2MDBmNDhjNjVlYjg1MDMyMDNmNzE2MWI2ZDlmNDcwZmNjYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN3
YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVx
dWVzdENvbW1pdCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFuaW1hdGlvblJlc3Vs
dHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+
KSB7IH0KIAogICAgIHN0YXRpYyB2b2lkIGV4cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNp
dmUoQ0NMYXllckltcGwqIGxheWVyKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGZjNDE0ZjczOTcxNDU4
M2FkYTFhNjM1NmNhNDJhMDU4ZGYyMzQ1MWQuLjIwYmYyNzczM2QwZTU0NzdkMzUxN2FlMjBiOWI4
NmEzMmEzY2RhZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCiAKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIK
ICNpbmNsdWRlICJDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaCIKQEAgLTM0LDYgKzM1LDggQEAKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgog
I2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRl
ICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5o
IgpAQCAtNDcsMTEgKzUwLDExIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKLW5hbWVzcGFjZSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFVzZWQg
YnkgdGVzdCBzdHVicyB0byBub3RpZnkgdGhlIHRlc3Qgd2hlbiBzb21ldGhpbmcgaW50ZXJlc3Rp
bmcgaGFwcGVucy4KIGNsYXNzIFRlc3RIb29rcyB7CkBAIC01OSw2ICs2Miw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdElt
cGwqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhyZWFkKENDTGF5
ZXJUcmVlSG9zdEltcGwqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5
ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiwgZmxvYXQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpIHsgfQpAQCAtOTAsNiArOTQsMTMgQEAgcHVibGljOgogICAgICAgICBtX3Rl
c3RIb29rcy0+ZHJhd0xheWVyc09uQ0NUaHJlYWQodGhpcyk7CiAgICAgfQogCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2Vj
cykKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZnJh
bWVCZWdpblRpbWVTZWNzKTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFuaW1hdGVMYXllcnModGhp
cyk7CisgICAgfQorCiBwcml2YXRlOgogICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbChUZXN0SG9v
a3MqIHRlc3RIb29rcywgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqIGNsaWVudCkKICAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKHNldHRp
bmdzLCBjbGllbnQpCkBAIC0xMzEsNiArMTQyLDIyIEBAIHByaXZhdGU6CiAgICAgVGVzdEhvb2tz
KiBtX3Rlc3RIb29rczsKIH07CiAKKy8vIEFkYXB0cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ciBmb3IgdGVzdC4KK2NsYXNzIE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLjAsIDEuMGYsIDAuMGYpKSwgMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorfTsKKwogY2xhc3MgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0
dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzKQpA
QCAtMjI1LDcgKzI1Miw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRlKCkKKyAgICB7CisgICAgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1vY2tMYXll
clRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tzKSA6IG1fdGVzdEhvb2tzKHRlc3RI
b29rcykgeyB9CkBAIC0yNTUsNiArMjg0LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FsbE9uTWFp
blRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZSwgdGhp
cyk7CiAgICAgfQogCisgICAgdm9pZCBwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKKyAg
ICB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0
Y2hBZGRBbmltYXRpb24sIHRoaXMpOworICAgIH0KKwogICAgIHZvaWQgcG9zdFNldE5lZWRzQ29t
bWl0VG9NYWluVGhyZWFkKCkKICAgICB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXll
clRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0NvbW1pdCwgdGhpcyk7CkBAIC0yNzAsNyAr
MzA0LDYgQEAgcHVibGljOgogICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9z
dFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0LCB0aGlzKTsKICAgICB9CiAK
LQogICAgIHZvaWQgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQoYm9vbCB2aXNpYmxlKQogICAg
IHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZCh2aXNpYmxlID8gQ0NMYXllclRyZWVIb3N0VGVz
dDo6ZGlzcGF0Y2hTZXRWaXNpYmxlIDogQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRJ
bnZpc2libGUsIHRoaXMpOwpAQCAtMzEzLDYgKzM0NiwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
ICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0FuaW1hdGUoKTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFkZEFuaW1hdGlvbih2b2lkKiBzZWxmKQorICAgIHsKKyAg
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0
ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgQVNT
RVJUKHRlc3QpOworICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xh
eWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQorICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dC0+cm9vdExheWVyKCktPmFkZEFuaW1hdGlvbihLZXlmcmFtZVZhbHVlTGlzdChBbmltYXRlZFBy
b3BlcnR5T3BhY2l0eSksIEludFNpemUoKSwgMCwgIiIsIDAuMCk7CisgICAgfQorCiAgICAgc3Rh
dGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRDb21taXQodm9pZCogc2VsZikKICAg
ICB7CiAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNDYzLDYgKzUwNSw3IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdpblRlc3QoKQogICAgIG1fbGF5ZXJUcmVlSG9z
dCA9IE1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGUodGhpcywgbV9jbGllbnQuZ2V0KCksIHJvb3RM
YXllciwgbV9zZXR0aW5ncyk7CiAgICAgQVNTRVJUX1RSVUUobV9sYXllclRyZWVIb3N0KTsKICAg
ICByb290TGF5ZXItPnNldExheWVyVHJlZUhvc3QobV9sYXllclRyZWVIb3N0LmdldCgpKTsKKyAg
ICByb290TGF5ZXItPnNldEFuaW1hdGlvbkNvbnRyb2xsZXIoTW9ja0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y3JlYXRlKCkpOwogCiAgICAgbV9iZWdpbm5pbmcgPSB0cnVlOwogICAgIGJlZ2lu
VGVzdCgpOwpAQCAtNzg5LDYgKzgzMiw0NCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNl
dE5lZWRzQW5pbWF0ZUluc2lkZUFuaW1hdGlvbkNhbGxiYWNrLCBydW5NdWx0aVRocmVhZAogICAg
IHJ1blRlc3RUaHJlYWRlZCgpOwogfQogCisvLyBBZGQgYSBsYXllciBhbmltYXRpb24gYW5kIGNv
bmZpcm0gdGhhdCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzIGRvZXMgZ2V0Cisv
LyBjYWxsZWQgYW5kIGNvbnRpbnVlcyB0byBnZXQgY2FsbGVkLgorY2xhc3MgQ0NMYXllclRyZWVI
b3N0VGVzdEFkZEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25s
eSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbigpCisgICAg
ICAgIDogbV9udW1BbmltYXRlcygwKQorICAgICAgICAsIG1fbGF5ZXJUcmVlSG9zdEltcGwoMCkK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVzdCgpCisgICAgeworICAg
ICAgICBwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdElt
cGwpCisgICAgeworICAgICAgICBpZiAoIW1fbnVtQW5pbWF0ZXMpIHsKKyAgICAgICAgICAgIG1f
bnVtQW5pbWF0ZXMrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBl
bmRUZXN0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgewor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9udW1BbmltYXRlczsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBtX2xheWVyVHJlZUhvc3RJbXBsOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdFRlc3RBZGRBbmltYXRpb24sIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJl
YWRlZCgpOworfQorCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlIDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKIHB1YmxpYzoKICAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKaW5kZXggMTU1N2E3ZDkzMjJjYzZi
ZTIwNmJmNTBiMDBjMGY0NzA2M2M1NDc4Yi4uZjliODgxZTI2OTRhOGY2MDBkOGNjMzA1YzEzOGQx
YWMxOThjZTgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVl
U3luY2hyb25pemVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlU3luY2hyb25pemVyVGVzdC5jcHAKQEAgLTI2LDEzICsyNiwzMSBAQAogCiAjaW5jbHVkZSAi
VHJlZVN5bmNocm9uaXplci5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgi
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0
aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5o
IgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmgiCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyB0ZXN0aW5nOjpUZXN0Owor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRyZWVTeW5jaHJvbml6ZXJUZXN0IDogcHVi
bGljIFRlc3QgeworcHVibGljOgorICAgIHN0YXRpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ciogZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihMYXllckNocm9taXVtKiBsYXllcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsYXllci0+YW5pbWF0aW9uQ29udHJvbGxlcigpOworICAgIH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIHsKIApAQCAtMTE2LDcgKzEzNCw3
IEBAIHZvaWQgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEND
TGF5ZXJJbXBsKiBjY0xheWVyKQogfQogCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJl
ZSBhbmQgc3luY2hyb25pemVzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJldXNlIGFueSBwcmVleGlz
dGluZyBsYXllcnMuCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZy
b21FbXB0eSkKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9t
RW1wdHkpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
QEAgLTEyOSw3ICsxNDcsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxl
VHJlZUZyb21FbXB0eSkKIH0KIAogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5k
IHN5bmNocm9uaXplcyBpdCBhdHRlbXB0aW5nIHRvIHJldXNlIHNvbWUgbGF5ZXJzCi1URVNUKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCitURVNUX0Yo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVycykKIHsKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVy
RGVzdHJ1Y3Rpb25MaXN0OwpAQCAtMTU1LDcgKzE3Myw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXpl
clRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVycykKICAgICBFWFBFQ1RfRVEoc2Vjb25k
Q0NMYXllcklkLCBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0WzBdKTsKIH0KIAotVEVTVChUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQorVEVTVF9GKFRyZWVT
eW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCiB7CiAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxh
eWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTE4Nyw3ICsyMDUsNyBA
QCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMp
CiAgICAgRVhQRUNUX0VRKHNlY29uZENoaWxkQm91bmRzLmhlaWdodCgpLCBzZWNvbmRDQ0xheWVy
Q2hpbGRCb3VuZHMuaGVpZ2h0KCkpOwogfQogCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBy
ZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQorVEVTVF9GKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQogewogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVj
dGlvbkxpc3Q7CkBAIC0yMzQsNyArMjUyLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwg
cmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKIH0KIAogLy8gQ29uc3RydWN0cyBh
IHZlcnkgc2ltcGxlIHRyZWUsIHN5bmNocm9uaXplcyBpdCwgdGhlbiBzeW5jaHJvbml6ZXMgdG8g
YSB0b3RhbGx5IG5ldyB0cmVlLiBBbGwgbGF5ZXJzIGZyb20gdGhlIG9sZCB0cmVlIHNob3VsZCBi
ZSBkZWxldGVkLgotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVu
RGVzdHJveSkKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVu
RGVzdHJveSkKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0
b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwpAQCAtMjY1LDcgKzI4Myw3IEBAIFRFU1Qo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kpCiB9CiAKIC8v
IENvbnN0cnVjdHMrc3luY3MgYSB0cmVlIHdpdGggbWFzaywgcmVwbGljYSwgYW5kIHJlcGxpY2Eg
bWFzayBsYXllcnMuCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FB
bmRSZXBsaWNhTWFza0xheWVycykKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01h
c2tSZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTMwNyw1ICszMjUsODUgQEAgVEVTVChUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCiAgICAg
ZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKIH0KIAorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTmV3QW5p
bWF0aW9uKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
CisKKyAgICAvLyBTeW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisKKyAgICAvLyBBZGQgYW5pbWF0aW9uIHRvIG1haW4g
dGhyZWFkIGNvbnRyb2xsZXIuCisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVS
b290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hy
b25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVl
Um9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3Rh
dGUoKSk7Cit9CisKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0FuaW1hdGlvblBy
b3BlcnRpZXMpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
KTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBn
ZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRp
b25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VG
bG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVD
VF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVB
bmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEo
Q0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJU
cmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFB1c2ggYW4g
YW5pbWF0aW9uIHByb3BlcnR5IGNoYW5nZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBub3Qg
Y2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJlIGFkZGVkKS4KKyAgICBnZXRBbmltYXRpb25Db250cm9s
bGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKClbMF0tPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDApOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
Y2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9v
dC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBh
dXNlZCwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFu
aW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQor
CitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQorewor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBT
eW5jIHdpdGggbm8gYW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgMCk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290Lmdl
dCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5n
ZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisKKyAgICAvLyBBYm9ydCBhbiBhbmltYXRpb24gZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5p
bWF0aW9ucygpLmNsZWFyKCk7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQ
RUNUX0ZBTFNFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3Rp
dmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKK30KKworVEVTVF9G
KFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQ29tcGxldGVkQW5pbWF0aW9uKQoreworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBs
YXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdp
dGggbm8gYW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9v
dCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgMCk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+
YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJv
b3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisKKyAgICAvLyBTdGVwIHRocm91Z2gg
dGhlIGFuaW1hdGlvbiB1bnRpbCBpdCBpcyBmaW5pc2hlZC4gQXQgdGhlIG5leHQgc3luYywgdGhl
IG1haW4gdGhyZWFkJ3MgYW5pbWF0aW9uIHNob3VsZCBiZSBjbGVhcmVkLgorICAgIE93blB0cjxD
Q0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7
CisgICAgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUoMCwg
KnJlc3VsdHMpOworICAgIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5h
bmltYXRlKDIsICpyZXN1bHRzKTsKKworICAgIEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKHNpemVfdCgxKSwgZ2V0QW5pbWF0aW9u
Q29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUo
KSk7CisKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90
KDApLCBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVB
bmltYXRpb25zKCkuc2l6ZSgpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126545</attachid>
            <date>2012-02-10 11:59:11 -0800</date>
            <delta_ts>2012-02-17 13:56:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120210145909.patch</filename>
            <type>text/plain</type>
            <size>115004</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE5MzI0OWZkMzA2OTQ1
ODFmNjY1YTIwOWFkZDcyNTI3MTk5NTIyMi4uMmM1NTg5MTgyZThlOTIwMjUxNGEwMDQzZWJiMDM2
ZGRiNGFlZGM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAorMjAxMi0wMi0wMyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBsYXRmb3JtQ2hyb21pdW1MYXllckFuaW1hdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRD
b250ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVt
Ojp1cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnBhdXNlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjp+Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhh
c1J1bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBs
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6
ZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRp
b25TaWduYXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzaWduYXR1cmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKENDQW5p
bWF0aW9uQ3VydmUpOgorICAgICAgICAoQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHQ6OkNDQW5pbWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5p
bWF0aW9uUmVzdWx0KToKKyAgICAgICAgKENDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvblJlc3VsdHM6On5DQ0FuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBbmltYXRpb25SZXN1bHRzOjpzdGFydGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvblJlc3VsdHM6OkNDQW5pbWF0aW9uUmVzdWx0cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaE5ld0Fu
aW1hdGlvbnNUb0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hBbmltYXRpb25Q
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlbW92ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChD
Q0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0VG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6cHVzaEFu
aW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnB1c2hBbmltYXRpb25SZXN1bHRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEy
LTAyLTA5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3Zl
IFRyZWVPcmRlckl0ZXJhdG9yIGFuZCBpdGVyYXRlIG92ZXIgdGhlIGNoaWxkIGJveGVzIGRpcmVj
dGx5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjNGNhNGMwZWVhYmY0MjQwNzVhZjk2
ZDFiMDliYThmMmI0YzcyMDhjLi5kYjJlNzcxYzIyZTg0YTQxMGVmYTBiYWY4OTI4YWNhN2ExZDVl
NGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAy
LTAzICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gUGx1bWIgZnJvbSBHcmFwaGljc0xheWVyIHRvIHRoZSBjYyB0aHJlYWQgYW5pbWF0aW9u
IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1
ODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKiB0ZXN0
cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXRUZXN0cyk6
CisgICAgICAgIChGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmR1cmF0aW9uKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjpjbG9uZSk6
CisgICAgICAgIChGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6fkZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRy
YW5zaXRpb246OmNsb25lKToKKyAgICAgICAgKEZha2VGbG9hdFRyYW5zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24p
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246On5GYWtlRmxvYXRU
cmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpk
dXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6Z2V0
VmFsdWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmNsb25l
KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNw
cDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJvbGxlckNsaWVudDo6aWQpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkZha2VDb250cm9sbGVyQ2xpZW50Ojpib3VuZHMpOgorICAgICAg
ICAoRmFrZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICog
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdDo6cHVzaEFuaW1hdGlvblJlc3VsdFRvTWFpblRocmVhZE9uSW1w
bFRocmVhZCk6CisgICAgICAgICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUcmVlU3luY2hyb25pemVyVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVyVGVzdDo6Z2V0QW5pbWF0aW9uQ29udHJvbGxlcik6
CisKIDIwMTItMDItMDkgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBbQ2hyb21pdW1dIEFkZCBjaHJvbWl1bS1zdHlsZSB0cmFjaW5nIHN1cHBvcnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCA5MGNkOGUxNDhlNjY5YWVmYzNhMjVlMTg4Y2VlNDZiZGFlOGY2NWYxLi43ODI0
ZGQxYjJmM2I3MzkzZmU1YzVjYzk3MTAzYjJkYTI0MDc1MGZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zMjI1LDYgKzMyMjUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uUmVzdWx0cy5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdR
dWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAnLApAQCAtMzI0Miw2ICszMjQzLDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1Vw
RGlzcGxheS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0lucHV0SGFuZGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzFhNTExOGZmZDAzZDE4MjQ4ZDA3
ZTUxZTI0YWVlZDMyYWZlOTcwZS4uMTFmYTQ2Yjc5MjEwMmQ1YmFiZTk0ZjIwZWJlMWZlOWU4NTcy
NzQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xMjQsNyAr
MTI0LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7Ci0gICAgaWYgKCFtX2luU2V0Q2hpbGRyZW4pIAor
ICAgIGlmICghbV9pblNldENoaWxkcmVuKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0K
IApAQCAtMzY5LDYgKzM2OSwzNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQogICAgICAgICB1cGRh
dGVDaGlsZExpc3QoKTsKIH0KIAorYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBJbnRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gbV9sYXllci0+YWRkQW5pbWF0
aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9sYXll
ci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lKQoreworICAgIG1fbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1l
KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRv
dWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQor
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAg
bV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6bGF5ZXJBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCit7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlz
LCBzdGFydFRpbWUpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFu
Z2VkID0gZmFsc2U7CkBAIC0zODMsMTIgKzQxNCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVu
Q2hhbmdlZCA9IHRydWU7Ci0gIAorCiAgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxh
eWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlQ2hpbGRMaXN0LgogICAgICAgICAgICAgbV9j
b250ZW50c0xheWVyID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRy
ZW5DaGFuZ2VkKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KQEAgLTUzNyw3ICs1Njgs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgp
CiAgICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41Zikp
OwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXll
ci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2V0IHRo
ZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhl
IG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4KICAgICAgICAgbV9sYXllci0+c2V0T3Bh
Y2l0eSgxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCAzOWIzNjdi
OWQzZjBlMmY4M2EzMjBmOTAyYjU0MDYyZmI5MzFlODY2Li4yYjc4NTAxODZlYTFjOWUwOTQ2ZGEz
NzMyYzUzNTJlY2RjOWVjMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApA
QCAtOTIsNiArOTIsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
TWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2Fu
dmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmlt
YXRpb24qLCBjb25zdCBTdHJpbmcmLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2
b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91
YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKKyAgICB2
b2lkIGxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKTsKKwogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIHNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDhkMGZlMDNiNjEzYjI0ODE3MGU4ZjM2MjAwZDE0MGJlMDkxZjQ0ODMuLjFl
NWUwNmM1MTJkOWJlNDg1YjE3MWIzYjdmNzA1NzE3YzJjZjFhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpZiBVU0UoU0tJQSkKQEAgLTU5LDYgKzYwLDcgQEAg
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxheShmYWxz
ZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQor
ICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpj
cmVhdGUoKSkKICAgICAsIG1fc2Nyb2xsYWJsZShmYWxzZSkKICAgICAsIG1fYW5jaG9yUG9pbnQo
MC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQpAQCAtOTIsNiAr
OTQsMzggQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIHJlbW92ZUFsbENo
aWxkcmVuKCk7CiB9CiAKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworICAgIGJvb2wgYWRkZWRBbmltYXRpb24gPSBtX2FuaW1hdGlvbkNvbnRy
b2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9u
TmFtZSwgdGltZU9mZnNldCk7CisgICAgaWYgKGFkZGVkQW5pbWF0aW9uKQorICAgICAgICBzZXRO
ZWVkc0NvbW1pdCgpOworICAgIHJldHVybiBhZGRlZEFuaW1hdGlvbjsKK30KKwordm9pZCBMYXll
ckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmlt
YXRpb24oYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsK
K30KKwordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0
aW9uKGFuaW1hdGlvbk5hbWUpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpCit7CisgICAgbV9hbmlt
YXRpb25Db250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0Nv
bW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQorewor
ICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIHNldE5l
ZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVk
Q29udGVudChib29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBv
c2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsKQEAgLTUwNSw2ICs1MzksMTEg
QEAgYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uQ29udHJvbGxl
cihQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9s
bGVyKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlciA9IGFuaW1hdGlvbkNvbnRyb2xsZXI7
Cit9CisKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0
ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCB2b2lkKikK
IHsKICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQg
dG8gcGFpbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21p
dW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGEwNzU4MTMxZmJmZTIzNDY5MGIyNzMzYWVjNmJh
MmY4YTE0ZDBjYTcuLjA4Y2FmZGQ1OTg2ODViNzExMzViMDkzNzIwYTNkZDQ5NzQxOWU1NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENDTGF5ZXJJbXBs
OwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlcjsKQEAgLTYw
LDcgKzYxLDYgQEAgY2xhc3MgUmVnaW9uOwogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBs
YXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFz
cy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9taXVt
PiB7Ci0gICAgZnJpZW5kIGNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjcmVhdGUoKTsKIApAQCAtMjExLDcgKzIx
MSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNSZXNlcnZlVGV4dHVyZXMoYm9vbCBh
bHdheXNSZXNlcnZlVGV4dHVyZXMpIHsgbV9hbHdheXNSZXNlcnZlVGV4dHVyZXMgPSBhbHdheXNS
ZXNlcnZlVGV4dHVyZXM7IH0KICAgICBib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcygpIGNvbnN0
IHsgcmV0dXJuIG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAKKyAgICBib29sIGFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNv
bnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVP
ZmZzZXQpOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKworICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91
YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCiBwcm90ZWN0ZWQ6Cisg
ICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOworICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RUZXN0OworICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CisgICAgZnJp
ZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CisgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJv
bml6ZXJUZXN0OworCiAgICAgTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgYm9vbCBpc1BhaW50ZWRB
eGlzQWxpZ25lZEluU2NyZWVuKCkgY29uc3Q7CkBAIC0yMjksOCArMjQyLDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fbWFza0xheWVyOwogCi0gICAgZnJpZW5k
IGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOwog
ICAgIC8vIENvbnN0cnVjdHMgYSBDQ0xheWVySW1wbCBvZiB0aGUgY29ycmVjdCBydW50aW1lIHR5
cGUgZm9yIHRoaXMgTGF5ZXJDaHJvbWl1bSB0eXBlLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKICAgICBpbnQgbV9sYXllcklkOwpAQCAt
MjM5LDEwICsyNTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFyZW50KExheWVyQ2hyb21p
dW0qKTsKICAgICBib29sIGhhc0FuY2VzdG9yKExheWVyQ2hyb21pdW0qKSBjb25zdDsKIAotICAg
IHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jaGls
ZHJlbi5zaXplKCk7Ci0gICAgfQorICAgIHNpemVfdCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0
aGUgY2hpbGQgb3IgLTEgaWYgbm90IGZvdW5kLgogICAgIGludCBpbmRleE9mQ2hpbGQoY29uc3Qg
TGF5ZXJDaHJvbWl1bSopOwpAQCAtMjUwLDExICsyNTgsMTYgQEAgcHJpdmF0ZToKICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHJlbW92ZUZyb21QYXJlbnQuCiAgICAgdm9p
ZCByZW1vdmVDaGlsZChMYXllckNocm9taXVtKik7CiAKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJv
bGxlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uQ29udHJvbGxlcihQYXNzT3duUHRy
PENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPik7CisKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gbV9jaGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAog
ICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOworCiAg
ICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCBk
MGZkMGNlNTIzZDYzODg0YmU5MzJlMWJkNDE2NTgyZjI1NzYyZTQwLi5kZTFjZjhhNjk0YmExYjNm
ZjFjYWYxNzg0NmZkYjFkZTU2MjE4NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCkBAIC03NCw2ICs3NSw4IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtCiAgICAgZWxz
ZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCisgICAgbGF5ZXIt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+c3luY2hyb25pemVBbmltYXRpb25zKGNjTGF5ZXJJbXBs
LT5hbmltYXRpb25Db250cm9sbGVyKCkpOworCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
Y2NMYXllckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVj
MGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYS4uMDAwOWNjODg5ODNhMDY1OWIzOGE2OTNhOTY5Y2E0
YzA3NzY2NTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtNDQs
NiArNDQsOCBAQCBDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1h
dGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisKIHZvaWQgQ0NBY3RpdmVBbmltYXRpb246
OnNldFJ1blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQogewogICAgIGlmIChy
dW5TdGF0ZSA9PSBSdW5uaW5nICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQpAQCAtNjMsNiArNjUs
MjEgQEAgYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBj
b25zdAogICAgICAgICAmJiBtX2l0ZXJhdGlvbnMgKiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlv
bigpIDw9IHRpbWUgLSBzdGFydFRpbWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwogfQogCitib29s
IENDQWN0aXZlQW5pbWF0aW9uOjppc1dhaXRpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3J1
blN0YXRlID09IFdhaXRpbmdGb3JOZXh0VGljaworICAgICAgICB8fCBtX3J1blN0YXRlID09IFdh
aXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0
aW5nRm9yU3RhcnRUaW1lOworfQorCitib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdP
ckhhc1J1bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0gUnVubmluZworICAg
ICAgICB8fCBtX3J1blN0YXRlID09IEZpbmlzaGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0g
QWJvcnRlZAorICAgICAgICB8fCBtX3J1blN0YXRlID09IFBhdXNlZDsKK30KKwogZG91YmxlIEND
QWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBj
b25zdAogewogICAgIGRvdWJsZSB0cmltbWVkID0gbm93OwpAQCAtOTUsNCArMTEyLDM2IEBAIGRv
dWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91Ymxl
IG5vdykgY29uc3QKICAgICByZXR1cm4gZm1vZCh0cmltbWVkLCBtX2FuaW1hdGlvbkN1cnZlLT5k
dXJhdGlvbigpKTsKIH0KIAorUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gQ0NBY3RpdmVB
bmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0Cit7CisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b1JldHVybihhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24obV9h
bmltYXRpb25DdXJ2ZS0+Y2xvbmUoKSwgbV9ncm91cCwgbV90YXJnZXRQcm9wZXJ0eSkpKTsKKyAg
ICB0b1JldHVybi0+bV9ydW5TdGF0ZSA9IG1fcnVuU3RhdGU7CisgICAgdG9SZXR1cm4tPm1faXRl
cmF0aW9ucyA9IG1faXRlcmF0aW9uczsKKyAgICB0b1JldHVybi0+bV9zdGFydFRpbWUgPSBtX3N0
YXJ0VGltZTsKKyAgICB0b1JldHVybi0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZTsKKyAgICB0
b1JldHVybi0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICByZXR1
cm4gdG9SZXR1cm4ucmVsZWFzZSgpOworfQorCit2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzeW5j
aHJvbml6ZVByb3BlcnRpZXMoQ0NBY3RpdmVBbmltYXRpb24qIG90aGVyKQoreworICAgIC8vIEl0
IGlzIHBvc3NpYmxlIGZvciB0aGUgaW1wbCB0aHJlYWQgdG8gaW5pdGlhdGUgYSBydW4gc3RhdGUg
Y2hhbmdlLgorICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBhbmltYXRpb24gd2FzIHdhaXRp
bmcgZm9yIGEgZnV0dXJlIGV2ZW50IHRvIHRha2UKKyAgICAvLyBwbGFjZSwgYW5kIHRoZSBldmVu
dCBoYXMgdGFrZW4gcGxhY2UuIEluIHRoYXQgY2FzZSwgd2Ugd2FudCAndGhpcycgdG8KKyAgICAv
LyBhc3N1bWUgdGhlIGltcGwgdGhyZWFkJ3MgcnVuIHN0YXRlIGFuZCBzdGFydCB0aW1lLgorICAg
IGlmIChpc1dhaXRpbmcoKSAmJiBvdGhlci0+aXNSdW5uaW5nT3JIYXNSdW4oKSkgeworICAgICAg
ICBtX3J1blN0YXRlID0gb3RoZXItPm1fcnVuU3RhdGU7CisgICAgICAgIG1fc3RhcnRUaW1lID0g
b3RoZXItPm1fc3RhcnRUaW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIG90aGVyLT5tX3J1blN0
YXRlID0gbV9ydW5TdGF0ZTsKKyAgICAgICAgb3RoZXItPm1fc3RhcnRUaW1lID0gbV9zdGFydFRp
bWU7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIGluIHN0YXRlIHJlbGF0ZWQgdG8gaXRlcmF0aW9u
cyBhbmQgcGF1c2UgaXMgYWx3YXlzIGluaXRpYXRlZCBmcm9tCisgICAgLy8gdGhlIG1haW4gdGhy
ZWFkLCBzbyBpdCBpcyBzYWZlIHRvIHB1c2ggcHJvcGVydGllcyBpbiB0aGF0IGRpcmVjdGlvbi4K
KyAgICBvdGhlci0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIG90aGVyLT5tX3Bh
dXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAgIG90aGVyLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1f
dG90YWxQYXVzZWRUaW1lOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaAppbmRleCBjMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2MDRlZWU5
ZmJhZDBhM2QxLi42OTQ0OGU1M2IyOTVlZWI0OGQ4MTAzMmEzNDk4M2I2ZjA3ZTg0MDNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKQEAgLTI1LDI0ICsyNSwyNyBAQAogI2lmbmRl
ZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKIAorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBDQ0FuaW1hdGlvbkN1cnZlOwotCiAvLyBBIENDQWN0aXZlQW5pbWF0aW9uLCBjb250YWlucyBh
bGwgdGhlIHN0YXRlIHJlcXVpcmVkIHRvIHBsYXkgYSBDQ0FuaW1hdGlvbkN1cnZlLgogLy8gU3Bl
Y2lmaWNhbGx5LCB0aGUgYWZmZWN0ZWQgcHJvcGVydHksIHRoZSBydW4gc3RhdGUgKHBhdXNlZCwg
ZmluaXNoZWQsIGV0Yy4pLAogLy8gbG9vcCBjb3VudCwgbGFzdCBwYXVzZSB0aW1lLCBhbmQgdGhl
IHRvdGFsIHRpbWUgc3BlbnQgcGF1c2VkLgogY2xhc3MgQ0NBY3RpdmVBbmltYXRpb24geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDQWN0aXZlQW5pbWF0aW9uKTsKIHB1YmxpYzoKICAgICAv
LyBBbmltYXRpb25zIHRoYXQgbXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBl
ZCcgYW5kIGhhdmUgdGhlIHNhbWUgR3JvdXBJRAogICAgIC8vIEdyb3VwZWQgYW5pbWF0aW9ucyBh
cmUgZ3VhcmFudGVlZCB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBubyBvdGhlciBhbmlt
YXRpb25zCiAgICAgLy8gbWF5IGFuaW1hdGUgYW55IG9mIHRoZSBncm91cCdzIHRhcmdldCBwcm9w
ZXJ0aWVzIHVudGlsIGFsbCBhbmltYXRpb25zIGluIHRoZQogICAgIC8vIGdyb3VwIGhhdmUgZmlu
aXNoZWQgYW5pbWF0aW5nLiBOb3RlOiBhbiBhY3RpdmUgYW5pbWF0aW9uJ3MgZ3JvdXAgaWQgYW5k
IHRhcmdldAogICAgIC8vIHByb3BlcnR5IHVuaXF1ZWx5IGlkZW50aWZ5IHRoYXQgYW5pbWF0aW9u
LgotICAgIHR5cGVkZWYgaW50IEdyb3VwSUQ7CisgICAgdHlwZWRlZiBzaXplX3QgR3JvdXBJRDsK
IAogICAgIC8vIEFuaW1hdGlvbnMgYmVnaW4gaW4gb25lIG9mIHRoZSAnd2FpdGluZycgc3RhdGVz
LiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHRpY2sKICAgICAvLyB3aWxsIHN0YXJ0
IHRoZSBuZXh0IHRpbWUgdGhlIGNvbnRyb2xsZXIgYW5pbWF0ZXMuIEFuaW1hdGlvbnMgd2FpdGlu
ZyBmb3IgdGFyZ2V0CkBAIC02OCwxMiArNzEsMjAgQEAgcHVibGljOgogICAgICAgICBPcGFjaXR5
CiAgICAgfTsKIAorICAgIHN0cnVjdCBBbmltYXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmlt
YXRpb25TaWduYXR1cmUoR3JvdXBJRCBncm91cElELCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9w
ZXJ0eSkKKyAgICAgICAgICAgIDogZ3JvdXBJRChncm91cElEKQorICAgICAgICAgICAgLCB0YXJn
ZXRQcm9wZXJ0eSh0YXJnZXRQcm9wZXJ0eSkgeyB9CisgICAgICAgIEdyb3VwSUQgZ3JvdXBJRDsK
KyAgICAgICAgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHk7CisgICAgfTsKKwogICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5p
bWF0aW9uKGN1cnZlLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsgfQorICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0
aW9uKCk7CiAKICAgICBHcm91cElEIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91cDsgfQog
ICAgIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRQcm9wZXJ0eTsgfQpAQCAtOTMsNiArMTA0LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaW5p
c2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdDsKICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7
IHJldHVybiBtX3J1blN0YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZDsg
fQogCisgICAgYm9vbCBpc1dhaXRpbmcoKSBjb25zdDsKKyAgICBib29sIGlzUnVubmluZ09ySGFz
UnVuKCkgY29uc3Q7CisKICAgICBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsg
cmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KICAgICBjb25zdCBDQ0FuaW1hdGlvbkN1
cnZlKiBhbmltYXRpb25DdXJ2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0
KCk7IH0KIApAQCAtMTAwLDYgKzExNCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0aW9u
cywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24uCiAg
ICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0Owog
CisgICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFuaW1h
dGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAgUGFzc093
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiopOworCiBwcml2
YXRlOgogICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4s
IEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5o
CmluZGV4IGRlOTdlMzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMuLjUzM2FiYWZl
ZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1NTE2NjdlZTI0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmgKQEAgLTI1LDYgKzI1LDEwIEBACiAjaWZuZGVmIENDQW5pbWF0aW9uQ3VydmVfaAog
I2RlZmluZSBDQ0FuaW1hdGlvbkN1cnZlX2gKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENDRmxvYXRBbmltYXRpb25DdXJ2ZTsKQEAgLTQxLDYgKzQ1LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgPSAwOwogCiAgICAgY29uc3QgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlKiB0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKICAgICBjb25zdCBDQ1Ry
YW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7
CkBAIC02MCw3ICs2NSw3IEBAIGNsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJs
aWMgQ0NBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSgpIHsgfQogCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdl
dFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdCA9
IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgogICAgIHZp
cnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
blJlc3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uUmVzdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyYzdiYzQ5ZmJlNzM3NmEzMTUwOTcw
MzM2N2E2MjM0ZjQwNDJmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uUmVzdWx0c19oCisjZGVm
aW5lIENDQW5pbWF0aW9uUmVzdWx0c19oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgdG8g
aW5kaWNhdGUgdGhhdCBhbiBhbmltYXRpb24gZXZlbnQgaGFzIHRha2VuIHBsYWNlIG9uIHRoZSBn
aXZlbiBsYXllciBhdCB0aGUgZ2l2ZW4gdGltZS4KK3N0cnVjdCBDQ0FuaW1hdGlvblJlc3VsdCB7
CisgICAgQ0NBbmltYXRpb25SZXN1bHQoaW50IGxheWVySUQsIGRvdWJsZSB0aW1lKQorICAgICAg
ICA6IGxheWVySUQobGF5ZXJJRCkKKyAgICAgICAgLCB0aW1lKHRpbWUpIHsgfQorICAgIGludCBs
YXllcklEOworICAgIGRvdWJsZSB0aW1lOworfTsKKworLy8gVGhpcyBpcyB1c2VkIHRvIGNvbW11
bmljYXRlIGJhY2sgdG8gbWFpbiBhbmltYXRpb24gZW5naW5lIHRoYXQgYWNjZWxlcmF0ZWQgYW5p
bWF0aW9ucyBoYXZlIHN0YXJ0ZWQuCitjbGFzcyBDQ0FuaW1hdGlvblJlc3VsdHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25SZXN1bHRzKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvblJlc3VsdHMoKSB7IH0KKworICAgIFZlY3Rv
cjxDQ0FuaW1hdGlvblJlc3VsdD4mIHN0YXJ0ZWRBbmltYXRpb25zKCkgeyByZXR1cm4gbV9zdGFy
dGVkQW5pbWF0aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxDQ0FuaW1hdGlvblJlc3VsdD4mIHN0
YXRlZEFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ZWRBbmltYXRpb25zOyB9CisK
K3ByaXZhdGU6CisgICAgQ0NBbmltYXRpb25SZXN1bHRzKCkgeyB9CisKKyAgICBWZWN0b3I8Q0NB
bmltYXRpb25SZXN1bHQ+IG1fc3RhcnRlZEFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYTU1
MDM4N2UxNjc1OGVmMjE4NGU0ZTIyN2E1ODBjODIyNjAyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlz
dAorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJv
eFNpemUqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworfQorCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sK
K30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygp
Cit7Cit9CisKKy8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBv
biB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAorLy8gYXJlIGtlcHQgaW4gc3lu
Yy4KK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9u
cyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAg
IHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoY29udHJvbGxlckltcGwpOwor
ICAgIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBy
ZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAg
ICBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhjb250cm9sbGVySW1wbCk7Cit9CisKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxU
aHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sK
KyAgICAvLyBBbnkgYW5pbWF0aW9ucyBmaW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJl
bW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQncyBjb2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsg
KytpKQorICAgICAgICByZW1vdmUoY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25z
W2ldLmdyb3VwSUQsIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJn
ZXRQcm9wZXJ0eSk7CisgICAgY29udHJvbGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmlt
YXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJv
bGxlckltcGwpCit7CisgICAgLy8gQW55IG5ldyBhbmltYXRpb25zIG93bmVkIGJ5IHRoZSBtYWlu
IHRocmVhZCdzIGNvbnRyb2xsZXIgYXJlIGNsb25lZCBhbmQgYWRkZSB0byB0aGUgaW1wbCB0aHJl
YWQncyBjb250cm9sbGVyLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghY29udHJvbGxlckltcGwtPmdldEFj
dGl2ZUFuaW1hdGlvbihtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkpCisgICAgICAgICAgICBjb250cm9sbGVySW1w
bC0+YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAg
IH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9u
c0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNv
bnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9u
cyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRp
b24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJh
bnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsp
IHsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRp
b24oY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgY29udHJv
bGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAg
ICAgIGlmICghY3VycmVudCkKKyAgICAgICAgICAgIGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFu
aW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAg
fQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJv
cGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQor
eworICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhl
cmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFj
aCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVj
cmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVz
cyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50SW1wbCA9IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2
ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50
ID0gZ2V0QWN0aXZlQW5pbWF0aW9uKGN1cnJlbnRJbXBsLT5ncm91cCgpLCBjdXJyZW50SW1wbC0+
dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIEFTU0VSVChjdXJyZW50KTsKKyAgICAgICAgaWYg
KGN1cnJlbnQpCisgICAgICAgICAgICBjdXJyZW50LT5zeW5jaHJvbml6ZVByb3BlcnRpZXMoY3Vy
cmVudEltcGwpOworICAgIH0KK30KKworQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3Vw
SUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBn
cm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0
UHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpy
ZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9h
Y3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJnZXRQcm9wZXJ0eSkgeworICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNhOTYwN2U5ODE0
NmE2YmQ2NTUwM2U3NGYxMDRlYTM4MGM0MTg3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQW5pbWF0aW9uOworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Oworc3RydWN0IEludFNpemU7CitjbGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKKworY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIFRo
ZXNlIGFyZSB2aXJ0dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25z
dCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zm
c2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFu
aW1hdGlvbnMoKTsKKworICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgbGlzdCBvZiBhY3RpdmUgYW5p
bWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBsIHRocmVhZAorICAgIC8vIGFy
ZSBrZXB0IGluIHN5bmMuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2Yg
dGhlIGltcGwgdGhyZWFkIGNvbnRyb2xsZXIuCisgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlv
bnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisKKyAgICAvLyBUaGlzIGlzIGZv
ciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gPiYgYWN0aXZlQW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYWN0aXZlQW5pbWF0aW9uczsg
fQorCitwcm90ZWN0ZWQ6CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAgdm9pZCBwdXNoTmV3QW5pbWF0
aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2
b2lkIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKik7CisgICAgdm9pZCBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBn
ZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisgICAgdm9pZCByZW1vdmUoQ0NBY3RpdmVBbmltYXRp
b246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisKKyAgICBW
ZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuY3BwCmluZGV4IGJiY2E5Y2JkOTA1NWUxZWMxM2NjMGE5NzQ2MzljNWY5NzA4
ODA5OTIuLjM5ZDFiZGMwODZmOGQxY2NmYjRiNDcyMjY2YTBiOWE0ODcwNWU2N2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApA
QCAtMjYsNyArMjYsOSBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCwyMiArNDYsMjIgQEAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NM
YXllckFuaW1hdGlvbkMKIHsKIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpIHsgfQorCit2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVC
ZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGZyYW1lQmVnaW5UaW1lU2Vjcyk7Ci0gICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShmcmFtZUJlZ2luVGltZVNlY3MpOwotICAg
IHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRp
bWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdp
blRpbWVTZWNzLCByZXN1bHRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lKGZyYW1lQmVnaW5UaW1lU2VjcywgcmVzdWx0cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIHJlc3VsdHMpOwog
ICAgIHJlc29sdmVDb25mbGljdHMoZnJhbWVCZWdpblRpbWVTZWNzKTsKICAgICB0aWNrQW5pbWF0
aW9ucyhmcmFtZUJlZ2luVGltZVNlY3MpOwogICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7
Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJl
Z2luVGltZVNlY3MpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFi
aWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1bHRzKTsKIH0KIAogdm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBh
bmltKQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3Rp
dmF0ZSh0aGlzKTsKIH0KIAogQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
IGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkpCkBAIC04
MCwyNSArODIsMjggQEAgYm9vbCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0Fj
dGl2ZUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVz
dWx0cyYgcmVzdWx0cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ld
LT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsK
ICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgcmVzdWx0cy5zdGFydGVkQW5pbWF0
aW9ucygpLmFwcGVuZChDQ0FuaW1hdGlvblJlc3VsdChtX2NsaWVudC0+aWQoKSwgbm93KSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3cpCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1hdGlvblJlc3VsdHMmIHJlc3VsdHMpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnN0YXJ0VGltZSgpIDw9IG5vdykKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpIDw9IG5vdykgewogICAgICAgICAgICAg
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVu
bmluZywgbm93KTsKKyAgICAgICAgICAgIHJlc3VsdHMuc3RhcnRlZEFuaW1hdGlvbnMoKS5hcHBl
bmQoQ0NBbmltYXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5vdykpOworICAgICAgICB9CiAg
ICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93KQordm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzJiByZXN1bHRzKQog
ewogICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgogICAgIFRhcmdldFBy
b3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7CkBAIC0xMzAsNiArMTM1LDcgQEAgdm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHkKICAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbm93KTsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuc3RhcnRl
ZEFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBbmltYXRpb25SZXN1bHQobV9jbGllbnQtPmlkKCksIG5v
dykpOwogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKQEAgLTE3OCw5ICsxODQs
MTAgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRB
bmltYXRpb25zKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKQorICAgICAgICBpZiAo
YWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIG1fZmluaXNoZWRB
bmltYXRpb25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25hdHVyZSgpKTsKICAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpKys7CiAgICAgfQogfQpAQCAtMTk0LDE0ICsyMDEs
MTEgQEAgdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25z
KGRvdWJsZSBub3cpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybTogewogICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUq
IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5hbmltYXRp
b25DdXJ2ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUtPmdldFZhbHVlKHRyaW1tZWQpOworICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0
cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChub3cpKQogICAgICAgICAgICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5p
c2hlZCwgbm93KTsKIAotICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRl
IG9yIHJlbGF0aXZlLiBBYnNvbHV0ZSBmb3Igbm93LgotICAgICAgICAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRvQXBwbHk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShG
bG9hdFNpemUoKSwgdG9BcHBseSk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5z
Zm9ybSh0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggMWFk
MjIzZGJhODIzYTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uYTg0ZmMzOTllOGVkZDYwMjM1
MmNlMDhkZWMxYmE2NTZlYmRiNjUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTI5LDEyICsyOSwxNCBAQAogI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0aW9uUmVzdWx0czsKIGNsYXNzIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKQEAgLTQ0LDE4ICs0NiwyMiBAQCBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KCkgY29uc3QgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCop
OwogCi0gICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHZp
cnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpOworCisgICAgdm9pZCBhbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uUmVzdWx0cyYpOwogCiAg
ICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogCkBAIC02NywxMiAr
NzMsMTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwor
CiAgICAgLy8gVGhlIGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KICAgICBleHBsaWNp
dCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsQ2xpZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0
VGljayhkb3VibGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWUoZG91YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uUmVzdWx0cyYpOworICAgIHZv
aWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1h
dGlvblJlc3VsdHMmKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25SZXN1bHRzJik7CiAgICAgdm9pZCBy
ZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOwogICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFuaW1h
dGlvbnMoKTsKIApAQCAtODAsNiArODgsNyBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8T3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKKyAgICBWZWN0b3I8Q0NBY3Rp
dmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZT4gbV9maW5pc2hlZEFuaW1hdGlvbnM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXgg
ODFmOTcxMmUwZmFjMGY5ODEyODg4ZGEyZTczZmYzM2VmZDYwNjVhNC4uZTg5Mjk4ZTFmM2QzM2E4
YTBkZGIyNDE2MzQ3NDYxNzJmM2MxNDE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYxLDYgKzYyLDcgQEAg
Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZHJhd09wYWNpdHkoMCkK
ICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9kZWJ1Z0JvcmRl
cldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDdiYWUyMDE3NDRiNGVjMjA4
MTRmMzA1MjhhYjZiY2YyZDJkODc5MmQuLjQzYmZiYTdlZTg3M2YwMzAwMzZmNDIxOWIxMjJmYmEw
MzZkMDI1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlICJjYy9DQ1Jl
bmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MCwxNiArNDEsMjYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNs
YXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMg
UmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVm
Q291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBj
cmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVy
SW1wbChpZCkpOwogICAgIH0KKworICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAg
ICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICB2aXJ0dWFsIH5DQ0xheWVy
SW1wbCgpOwogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCkBAIC02NSw4ICs3Niw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CiAg
ICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYUxh
eWVyLmdldCgpOyB9CiAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7IH0K
LQogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdJRDsgfQogI2VuZGlmCkBAIC0xMDcsOSArMTE2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7
IH0KIAotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgZmxvYXQgb3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uOyB9CiAKQEAgLTEyNSw5ICsxMzEsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KICAgICB2b2lk
IHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KICAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApAQCAtMTUwLDcgKzE1
Myw2IEBAIHB1YmxpYzoKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRh
cmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAotICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6
ZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudEJvdW5kczsgfQpAQCAtMTk5LDYgKzIwMSw4IEBAIHB1YmxpYzoKICAgICBib29s
IGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb3BlcnR5Q2hh
bmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsKIAor
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogYW5pbWF0aW9uQ29udHJvbGxlcigp
IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzA2LDYgKzMxMCw5IEBAIHByaXZh
dGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1
cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMg
YW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisKKyAgICAv
LyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbD4gbV9hbmltYXRpb25Db250cm9sbGVyOwogfTsKIAogdm9p
ZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZpcnN0
LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0
ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDI4MjMwMGIxMDdjODhh
YjUxYTMyNTcyMDhjYjI4N2M3MTUzMDdjNmQuLmQ2ZmUwNTIzMmQzOTA0NDYwMjczMjA0YzExZmM0
ODllZmJkN2NlOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNp
bmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1
bHRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgpAQCAtMTcxLDkgKzE3MiwxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0
T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYg
b25lIGV4aXN0cyBhdCBhbGwuLi4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RM
YXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7
Ci0gICAgZWxzZQorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKCk7Cisg
ICAgfSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAKICAgICBob3N0
SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CkBAIC0yNTksNiArMjYx
LDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdygpCiAgICAgICAgIG1f
Y2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c2V0QW5pbWF0aW9uUmVzdWx0cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0
cykKK3sKKyAgICBBU1NFUlQoQ0NUaHJlYWRQcm94eTo6aXNNYWluVGhyZWFkKCkpOworICAgIC8v
IEltcGxlbWVudGVkIGhlcmU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NzY0NgorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogewogICAgIGlmIChtX3Jvb3RMYXllciA9PSBy
b290TGF5ZXIpCkBAIC0zNDIsOSArMzUwLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRC
ZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAg
ICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAgaWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAg
IGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAgZWxzZQorICAgICAg
ICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKCk7CisgICAgfSBlbHNlCiAgICAgICAg
IGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmgKaW5kZXggZTgyZjI5ODMwNDdlZmNiMTNhMDk5ZjlhZGI3NTJmMmIxOGFlZjUxNy4uZTE4M2Jl
NTI0MzVmZTNjODM4NjhlMWIyNDNhYTJhNTc1OGQ5YjRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmgKQEAgLTQxLDYgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBDQ0FuaW1hdGlvblJlc3VsdHM7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3Mg
Q0NUZXh0dXJlVXBkYXRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwpAQCAtMTYzLDYgKzE2
NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKICAgICB2
b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lkIHNldEFuaW1hdGlvblJlc3VsdHMoUGFz
c093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KTsKKwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RM
YXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAg
ICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZTQ2YWUzMjQ5ZjM4MTVjZDliMDE5
MWE5Mjg3MWZhMTdmMmE5ZGI4Ni4uMmY3ZTViYTZlNWFhZDM4Yjg3MTkzNDI3ZTBiZDczMzcxMTJh
NDA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaCIKQEAgLTU3LDYgKzU4LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NM
YXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUK
ICAgICAsIG1fc2VudFBhZ2VTY2FsZURlbHRhKDEpCiAgICAgLCBtX21pblBhZ2VTY2FsZSgwKQog
ICAgICwgbV9tYXhQYWdlU2NhbGUoMCkKKyAgICAsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKHRydWUp
CiAgICAgLCBtX3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxzZSkKIHsKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtOTcsMjEgKzk5LDI3IEBAIEdyYXBoaWNzQ29udGV4dDNE
KiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogewotICAgIGlmICghbV9wYWdl
U2NhbGVBbmltYXRpb24pCisgICAgaWYgKCFtX3BhZ2VTY2FsZUFuaW1hdGlvbiAmJiAhbV9uZWVk
c0FuaW1hdGVMYXllcnMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2Nyb2xsVG90
YWwgPSB0b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9s
bExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9u
KSB7CisgICAgICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3JvbGxMYXllcklt
cGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsRGVsdGEoKSk7
CiAKLSAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+cGFnZVNjYWxl
QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUpOwotICAgIEludFNpemUgbmV4
dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVC
ZWdpblRpbWVNcyk7Ci0gICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9wYWdlU2NhbGVEZWx0YSk7
Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBzY3JvbGxUb3Rh
bCk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisgICAgICAg
IHNldFBhZ2VTY2FsZURlbHRhKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUo
ZnJhbWVCZWdpblRpbWVNcykgLyBtX3BhZ2VTY2FsZSk7CisgICAgICAgIEludFNpemUgbmV4dFNj
cm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdp
blRpbWVNcyk7CisgICAgICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEp
OworICAgICAgICBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9s
bFRvdGFsKTsKIAotICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNBbmltYXRpb25Db21w
bGV0ZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSkgewotICAgICAgICBtX3BhZ2VTY2FsZUFuaW1h
dGlvbi5jbGVhcigpOwotICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJl
YWQoKTsKKyAgICAgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBs
ZXRlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpKSB7CisgICAgICAgICAgICBtX3BhZ2VTY2FsZUFu
aW1hdGlvbi5jbGVhcigpOworICAgICAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CisgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAobV9uZWVkc0FuaW1hdGVM
YXllcnMgJiYgbV9yb290TGF5ZXJJbXBsLmdldCgpKQorICAgICAgICBhbmltYXRlTGF5ZXJzKGZy
YW1lQmVnaW5UaW1lTXMgLyAxMDAwKTsKKworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBv
aW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9u
TXMpCkBAIC0yNDUsNiArMjUzLDIzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1p
emVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQogICAgICAgICBwYXNzZXNb
aV0tPm9wdGltaXplUXVhZHMoKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmlt
YXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgZnJhbWVCZWdp
blRpbWVTZWNzLCBDQ0FuaW1hdGlvblJlc3VsdHMmIHJlc3VsdHMpCit7CisgICAgYm9vbCBuZWVk
c0FuaW1hdGVMYXllcnMgPSBmYWxzZTsKKworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbCogY3VycmVudENvbnRyb2xsZXIgPSBjdXJyZW50LT5hbmltYXRpb25Db250cm9sbGVyKCk7
CisgICAgY3VycmVudENvbnRyb2xsZXItPmFuaW1hdGUoZnJhbWVCZWdpblRpbWVTZWNzLCByZXN1
bHRzKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKQor
ICAgICAgICBuZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjdXJyZW50LT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChh
bmltYXRlTGF5ZXJzUmVjdXJzaXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCksIGZyYW1l
QmVnaW5UaW1lU2VjcywgcmVzdWx0cykpCisgICAgICAgICAgICBuZWVkc0FuaW1hdGVMYXllcnMg
PSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBuZWVkc0FuaW1hdGVMYXllcnM7Cit9CisKIElu
dFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8v
IFRPRE8oYWVsaWFzKTogSGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4g
VGhpbmsgb2YKQEAgLTU1MSw0ICs1NzYsMjAgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXRGdWxsUm9vdExheWVyRGFtYWdlKCkKICAgICB9CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6YW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQoreworICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsKKworICAgIE93blB0cjxDQ0FuaW1h
dGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CisKKyAg
ICBtX25lZWRzQW5pbWF0ZUxheWVycyA9IGFuaW1hdGVMYXllcnNSZWN1cnNpdmUobV9yb290TGF5
ZXJJbXBsLmdldCgpLCBmcmFtZUJlZ2luVGltZVNlY3MsICpyZXN1bHRzKTsKKworICAgIGlmICgh
cmVzdWx0cy0+c3RhcnRlZEFuaW1hdGlvbnMoKS5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50
LT5wdXNoQW5pbWF0aW9uUmVzdWx0c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChyZXN1bHRzLnJl
bGVhc2UoKSk7CisKKyAgICBpZiAobV9uZWVkc0FuaW1hdGVMYXllcnMpCisgICAgICAgIG1fY2xp
ZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggNDMzZmFkYTY4
MDhlNzQ3MjcwYmFjYzRjNzk1OTkwODBkMDU3NzU1OS4uOGZjMmJiYWVkNjY0ZWM4YTU2MGNmYWMy
NDcyY2M3NDg3OTgyNDY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApA
QCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwog
Y2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFzcyBDQ1BhZ2VTY2FsZUFuaW1hdGlvbjsKIGNs
YXNzIENDTGF5ZXJJbXBsOwpAQCAtNDgsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXNo
QW5pbWF0aW9uUmVzdWx0c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5p
bWF0aW9uUmVzdWx0cz4pID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0
aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRl
CkBAIC0xMTcsOCArMTIwLDE1IEBAIHB1YmxpYzoKICAgICAvLyBsYXllciBwcm9wZXJ0aWVzLiBU
aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgZGFtYWdlIHJlZ2lvbiBmb3IgdGhlIG5leHQgZHJh
dyBjeWNsZS4KICAgICB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsKIAorICAgIGJvb2wg
bmVlZHNBbmltYXRlTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7
IH0KKyAgICB2b2lkIHNldE5lZWRzQW5pbWF0ZUxheWVycygpIHsgbV9uZWVkc0FuaW1hdGVMYXll
cnMgPSB0cnVlOyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0
IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisKKyAgICAvLyB2aXJ0
dWFsIGZvciB0ZXN0aW5nLgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBm
cmFtZUJlZ2luVGltZVNlY3MpOworCiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9j
bGllbnQ7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1i
ZXI7CkBAIC0xMzMsNiArMTQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1Jl
bmRlclBhc3NMaXN0Jik7CisgICAgYm9vbCBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJ
bXBsKiwgZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25SZXN1bHRzJik7CiAg
ICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwpAQCAtMTQ4LDYgKzE1OSw4IEBAIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9zZW50UGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgbV9taW5QYWdlU2Nh
bGUsIG1fbWF4UGFnZVNjYWxlOwogCisgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBuZWNl
c3NhcnkgdG8gdHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3JzLgor
ICAgIGJvb2wgbV9uZWVkc0FuaW1hdGVMYXllcnM7CiAgICAgYm9vbCBtX3BpbmNoR2VzdHVyZUFj
dGl2ZTsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2NhbGVBbmlt
YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDA3MjY1
ZGI3NzI4MGEwZTc1MzZhN2VlMGQ5NTAwMThhY2VjOTNkNmMuLjMwMTY0OWZjOTZjZWVlNGNiNzlh
N2E1MWMxNTQ5ODE2YTg1NWJkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25SZXN1bHRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtMjI4LDYgKzIyOSwxMyBAQCB2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CiB9CiAKK3ZvaWQg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHNUb01haW5UaHJlYWRPbklt
cGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMpCit7CisgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5U
aHJlYWQgbWFpbjsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvblJlc3VsdHMocmVz
dWx0cyk7Cit9CisKIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5n
LiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaAppbmRleCBhOTQ0MDVmM2Q5M2VjYTIwOGRlMjBmZGY4YmRhYzY5ZjA0
OTdmMzc0Li5mOGJmZGE1ZWFlYmI0YjdiMmE5NzIwMmUwNzJhNjBkZTQ4ZWNhODIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRzOwogY2xhc3MgQ0NMYXll
clRyZWVIb3N0OwogCiBjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5IDogcHVibGljIENDUHJveHks
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewpAQCAtNjIsNiArNjMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbklt
cGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0
LT5zZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHB1c2hBbmltYXRpb25SZXN1
bHRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRz
Pik7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdl
dCBkb2VzIHRoZSBzY2hlZHVsaW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsK
QEAgLTExMCw2ICsxMTIsMjQgQEAgcHVibGljOgogICAgIH0KIH07CiAKKy8vIEZvciB1c2UgaW4g
dGhlIHNpbmdsZS10aHJlYWRlZCBjYXNlLiBJbiBkZWJ1ZyBidWlsZHMsIGl0IHByZXRlbmRzIHRo
YXQgdGhlCisvLyBjb2RlIGlzIHJ1bm5pbmcgb24gdGhlIG1haW4gdGhyZWFkIHRvIHNhdGlzZnkg
YXNzZXJ0aW9uIGNoZWNrcy4KK2NsYXNzIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCB7CitwdWJs
aWM6CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkKCkKKyAgICB7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICBDQ1Byb3h5OjpzZXRDdXJyZW50VGhyZWFkSXNJbXBsVGhyZWFkKGZh
bHNlKTsKKyNlbmRpZgorICAgIH0KKyAgICB+RGVidWdTY29wZWRTZXRNYWluVGhyZWFkKCkKKyAg
ICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBDQ1Byb3h5OjpzZXRDdXJyZW50VGhy
ZWFkSXNJbXBsVGhyZWFkKHRydWUpOworI2VuZGlmCisgICAgfQorfTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggYjlh
NjZiZDQwNmJkNDI3MGJlMDM1MzhkOGY4OTYwYTgzMDc1MzA5NS4uOGQ4Y2RkNWU2NzNjZTI2OGJj
MjkxNmQwMGUyODE2ZWUzNTJlMzJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uUmVzdWx0cy5oIgogI2lu
Y2x1ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1l
UmF0ZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgpAQCAtMjQ2
LDYgKzI0NywxMyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCkKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0TmVlZHNDb21taXQoKTsKIH0K
IAordm9pZCBDQ1RocmVhZFByb3h5OjpwdXNoQW5pbWF0aW9uUmVzdWx0c1RvTWFpblRocmVhZE9u
SW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4gcmVzdWx0cykKK3sKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpwdXNoQW5pbWF0aW9uUmVzdWx0cyIsIHRoaXMsIDApOworICAgIG1fbWFpblRocmVhZFByb3h5
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnB1c2hB
bmltYXRpb25SZXN1bHRzLCByZXN1bHRzKSk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNSZWRyYXcoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC01NDksNiAr
NTU3LDE0IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpCiAg
ICAgbV9sYXllclRyZWVIb3N0LT5kaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CiB9CiAKK3ZvaWQg
Q0NUaHJlYWRQcm94eTo6cHVzaEFuaW1hdGlvblJlc3VsdHMoUGFzc093blB0cjxDQ0FuaW1hdGlv
blJlc3VsdHM+IHJlc3VsdHMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0QW5pbWF0aW9uUmVzdWx0cyhyZXN1bHRzKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplSW1wbE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbklt
cGxUaHJlYWQiLCB0aGlzLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCA4N2FkMjdk
MGVhYzVmODVkMjc2YWI3ZDA4OWJkYmUyZDc4OTMyMjMzLi4yZWU5NDdjYzBjNTJjNjA4NmE4YzU4
MGE3ZTZlNjM5MzM3ZmEyZmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC0zNCw2ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NBbmltYXRpb25SZXN1bHRz
OwogY2xhc3MgQ0NJbnB1dEhhbmRsZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBD
Q1NjaGVkdWxlcjsKQEAgLTY5LDYgKzcwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFuaW1hdGlvblJlc3VsdHNU
b01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+KTsK
IAogICAgIC8vIENDU2NoZWR1bGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBi
b29sIGNhbkRyYXcoKTsKQEAgLTg1LDYgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJlZ2lu
RnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUs
IFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4pOwogICAgIHZvaWQgZGlkQ29tbWl0QW5k
RHJhd0ZyYW1lKCk7CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CisgICAgdm9p
ZCBwdXNoQW5pbWF0aW9uUmVzdWx0cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4pOwog
CiAgICAgLy8gQ2FsbGVkIG9uIGltcGwgdGhyZWFkCiAgICAgc3RydWN0IFJlYWRiYWNrUmVxdWVz
dCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBjODUwMmY1NzNjNDUxNzAxNzM1
NDg1YWY0NzUyM2U3NTEyOTRjODNkLi5lODgyMzkyOTI4MDYwYWIyNWUxZGEyZTcwNzgyOGQ1ZmY2
N2M1NDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTYxLDYgKzYxLDcgQEAK
ICAgICAgICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFj
a2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFu
aW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFu
aW1hdGlvblRlc3QuY3BwCmluZGV4IDNlOTNkOTVkZTg2OGEyZjNhMjVhYjAzMDIwZWQyNWMxZDBl
YzQ5MGEuLjI2MWVkZmZmODUyZjMzYzEzYjQ5MjFiZTcwZTYwOWU0MmY1ZTJiOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVz
dC5jcHAKQEAgLTI1LDI0ICsyNSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVk
ZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3Vy
dmUuaCIKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKIAogI2luY2x1ZGUgPGdt
b2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0
czsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBGYWtlRmxvYXRBbmltYXRpb24g
OiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdl
dFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLX07CituYW1lc3BhY2Ugewog
CiBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24oaW50
IGl0ZXJhdGlvbnMpCiB7Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVybihD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb24p
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwogICAgIHRvUmV0dXJuLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOwogICAgIHJldHVybiB0
b1JldHVybi5yZWxlYXNlKCk7CiB9CkBAIC0xNjQsNCArMTYwLDQgQEAgVEVTVChDQ0FjdGl2ZUFu
aW1hdGlvblRlc3QsIElzRmluaXNoZWQpCiAgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hl
ZCgpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9u
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdiZDhhMmZlMjE1MWU2OGYyZDU2YzZjOWEwNDdiNmNkOTgzZWY5YjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9u
VGVzdENvbW1vbi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NB
bmltYXRpb25UZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKwor
I2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBmbG9h
dCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQ
YXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOwor
ICAgIH0KK307CisKK2NsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIFdlYkNv
cmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0K
KyAgICB2aXJ0dWFsIH5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigpIHsgfQorCisgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmly
dHVhbCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdGltZSwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworICAgIH0KKworICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCp0
aGlzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9uOworfTsKKwor
Y2xhc3MgRmFrZUZsb2F0VHJhbnNpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0
aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0
aW9uLCBmbG9hdCBmcm9tLCBmbG9hdCB0bykKKyAgICAgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9u
KQorICAgICAgICAsIG1fZnJvbShmcm9tKQorICAgICAgICAsIG1fdG8odG8pCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgfkZha2VGbG9hdFRyYW5zaXRpb24oKSB7IH0KKworICAgIHZpcnR1
YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZp
cnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0CisgICAgeworICAgICAgICB0
aW1lIC89IG1fZHVyYXRpb247CisgICAgICAgIGlmICh0aW1lID49IDEpCisgICAgICAgICAgICB0
aW1lID0gMTsKKyAgICAgICAgcmV0dXJuICgxIC0gdGltZSkgKiBtX2Zyb20gKyB0aW1lICogbV90
bzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25D
dXJ2ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGRvdWJs
ZSBtX2R1cmF0aW9uOworICAgIGZsb2F0IG1fZnJvbTsKKyAgICBmbG9hdCBtX3RvOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uVGVzY3RD
b21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKaW5kZXggM2Q1MGQw
NmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5NWIwZjUzYi4uOTE0MGQ3ZTE5OWU1Y2I3ZmZjZDNj
NTExNjdmZWZjMTYyN2E3ZTk5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qu
Y3BwCkBAIC0yNCwxNiArMjQsMTYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVk
ZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgotCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRp
b25SZXN1bHRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKQEAgLTQy
LDc0ICs0MiwzOSBAQCBwdWJsaWM6CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQoKSA6IG1fb3Bh
Y2l0eSgwKSB7IH0KICAgICB2aXJ0dWFsIH5GYWtlQ29udHJvbGxlckNsaWVudCgpIHsgfQogCisg
ICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBmbG9h
dCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAg
dmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zv
cm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0
ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXIpCi0gICAgewotICAg
ICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4mIGFjdGl2ZUNvbnRyb2xs
ZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQorICAgIHZpcnR1YWwgY29uc3Qg
SW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAogcHJpdmF0ZToK
ICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zv
cm07Ci0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+IG1fYWN0aXZl
Q29udHJvbGxlcnM7Ci19OwotCi1jbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1Ymxp
YyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlvbihkdXJhdGlvbikgeyB9Ci0g
ICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9
Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0aW1lKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgSW50U2l6ZSBtX2JvdW5k
czsKIH07CiAKLWNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJh
dGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlv
bikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAgICAgLCBtX3RvKHRvKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVy
YXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAot
ICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwotICAgICAgICBpZiAodGltZSA+PSAx
KQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9m
cm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX2R1cmF0
aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBmbG9hdCBtX3RvOwotfTsKK1Bhc3NPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5p
bWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9w
ZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShj
dXJ2ZSwgaWQsIHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9w
YWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogeworICAgIE93blB0cjxD
Q0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7
CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5y
ZWxlYXNlKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqcmVz
dWx0cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTExNywyMCArODIs
MjEgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsVHJh
bnNpdGlvbikKIC8vIFRlc3RzIHRoYXQgdHdvIHF1ZXVlZCBhbmltYXRpb25zIGFmZmVjdGluZyB0
aGUgc2FtZSBwcm9wZXJ0eSBydW4gaW4gc2VxdWVuY2UuCiBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQogeworICAgIE93blB0cjxDQ0FuaW1h
dGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpy
ZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpyZXN1bHRzKTsKICAgICBF
WFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTM4LDIyICsxMDQsMjMgQEAgVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVldWluZykKIC8v
IFRlc3RzIGludGVycnVwdGluZyBhIHRyYW5zaXRpb24gd2l0aCBhbm90aGVyIHRyYW5zaXRpb24u
CiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEludGVycnVwdCkKIHsK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0
czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRk
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsK
ICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMC41KTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAuNSwgKnJlc3VsdHMpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfRVEo
MC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTYxLDIzICsxMjgsMjQgQEAgVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCiAvLyBUZXN0cyBzY2hlZHVs
aW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aGVuIG9ubHkgb25lIHByb3BlcnR5
IGlzIGZyZWUuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVk
dWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQogeworICAgIE93blB0cjxDQ0FuaW1h
dGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24o
MSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15
Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLCAqcmVzdWx0cyk7CiAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZs
b2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAgICAv
LyBUaGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRpbWUgMSBh
bmQgc2hvdWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDIsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogfQpAQCAtMTg3LDI5ICsxNTUsMzAgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIC8v
IGZvciBib3RoIHRvIGZpbmlzaCkuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKIHsKKyAgICBPd25QdHI8
Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRlKCkp
OwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRk
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
LSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBBbmltcyB3aXRoIGlk
IDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwogICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5p
c2hlZCBhdCB0aW1lIDEsIGJ1dCB0aGUgZ3JvdXAKICAgICAvLyBvZiBhbmltYXRpb25zIHdpdGgg
aWQgMSBkb24ndCBmaW5pc2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAogICAg
IC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqcmVzdWx0cyk7CiAgICAgLy8gU2hvdWxk
IG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0
aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIgYW5kIHNob3VsZCBiZQogICAgIC8vIGRvbmUgYnkg
dGltZSAzCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDMsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpA
QCAtMjE3LDIyICsxODYsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAvLyBUZXN0cyBzY2hlZHVs
aW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgogVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKIHsKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0czo6Y3JlYXRl
KCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0
U3RhcnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpy
ZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpyZXN1bHRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogfQpAQCAtMjQwLDI4ICsyMTAsMjkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKIC8vIFRlc3RzIHNjaGVkdWxp
bmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCdzIGludGVycnVwdGlu
ZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKIHsK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25SZXN1bHRzPiByZXN1bHRzKENDQW5pbWF0aW9uUmVzdWx0
czo6Y3JlYXRlKCkpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29u
dHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAuNWYs
IDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5n
Rm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwogICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0
cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKnJlc3VsdHMpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI3MCwz
NCArMjQxLDM1IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2No
ZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAvLyBhbmQgdGhlcmUgaXMgeWV0
IGFub3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1
bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9u
UmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKICAgICBGYWtl
Q29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41
ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAg
dG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFz
ZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAz
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCiAgICAgLy8gRmlyc3QgMnMgb3BhY2l0
eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKnJlc3VsdHMpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBk
dW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMywg
KnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgKnJlc3VsdHMpOwogICAg
IEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMzA1LDY0ICsyNzcsNjYgQEAg
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRp
b25JbnRlcnJ1cHRzUnVubmluZ0FuaW0KIC8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9u
IGxvb3BzIGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCiBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQogeworICAg
IE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpj
cmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0SXRlcmF0
aW9ucygzKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqcmVzdWx0
cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMS4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqcmVzdWx0cyk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEu
NzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKnJlc3VsdHMpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1KTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjc1LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMywgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
CiAKICAgICAvLyBKdXN0IGJlIGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogLy8gVGVzdCB0aGF0IGFuIGluZmluaXRlbHkgbG9v
cGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4KIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5nKQogeworICAgIE93
blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVh
dGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQg
aWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuMjUsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1
LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxMDczNzQxODI0LjI1LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYs
IGR1bW15Lm9wYWNpdHkoKSk7CiAKQEAgLTM3NSw4MCArMzQ5LDY2IEBAIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5nKQogLy8gVGVzdCB0aGF0
IHBhdXNpbmcgYW5kIHJlc3VtaW5nIHdvcmsgYXMgZXhwZWN0ZWQuCiBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIFBhdXNlUmVzdW1lKQogeworICAgIE93blB0cjxDQ0Fu
aW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRpb25SZXN1bHRzOjpjcmVhdGUoKSk7CiAg
ICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwot
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMC41LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UGF1c2VkLCAwLjVmKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVm
LCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0
aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRy
b2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgMTAyNCk7CiAKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAy
NC4yNSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAy
NC41LCAqcmVzdWx0cyk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0
aW9uKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvblJlc3VsdHM+IHJlc3VsdHMoQ0NBbmltYXRp
b25SZXN1bHRzOjpjcmVhdGUoKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAK
ICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEsICpyZXN1bHRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7
CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5p
bWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMiwgKnJlc3VsdHMpOwogICAgIEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwogfQogCi0vLyBUZXN0cyB0aGF0IGFkZGluZyBhbiBhbmltYXRpb24gdG8gdGhlIGNvbnRyb2xs
ZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIG9uIHRoZSBjb250cm9sbGVyIGNsaWVu
dAotLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRoZSBjb250cm9sbGVyIHRvIHRoZSBsaXN0IG9m
IGFjdGl2ZSBjb250cm9sbGVyKS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgRGlkQWN0aXZhdGUpCi17Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0K
LSAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUo
KSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBkdW1teS5hY3RpdmVD
b250cm9sbGVycygpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNvbnRyb2xsZXIuZ2V0KCksIGR1
bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOwotfQotCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcAppbmRleCBmNTk4OTNkZTkwNjQxOGY4Y2JkNzU3NDBhZTI5MzllMjNjYzIzNTBhLi5h
NDkxNzYwMGY0OGM2NWViODUwMzIwM2Y3MTYxYjZkOWY0NzBmY2NjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZl
cnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
ZHJhd09uSW1wbFRocmVhZCgpIHsgbV9kaWRSZXF1ZXN0UmVkcmF3ID0gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIHsgbV9kaWRSZXF1ZXN0Q29t
bWl0ID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXNoQW5pbWF0aW9uUmVzdWx0c1RvTWFp
blRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uUmVzdWx0cz4pIHsgfQog
CiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xh
eWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggZmM0MTRmNzM5NzE0NTgzYWRhMWE2
MzU2Y2E0MmEwNThkZjIzNDUxZC4uMjBiZjI3NzMzZDBlNTQ3N2QzNTE3YWUyMGI5Yjg2YTMyYTNj
ZGFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1
ZGUgIkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJDb250
ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
IgpAQCAtMzQsNiArMzUsOCBAQAogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgImNjL0ND
QWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgiCkBAIC00
NywxMSArNTAsMTEgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgbmFtZXNwYWNlIFdU
RjsKIAotbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVXNlZCBieSB0ZXN0
IHN0dWJzIHRvIG5vdGlmeSB0aGUgdGVzdCB3aGVuIHNvbWV0aGluZyBpbnRlcmVzdGluZyBoYXBw
ZW5zLgogY2xhc3MgVGVzdEhvb2tzIHsKQEAgLTU5LDYgKzYyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChDQ0xh
eWVyVHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoQ0NM
YXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNj
YWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFu
aW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCkgeyB9CkBAIC05MCw2ICs5NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdGVzdEhvb2tz
LT5kcmF3TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQorICAg
IHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhmcmFtZUJlZ2lu
VGltZVNlY3MpOworICAgICAgICBtX3Rlc3RIb29rcy0+YW5pbWF0ZUxheWVycyh0aGlzKTsKKyAg
ICB9CisKIHByaXZhdGU6CiAgICAgTW9ja0xheWVyVHJlZUhvc3RJbXBsKFRlc3RIb29rcyogdGVz
dEhvb2tzLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCogY2xpZW50KQogICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGwoc2V0dGluZ3MsIGNs
aWVudCkKQEAgLTEzMSw2ICsxNDIsMjIgQEAgcHJpdmF0ZToKICAgICBUZXN0SG9va3MqIG1fdGVz
dEhvb2tzOwogfTsKIAorLy8gQWRhcHRzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIGZvciB0
ZXN0LgorY2xhc3MgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9j
a0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgfQorCitw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQorICAgIHsKKyAgICAgICAg
YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMS4wZiwgMC4wZikpLCAwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9Owor
CiBjbGFzcyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFj
a2luZyA6IHB1YmxpYyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEV2l0aFRleHR1cmVUcmFja2luZz4gY3JlYXRlKEF0dHJpYnV0ZXMgYXR0cnMpCkBAIC0yMjUs
NyArMjUyLDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2No
ZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUo
KQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTW9ja0xheWVyVHJlZUhv
c3RDbGllbnQoVGVzdEhvb2tzKiB0ZXN0SG9va3MpIDogbV90ZXN0SG9va3ModGVzdEhvb2tzKSB7
IH0KQEAgLTI1NSw2ICsyODQsMTEgQEAgcHVibGljOgogICAgICAgICBjYWxsT25NYWluVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmltYXRlLCB0aGlzKTsKICAg
ICB9CiAKKyAgICB2b2lkIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKQorICAgIHsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFkZEFu
aW1hdGlvbiwgdGhpcyk7CisgICAgfQorCiAgICAgdm9pZCBwb3N0U2V0TmVlZHNDb21taXRUb01h
aW5UaHJlYWQoKQogICAgIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhv
c3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29tbWl0LCB0aGlzKTsKQEAgLTI3MCw3ICszMDQsNiBA
QCBwdWJsaWM6CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6
ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRDb21taXQsIHRoaXMpOwogICAgIH0KIAotCiAgICAg
dm9pZCBwb3N0U2V0VmlzaWJsZVRvTWFpblRocmVhZChib29sIHZpc2libGUpCiAgICAgewogICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKHZpc2libGUgPyBDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNw
YXRjaFNldFZpc2libGUgOiBDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldEludmlzaWJs
ZSwgdGhpcyk7CkBAIC0zMTMsNiArMzQ2LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgICB0ZXN0
LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQW5pbWF0ZSgpOwogICAgIH0KIAorICAgIHN0YXRp
YyB2b2lkIGRpc3BhdGNoQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpCisgICAgeworICAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7CisgICAgICBBU1NFUlQodGVz
dCk7CisgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVIb3N0ICYmIHRlc3QtPm1fbGF5ZXJUcmVl
SG9zdC0+cm9vdExheWVyKCkpCisgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290
TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtleWZyYW1lVmFsdWVMaXN0KEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAiIiwgMC4wKTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZUFuZENvbW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAg
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC00NjMsNiArNTA1LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9j
a0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBt
X3NldHRpbmdzKTsKICAgICBBU1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIHJvb3RM
YXllci0+c2V0QW5pbWF0aW9uQ29udHJvbGxlcihNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpjcmVhdGUoKSk7CiAKICAgICBtX2JlZ2lubmluZyA9IHRydWU7CiAgICAgYmVnaW5UZXN0KCk7
CkBAIC03ODksNiArODMyLDQ0IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNB
bmltYXRlSW5zaWRlQW5pbWF0aW9uQ2FsbGJhY2ssIHJ1bk11bHRpVGhyZWFkCiAgICAgcnVuVGVz
dFRocmVhZGVkKCk7CiB9CiAKKy8vIEFkZCBhIGxheWVyIGFuaW1hdGlvbiBhbmQgY29uZmlybSB0
aGF0IENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMgZG9lcyBnZXQKKy8vIGNhbGxl
ZCBhbmQgY29udGludWVzIHRvIGdldCBjYWxsZWQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0
QWRkQW5pbWF0aW9uIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1
YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKCkKKyAgICAgICAgOiBt
X251bUFuaW1hdGVzKDApCisgICAgICAgICwgbV9sYXllclRyZWVIb3N0SW1wbCgwKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBv
c3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9udW1BbmltYXRlcykgeworICAgICAgICAgICAgbV9udW1Bbmlt
YXRlcysrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIGludCBtX251bUFuaW1hdGVzOworICAgIENDTGF5ZXJUcmVlSG9zdElt
cGwqIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVz
dEFkZEFuaW1hdGlvbiwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7
Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxTaW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCAxNTU3YTdkOTMyMmNjNmJlMjA2YmY1
MGIwMGMwZjQ3MDYzYzU0NzhiLi5mOWI4ODFlMjY5NGE4ZjYwMGQ4Y2MzMDVjMTM4ZDFhYzE5OGNl
ODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJv
bml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5j
aHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2LDMxIEBACiAKICNpbmNsdWRlICJUcmVlU3lu
Y2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIK
KyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIK
ICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKK3VzaW5nIHRlc3Rpbmc6OlRlc3Q7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJlZVN5bmNocm9uaXplclRlc3QgOiBwdWJsaWMgVGVz
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKiBnZXRB
bmltYXRpb25Db250cm9sbGVyKExheWVyQ2hyb21pdW0qIGxheWVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxheWVyLT5hbmltYXRpb25Db250cm9sbGVyKCk7CisgICAgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2UgewogCkBAIC0xMTYsNyArMTM0LDcgQEAgdm9p
ZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllcklt
cGwqIGNjTGF5ZXIpCiB9CiAKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBz
eW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0cnlpbmcgdG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxh
eWVycy4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5
KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0eSkK
IHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMTI5
LDcgKzE0Nyw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJv
bUVtcHR5KQogfQogCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSBhbmQgc3luY2hy
b25pemVzIGl0IGF0dGVtcHRpbmcgdG8gcmV1c2Ugc29tZSBsYXllcnMKLVRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2luZ0xheWVycykKK1RFU1RfRihUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQogewogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVj
dGlvbkxpc3Q7CkBAIC0xNTUsNyArMTczLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwg
c3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQogICAgIEVYUEVDVF9FUShzZWNvbmRDQ0xheWVy
SWQsIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3RbMF0pOwogfQogCi1URVNUKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCitURVNUX0YoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKIHsKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVl
Um9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtMTg3LDcgKzIwNSw3IEBAIFRFU1Qo
VHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKICAgICBF
WFBFQ1RfRVEoc2Vjb25kQ2hpbGRCb3VuZHMuaGVpZ2h0KCksIHNlY29uZENDTGF5ZXJDaGlsZEJv
dW5kcy5oZWlnaHQoKSk7CiB9CiAKLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NM
YXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3Qs
IHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiB7CiAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlz
dDsKQEAgLTIzNCw3ICsyNTIsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUND
TGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQogfQogCiAvLyBDb25zdHJ1Y3RzIGEgdmVyeSBz
aW1wbGUgdHJlZSwgc3luY2hyb25pemVzIGl0LCB0aGVuIHN5bmNocm9uaXplcyB0byBhIHRvdGFs
bHkgbmV3IHRyZWUuIEFsbCBsYXllcnMgZnJvbSB0aGUgb2xkIHRyZWUgc2hvdWxkIGJlIGRlbGV0
ZWQuCi1URVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95
KQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95
KQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFZlY3RvcjxpbnQ+
IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CkBAIC0yNjUsNyArMjgzLDcgQEAgVEVTVChUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVUaGVuRGVzdHJveSkKIH0KIAogLy8gQ29uc3Ry
dWN0cytzeW5jcyBhIHRyZWUgd2l0aCBtYXNrLCByZXBsaWNhLCBhbmQgcmVwbGljYSBtYXNrIGxh
eWVycy4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxp
Y2FNYXNrTGF5ZXJzKQorVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jTWFza1JlcGxp
Y2FBbmRSZXBsaWNhTWFza0xheWVycykKIHsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOwpAQCAtMzA3LDUgKzMyNSw4NSBAQCBURVNUKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykKICAgICBleHBlY3RU
cmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0
KCkpOwogfQogCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNOZXdBbmltYXRpb24p
Cit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAg
IC8vIFN5bmMgd2l0aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NM
YXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRy
ZWVSb290LmdldCgpLCAwKTsKKworICAgIC8vIEFkZCBhbmltYXRpb24gdG8gbWFpbiB0aHJlYWQg
Y29udHJvbGxlci4KKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0
KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290Lmdl
dCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFp
bGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3Rp
dmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsK
K30KKworVEVTVF9GKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQW5pbWF0aW9uUHJvcGVydGll
cykKK3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIGdldEFuaW1h
dGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5h
cHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5p
bWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY2NM
YXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRy
ZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUo
Y2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290
LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gUHVzaCBhbiBhbmltYXRp
b24gcHJvcGVydHkgY2hhbmdlIHRvIHRoZSBpbXBsIHRocmVhZCAoc2hvdWxkIG5vdCBjYXVzZSBh
biBhbmltYXRpb24gdG8gYmUgYWRkZWQpLgorICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5
ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMoKVswXS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlBhdXNlZCwgMCk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVy
VHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBj
Y0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1Rf
RihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY0Fib3J0ZWRBbmltYXRpb24pCit7CisgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxh
eWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0
aCBubyBhbmltYXRpb25zLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290
ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgp
LCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5h
Y3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsK
KworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKwor
ICAgIC8vIEFib3J0IGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICBnZXRB
bmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25z
KCkuY2xlYXIoKTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFM
U0UoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1h
dGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworfQorCitURVNUX0YoVHJlZVN5
bmNocm9uaXplclRlc3QsIHN5bmNDb21wbGV0ZWRBbmltYXRpb24pCit7CisgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJl
ZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIC8vIFN5bmMgd2l0aCBubyBh
bmltYXRpb25zLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsK
KyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVB
bmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmlt
YXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgYW5p
bWF0aW9uIHVudGlsIGl0IGlzIGZpbmlzaGVkLiBBdCB0aGUgbmV4dCBzeW5jLCB0aGUgbWFpbiB0
aHJlYWQncyBhbmltYXRpb24gc2hvdWxkIGJlIGNsZWFyZWQuCisgICAgT3duUHRyPENDQW5pbWF0
aW9uUmVzdWx0cz4gcmVzdWx0cyhDQ0FuaW1hdGlvblJlc3VsdHM6OmNyZWF0ZSgpKTsKKyAgICBj
Y0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0ZSgwLCAqcmVzdWx0
cyk7CisgICAgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGUo
MiwgKnJlc3VsdHMpOworCisgICAgRVhQRUNUX0ZBTFNFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBnZXRBbmltYXRpb25Db250cm9s
bGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKKwor
ICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9FUShzaXplX3QoMCksIGdl
dEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlv
bnMoKS5zaXplKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127649</attachid>
            <date>2012-02-17 13:56:48 -0800</date>
            <delta_ts>2012-02-17 20:13:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120217165647.patch</filename>
            <type>text/plain</type>
            <size>116268</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBhYjY4NGIyMzY3M2I4
M2E3Yjg4OGFiYjVjODIzMzhjYTE3MWI1NC4uNzgyMTE0NGZhZjE4MmU2NzkzOTlmODE2MDVkMWEw
MzFiNzY3ZDQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0wMi0xNyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyQW5pbWF0aW9uU3RhcnRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJl
c2VydmVzM0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJDaHJvbWl1bTo6c2V0QW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06Om51bUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFuaW1h
dGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
ZWVTeW5jaHJvbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0Fj
dGl2ZUFuaW1hdGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzV2FpdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNSdW5uaW5nT3JIYXNSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c3luY2hyb25pemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5oOgorICAgICAgICAoQ0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NB
Y3RpdmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZTo6QW5pbWF0aW9uU2lnbmF0dXJlKToK
KyAgICAgICAgKEFuaW1hdGlvblNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2
ZUFuaW1hdGlvbjo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ0FuaW1hdGlvbkN1cnZlKToK
KyAgICAgICAgKENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3Vy
dmUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25T
dGFydGVkRXZlbnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KToKKyAgICAgICAgKENDQW5pbWF0
aW9uU3RhcnRlZEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3Bl
bmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbklt
cGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNo
QW5pbWF0aW9uUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5p
bWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxl
T25JbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmFuaW1hdGVQYWdlU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6Om5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0FuaW1hdGVMYXllcnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6cG9zdEFuaW1h
dGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5Lmg6CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGVidWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlYnVnU2NvcGVkU2V0TWFpblRocmVhZDo6RGVidWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlYnVnU2NvcGVkU2V0TWFpblRocmVhZDo6fkRlYnVnU2NvcGVkU2V0
TWFpblRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpwb3N0QW5p
bWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0QW5pbWF0aW9uRXZlbnRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6
CisgICAgICAgIChDQ1RocmVhZFByb3h5KToKKwogMjAxMi0wMi0xNyAgSWx5YSBUaWtob25vdnNr
eSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEwODA3MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDg3M2VhN2QwYjc0MDEw
MGE2NGZhYjM3ODYyMzU2ZjBhMDFlMzgwOC4uODhmNzI4Y2M2MTNkYTZiMzA4OTliOTA0YmJhOWRi
M2NkN2EwNWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAor
MjAxMi0wMi0xNyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbY2hyb21pdW1dIFBsdW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFu
aW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NTg3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
ICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
VGVzdHMpOgorICAgICAgICAoRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjp+RmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjpkdXJh
dGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6Omdl
dFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6
Y2xvbmUpOgorICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5GYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9y
bVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChGYWtlRmxvYXRUcmFuc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFu
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjp+RmFr
ZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJhbnNp
dGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRp
b246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9u
OjpjbG9uZSk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6Omlk
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJvbGxlckNsaWVudDo6Ym91bmRzKToK
KyAgICAgICAgKEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpj
cmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAg
ICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJl
YWRPbkltcGxUaHJlYWQpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdEhvb2tzOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAg
KE1vY2tMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJUcmVl
SG9zdEltcGw6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChN
b2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQp
OgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChDQ0xheWVyVHJl
ZUhvc3RUZXN0QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dFRlc3RBZGRBbmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6YmVnaW5UZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmFu
aW1hdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFu
aW1hdGlvbjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChUcmVlU3luY2hyb25pemVyVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3lu
Y2hyb25pemVyVGVzdDo6Z2V0QW5pbWF0aW9uQ29udHJvbGxlcik6CisKIDIwMTItMDItMTcgIEls
eWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxMDgwNzEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOGJlODBmMzYzYmJi
YzI1NTQzYTRlYjhlOWZlMDY1MTQ3ODRlYjRhOC4uODViZjAxYmRjYTgyMWI4NWMyYjdjOWU1MmYy
NDZkODE1OWZhMjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzIzMiw2ICszMjMyLDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1h
dGlvbkN1cnZlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb25DdXJ2ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
Y3BwJywKQEAgLTMyNDksNiArMzI1MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDUxZjIwNDNmYzU0YjQ1ZGNhYTQ2NDM0OGM5NDc3Zjg3YTQ2MjRmYTUuLmQ4
Njc3ODczZWQ5YzdkYjY4MDBlMzdhM2Q0ZjIyYmU0OGFiYWFiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBj
aGlsZHJlbikKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZChHcmFwaGljc0xh
eWVyKiBjaGlsZExheWVyKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGNoaWxkTGF5
ZXIpOwotICAgIGlmICghbV9pblNldENoaWxkcmVuKSAKKyAgICBpZiAoIW1faW5TZXRDaGlsZHJl
bikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKQEAgLTM4Miw2ICszODIsMzcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKK2Jv
b2wgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBh
bmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQp
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFu
aW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1h
dGlvbk5hbWUsIHRpbWVPZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBtX2xh
eWVyLT5yZW1vdmVBbmltYXRpb24oYW5pbWF0aW9uTmFtZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKKyAgICBtX2xh
eWVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5ZXItPnJlc3VtZUFuaW1hdGlv
bnMoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmxheWVyQW5pbWF0aW9uU3Rh
cnRlZChkb3VibGUgc3RhcnRUaW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgc3RhcnRUaW1lKTsKK30KKwogdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVy
KiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzk2LDEy
ICs0MjcsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRp
YShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9jb250
ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAKKwog
ICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlh
IHVwZGF0ZUNoaWxkTGlzdC4KICAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IDA7CiAgICAg
ICAgIH0KICAgICB9Ci0gIAorCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAgICAgICAgdXBk
YXRlQ2hpbGRMaXN0KCk7CiB9CkBAIC01NTAsNyArNTgxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QoKQogICAgICAgICBtX2xheWVyLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYpKTsKICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShpZGVudGl0
eSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNldCB0aGUgb2xkIGxheWVyIHRvIG9wYWNpdHkg
b2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRoZSBvcGFjaXR5IG9uIHRoZSB0cmFuc2Zv
cm0gbGF5ZXIuCiAgICAgICAgIG1fbGF5ZXItPnNldE9wYWNpdHkoMSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggZGJmMTVlNTFkYjEwYjdiZDY1MTU2ZGU4ZTdkODAx
OTNmZjg3YjBkMy4uNWQ2MDY4ZDE3MjVhOTNhYmY5YjA3ZTVjZWNmMzQ4MDc5OWMwOTVkYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTk1LDYgKzk1LDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CiAK
KyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwg
ZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgdm9pZCBsYXllckFuaW1hdGlvblN0YXJ0
ZWQoZG91YmxlIHN0YXJ0VGltZSk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA0YmNmMjk3ZmY5
MjQ2OGM5ODRmNWI0ZmNjMTJiZmY1M2IyNjZkNjc0Li45ODZkMmQxODU1YzAyOWUyNjg5Njg1MTgx
ZTdhODVkNjEyMjc0ZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzMsNiArMzMsNyBA
QAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Lmgi
CiAjaWYgVVNFKFNLSUEpCkBAIC01OSw2ICs2MCw3IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hy
b21pdW0oKQogICAgIDogbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2xheWVySWQoc19u
ZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJlbnQoMCkKKyAgICAsIG1fYW5pbWF0aW9uQ29udHJv
bGxlcihDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3Njcm9s
bGFibGUoZmFsc2UpCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9iYWNr
Z3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKQEAgLTkyLDYgKzk0LDM4IEBAIExheWVyQ2hyb21pdW06
On5MYXllckNocm9taXVtKCkKICAgICByZW1vdmVBbGxDaGlsZHJlbigpOwogfQogCitib29sIExh
eWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVz
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBib29s
IGFkZGVkQW5pbWF0aW9uID0gbV9hbmltYXRpb25Db250cm9sbGVyLT5hZGRBbmltYXRpb24odmFs
dWVzLCBib3hTaXplLCBhbmltYXRpb24sIGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworICAg
IGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1
cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRp
b24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAg
ICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnBhdXNlQW5pbWF0aW9uKGFuaW1hdGlvbk5hbWUsIHRp
bWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1
bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lKTsKKyAg
ICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1c3BlbmRBbmlt
YXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c3VzcGVu
ZEFuaW1hdGlvbnModGltZSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBMYXll
ckNocm9taXVtOjpyZXN1bWVBbmltYXRpb25zKCkKK3sKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiB2b2lk
IExheWVyQ2hyb21pdW06OnNldElzTm9uQ29tcG9zaXRlZENvbnRlbnQoYm9vbCBpc05vbkNvbXBv
c2l0ZWRDb250ZW50KQogewogICAgIG1faXNOb25Db21wb3NpdGVkQ29udGVudCA9IGlzTm9uQ29t
cG9zaXRlZENvbnRlbnQ7CkBAIC01MTQsNiArNTQ4LDExIEBAIGJvb2wgTGF5ZXJDaHJvbWl1bTo6
ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIExh
eWVyQ2hyb21pdW06OnNldEFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlcikKK3sKKyAgICBtX2FuaW1hdGlv
bkNvbnRyb2xsZXIgPSBhbmltYXRpb25Db250cm9sbGVyOworfQorCiB2b2lkIHNvcnRMYXllcnMo
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVudGx5IHdl
IGRvbid0IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5v
IG5lZWQgdG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApp
bmRleCBmZjJlN2QyODYyNjIyZmFkMmMwNjkzOGQ2ZjUyNTY5MTQwZjg4M2ZhLi5jYTBmOTY2MDJl
NjUyMzg5ZDkxZjcyODNlYjM0MTQ5NmQ5ZjllMjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01
Miw2ICs1Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9z
dDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CkBAIC02MSw3ICs2Miw2IEBAIGNsYXNzIFJlZ2lv
bjsKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5
cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVt
IDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewotICAgIGZyaWVuZCBjbGFzcyBM
YXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gY3JlYXRlKCk7CiAKQEAgLTIxNSw3ICsyMTUsMjAgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7
IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAg
Ym9vbCBhbHdheXNSZXNlcnZlVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1Jlc2Vy
dmVUZXh0dXJlczsgfQogCisgICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHBhdXNl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQp
OworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7
CisKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIHJl
c3VtZUFuaW1hdGlvbnMoKTsKKwogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVy
SW1wbDsKKyAgICBmcmllbmQgY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdDsKKyAgICBmcmllbmQg
Y2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25p
emVyOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdDsKKwogICAgIExheWVy
Q2hyb21pdW0oKTsKIAogICAgIGJvb2wgaXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbigpIGNv
bnN0OwpAQCAtMjMzLDggKzI0Niw2IEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVy
OwotICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKICAgICAvLyBDb25zdHJ1Y3RzIGEgQ0NM
YXllckltcGwgb2YgdGhlIGNvcnJlY3QgcnVudGltZSB0eXBlIGZvciB0aGlzIExheWVyQ2hyb21p
dW0gdHlwZS4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5
ZXJJbXBsKCk7CiAgICAgaW50IG1fbGF5ZXJJZDsKQEAgLTI0MywxMCArMjU0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFBhcmVudChMYXllckNocm9taXVtKik7CiAgICAgYm9vbCBoYXNBbmNl
c3RvcihMYXllckNocm9taXVtKikgY29uc3Q7CiAKLSAgICBzaXplX3QgbnVtQ2hpbGRyZW4oKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIH0KKyAg
ICBzaXplX3QgbnVtQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLnNpemUoKTsg
fQogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNoaWxkIG9yIC0xIGlmIG5vdCBm
b3VuZC4KICAgICBpbnQgaW5kZXhPZkNoaWxkKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKQEAgLTI1
NCwxMSArMjYyLDE2IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZnJvbSByZW1vdmVGcm9tUGFyZW50LgogICAgIHZvaWQgcmVtb3ZlQ2hpbGQoTGF5ZXJDaHJv
bWl1bSopOwogCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRy
b2xsZXIoKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICB2b2lk
IHNldEFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4pOworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fY2hpbGRyZW47
CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9wYXJlbnQ7CiAKICAgICBSZWZQdHI8Q0NMYXllclRyZWVI
b3N0PiBtX2xheWVyVHJlZUhvc3Q7CiAKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKKwogICAgIC8vIExheWVyIHByb3BlcnRpZXMu
CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
ZWVTeW5jaHJvbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKaW5kZXggZDBmZDBjZTUyM2Q2Mzg4NGJlOTMyZTFi
ZDQxNjU4MmYyNTc2MmU0MC4uZGUxY2Y4YTY5NGJhMWIzZmYxY2FmMTc4NDZmZGIxZGU1NjIxODQ3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJlZVN5bmNocm9uaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNzQsNiArNzUsOCBA
QCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRy
ZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bQogICAgIGVsc2UKICAgICAgICAgY2NMYXllckltcGwt
PnNldFJlcGxpY2FMYXllcigwKTsKIAorICAgIGxheWVyLT5hbmltYXRpb25Db250cm9sbGVyKCkt
PnN5bmNocm9uaXplQW5pbWF0aW9ucyhjY0xheWVySW1wbC0+YW5pbWF0aW9uQ29udHJvbGxlcigp
KTsKKwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAg
ICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uY3BwCmluZGV4IDIxZTZjYzdhOWUyNDZlYzBiZWZhYWEwNTg0ZjZkMjIxYzQ0NjIw
ZWEuLjAwMDljYzg4OTgzYTA2NTliMzhhNjkzYTk2OWNhNGMwNzc2NjU3YTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5p
bWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKQEAgLTQ0LDYgKzQ0LDggQEAgQ0NBY3RpdmVBbmlt
YXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUsIEdyb3VwSUQKIHsKIH0KIAorQ0NBY3RpdmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1hdGlv
bigpIHsgfQorCiB2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzZXRSdW5TdGF0ZShSdW5TdGF0ZSBy
dW5TdGF0ZSwgZG91YmxlIG5vdykKIHsKICAgICBpZiAocnVuU3RhdGUgPT0gUnVubmluZyAmJiBt
X3J1blN0YXRlID09IFBhdXNlZCkKQEAgLTYzLDYgKzY1LDIxIEBAIGJvb2wgQ0NBY3RpdmVBbmlt
YXRpb246OmlzRmluaXNoZWRBdChkb3VibGUgdGltZSkgY29uc3QKICAgICAgICAgJiYgbV9pdGVy
YXRpb25zICogbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSA8PSB0aW1lIC0gc3RhcnRUaW1l
KCkgLSBtX3RvdGFsUGF1c2VkVGltZTsKIH0KIAorYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNX
YWl0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9yTmV4
dFRpY2sKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmls
aXR5CisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gV2FpdGluZ0ZvclN0YXJ0VGltZTsKK30KKwor
Ym9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNSdW5uaW5nT3JIYXNSdW4oKSBjb25zdAoreworICAg
IHJldHVybiBtX3J1blN0YXRlID09IFJ1bm5pbmcKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBG
aW5pc2hlZAorICAgICAgICB8fCBtX3J1blN0YXRlID09IEFib3J0ZWQKKyAgICAgICAgfHwgbV9y
dW5TdGF0ZSA9PSBQYXVzZWQ7Cit9CisKIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRp
bWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKIHsKICAgICBkb3VibGUgdHJp
bW1lZCA9IG5vdzsKQEAgLTk1LDQgKzExMiwzNiBAQCBkb3VibGUgQ0NBY3RpdmVBbmltYXRpb246
OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0CiAgICAgcmV0dXJu
IGZtb2QodHJpbW1lZCwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSk7CiB9CiAKK1Bhc3NP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvckltcGxU
aHJlYWQoKSBjb25zdAoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4o
YWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUtPmNsb25lKCks
IG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpKSk7CisgICAgdG9SZXR1cm4tPm1fcnVuU3RhdGUg
PSBtX3J1blN0YXRlOworICAgIHRvUmV0dXJuLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlvbnM7
CisgICAgdG9SZXR1cm4tPm1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWU7CisgICAgdG9SZXR1cm4t
Pm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgdG9SZXR1cm4tPm1fdG90YWxQYXVzZWRU
aW1lID0gbV90b3RhbFBhdXNlZFRpbWU7CisgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVhc2UoKTsK
K30KKwordm9pZCBDQ0FjdGl2ZUFuaW1hdGlvbjo6c3luY2hyb25pemVQcm9wZXJ0aWVzKENDQWN0
aXZlQW5pbWF0aW9uKiBvdGhlcikKK3sKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGlt
cGwgdGhyZWFkIHRvIGluaXRpYXRlIGEgcnVuIHN0YXRlIGNoYW5nZS4KKyAgICAvLyBUaGlzIGhh
cHBlbnMgd2hlbiB0aGUgYW5pbWF0aW9uIHdhcyB3YWl0aW5nIGZvciBhIGZ1dHVyZSBldmVudCB0
byB0YWtlCisgICAgLy8gcGxhY2UsIGFuZCB0aGUgZXZlbnQgaGFzIHRha2VuIHBsYWNlLiBJbiB0
aGF0IGNhc2UsIHdlIHdhbnQgJ3RoaXMnIHRvCisgICAgLy8gYXNzdW1lIHRoZSBpbXBsIHRocmVh
ZCdzIHJ1biBzdGF0ZSBhbmQgc3RhcnQgdGltZS4KKyAgICBpZiAoaXNXYWl0aW5nKCkgJiYgb3Ro
ZXItPmlzUnVubmluZ09ySGFzUnVuKCkpIHsKKyAgICAgICAgbV9ydW5TdGF0ZSA9IG90aGVyLT5t
X3J1blN0YXRlOworICAgICAgICBtX3N0YXJ0VGltZSA9IG90aGVyLT5tX3N0YXJ0VGltZTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBvdGhlci0+bV9ydW5TdGF0ZSA9IG1fcnVuU3RhdGU7CisgICAg
ICAgIG90aGVyLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAgIH0KKworICAgIC8vIENo
YW5nZSBpbiBzdGF0ZSByZWxhdGVkIHRvIGl0ZXJhdGlvbnMgYW5kIHBhdXNlIGlzIGFsd2F5cyBp
bml0aWF0ZWQgZnJvbQorICAgIC8vIHRoZSBtYWluIHRocmVhZCwgc28gaXQgaXMgc2FmZSB0byBw
dXNoIHByb3BlcnRpZXMgaW4gdGhhdCBkaXJlY3Rpb24uCisgICAgb3RoZXItPm1faXRlcmF0aW9u
cyA9IG1faXRlcmF0aW9uczsKKyAgICBvdGhlci0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZTsK
KyAgICBvdGhlci0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKaW5k
ZXggYzIyMjI3OTQxYTNjZWQxMmQ2NThkNzZkNjA0ZWVlOWZiYWQwYTNkMS4uNjk0NDhlNTNiMjk1
ZWViNDhkODEwMzJhMzQ5ODNiNmYwN2U4NDAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1h
dGlvbi5oCkBAIC0yNSwyNCArMjUsMjcgQEAKICNpZm5kZWYgQ0NBY3RpdmVBbmltYXRpb25faAog
I2RlZmluZSBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1
cnZlLmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKLQog
Ly8gQSBDQ0FjdGl2ZUFuaW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSByZXF1aXJlZCB0
byBwbGF5IGEgQ0NBbmltYXRpb25DdXJ2ZS4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGFmZmVjdGVk
IHByb3BlcnR5LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVkLCBldGMuKSwKIC8vIGxv
b3AgY291bnQsIGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0aW1lIHNwZW50IHBhdXNl
ZC4KIGNsYXNzIENDQWN0aXZlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0FjdGl2ZUFuaW1hdGlvbik7CiBwdWJsaWM6CiAgICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3Qg
YmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdy
b3VwSUQKICAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQg
YXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwogICAgIC8vIG1heSBhbmlt
YXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0
aW9ucyBpbiB0aGUKICAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTog
YW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKICAgICAvLyBwcm9wZXJ0
eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIGludCBHcm91
cElEOworICAgIHR5cGVkZWYgc2l6ZV90IEdyb3VwSUQ7CiAKICAgICAvLyBBbmltYXRpb25zIGJl
Z2luIGluIG9uZSBvZiB0aGUgJ3dhaXRpbmcnIHN0YXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5nIGZv
ciB0aGUgbmV4dCB0aWNrCiAgICAgLy8gd2lsbCBzdGFydCB0aGUgbmV4dCB0aW1lIHRoZSBjb250
cm9sbGVyIGFuaW1hdGVzLiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRhcmdldApAQCAtNjgsMTIg
KzcxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07CiAKKyAgICBzdHJ1Y3Qg
QW5pbWF0aW9uU2lnbmF0dXJlIHsKKyAgICAgICAgQW5pbWF0aW9uU2lnbmF0dXJlKEdyb3VwSUQg
Z3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICA6IGdy
b3VwSUQoZ3JvdXBJRCkKKyAgICAgICAgICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJvcGVy
dHkpIHsgfQorICAgICAgICBHcm91cElEIGdyb3VwSUQ7CisgICAgICAgIFRhcmdldFByb3BlcnR5
IHRhcmdldFByb3BlcnR5OworICAgIH07CisKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIEdy
b3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihjdXJ2ZSwgZ3JvdXAsIHRh
cmdldFByb3BlcnR5KSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24o
KSB7IH0KKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpOwogCiAgICAgR3JvdXBJRCBn
cm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KQEAgLTkzLDYg
KzEwNCw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRmluaXNoZWRBdChkb3VibGUgdGltZSkgY29u
c3Q7CiAgICAgYm9vbCBpc0ZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZSA9PSBG
aW5pc2hlZCB8fCBtX3J1blN0YXRlID09IEFib3J0ZWQ7IH0KIAorICAgIGJvb2wgaXNXYWl0aW5n
KCkgY29uc3Q7CisgICAgYm9vbCBpc1J1bm5pbmdPckhhc1J1bigpIGNvbnN0OworCiAgICAgQ0NB
bmltYXRpb25DdXJ2ZSogYW5pbWF0aW9uQ3VydmUoKSB7IHJldHVybiBtX2FuaW1hdGlvbkN1cnZl
LmdldCgpOyB9CiAgICAgY29uc3QgQ0NBbmltYXRpb25DdXJ2ZSogYW5pbWF0aW9uQ3VydmUoKSBj
b25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkN1cnZlLmdldCgpOyB9CiAKQEAgLTEwMCw2ICsxMTQs
MTIgQEAgcHVibGljOgogICAgIC8vIG9mIGl0ZXJhdGlvbnMsIHJldHVybnMgdGhlIHJlbGF0aXZl
IHRpbWUgaW4gdGhlIGN1cnJlbnQgaXRlcmF0aW9uLgogICAgIGRvdWJsZSB0cmltVGltZVRvQ3Vy
cmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdDsKIAorICAgIEFuaW1hdGlvblNpZ25hdHVy
ZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBBbmltYXRpb25TaWduYXR1cmUobV9ncm91cCwg
bV90YXJnZXRQcm9wZXJ0eSk7IH0KKworICAgIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IGNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0OworCisgICAgdm9pZCBzeW5jaHJvbml6ZVByb3Bl
cnRpZXMoQ0NBY3RpdmVBbmltYXRpb24qKTsKKwogcHJpdmF0ZToKICAgICBDQ0FjdGl2ZUFuaW1h
dGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBHcm91cElELCBUYXJnZXRQcm9wZXJ0
eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAppbmRleCBkZTk3ZTM4YzBhMjRlNzc3
OGI4ZDk2ZGM5MGZlZjZlYzk5MzliYWUzLi41MzNhYmFmZWY0NTQ3ZDU0OTNiYTU5NzExYmUxNTUx
NjY3ZWUyNGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCkBAIC0yNSw2ICsyNSwx
MCBAQAogI2lmbmRlZiBDQ0FuaW1hdGlvbkN1cnZlX2gKICNkZWZpbmUgQ0NBbmltYXRpb25DdXJ2
ZV9oCiAKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0Zsb2F0QW5p
bWF0aW9uQ3VydmU7CkBAIC00MSw2ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZG91
YmxlIGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNv
bnN0ID0gMDsKIAogICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogdG9GbG9hdEFuaW1h
dGlvbkN1cnZlKCkgY29uc3Q7CiAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSog
dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIGNvbnN0OwpAQCAtNjAsNyArNjUsNyBAQCBjbGFz
cyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewog
cHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAot
ICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQs
IGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QgPSAwOwogCiAgICAgLy8gUGFydGlhbCBD
Q0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjIxYTc5ZTMxMzk3ZWM4OGUzZDU5NGU5MjMyNjNjMWViODAzM2U4NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDQ0FuaW1hdGlvbkV2ZW50c19oCisjZGVmaW5lIENDQW5pbWF0aW9uRXZlbnRzX2gKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbmRp
Y2F0ZXMgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxheWVy
Lgorc3RydWN0IENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50IHsKKyAgICBDQ0FuaW1hdGlvblN0YXJ0
ZWRFdmVudChpbnQgbGF5ZXJJRCwgZG91YmxlIHRpbWUpCisgICAgICAgIDogbGF5ZXJJRChsYXll
cklEKQorICAgICAgICAsIHRpbWUodGltZSkgeyB9CisgICAgaW50IGxheWVySUQ7CisgICAgZG91
YmxlIHRpbWU7Cit9OworCit0eXBlZGVmIFZlY3RvcjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudD4g
Q0NBbmltYXRpb25FdmVudHNWZWN0b3I7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIENDQW5pbWF0aW9uRXZlbnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmJhNzQ4ZTAxNGQxM2RlZThhYTNm
NmY1ZmMzMzBjZDlkMjBmYWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKCkKK3sKK30KKworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6On5DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI+IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworfQorCitib29sIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworfQorCit2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lKQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5k
QW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCit7Cit9CisKKy8vIEVuc3VyZXMgdGhhdCB0aGUg
bGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBpbXBs
IHRocmVhZAorLy8gYXJlIGtlcHQgaW4gc3luYy4KK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbklt
cGxUaHJlYWQoY29udHJvbGxlckltcGwpOworICAgIHB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhy
ZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWlu
VGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhjb250
cm9sbGVySW1wbCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92
ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBBbnkgYW5pbWF0aW9ucyBmaW5pc2hl
ZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQncyBj
b2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1f
ZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmUoY29udHJvbGxl
ckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSUQsIGNvbnRyb2xsZXJJbXBsLT5t
X2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7CisgICAgY29udHJvbGxlcklt
cGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7CisgICAgLy8gQW55IG5ldyBh
bmltYXRpb25zIG93bmVkIGJ5IHRoZSBtYWluIHRocmVhZCdzIGNvbnRyb2xsZXIgYXJlIGNsb25l
ZCBhbmQgYWRkZSB0byB0aGUgaW1wbCB0aHJlYWQncyBjb250cm9sbGVyLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbihtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkp
CisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0
ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVz
cG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNv
bnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBp
cyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3Ag
dGVybWluYXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+
bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRpb24q
IGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRpb24oY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+Z3JvdXAoKSwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIGlmICghY3VycmVudCkKKyAgICAgICAgICAg
IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0aHJl
YWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWluIHRo
cmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRlZAor
ICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24uCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50SW1w
bCA9IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgICAg
IENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0aW9uKGN1cnJlbnRJ
bXBsLT5ncm91cCgpLCBjdXJyZW50SW1wbC0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIEFT
U0VSVChjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICBjdXJyZW50
LT5zeW5jaHJvbml6ZVByb3BlcnRpZXMoY3VycmVudEltcGwpOworICAgIH0KK30KKworQ0NBY3Rp
dmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmltYXRp
b24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4g
bV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdyb3Vw
SUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09
IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0YXJn
ZXRQcm9wZXJ0eSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDZkNWMxNmVlOGNlOTU2OWEzNGRiNTQ5MjM0MTljNjkzZWY5YWZjNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCisjZGVmaW5l
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uOworY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOworc3RydWN0IEludFNpemU7CitjbGFzcyBLZXlm
cmFtZVZhbHVlTGlzdDsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3Jl
YXRlKCk7CisKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOworCisg
ICAgLy8gVGhlc2UgYXJlIHZpcnR1YWwgZm9yIHRlc3RpbmcuCisgICAgdmlydHVhbCBib29sIGFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNp
emUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisgICAgdmlydHVh
bCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFj
dGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCisg
ICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVy
c2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KKyAgICB2b2lkIHN5bmNocm9uaXpl
QW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKworICAgIC8vIFRo
aXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KKyAgICBWZWN0b3I8T3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiA+JiBhY3RpdmVBbmltYXRpb25zKCkgeyByZXR1cm4gbV9hY3RpdmVBbmlt
YXRpb25zOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
OworCitwcml2YXRlOgorICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1wbFRo
cmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1c2hOZXdB
bmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOwor
ICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1c2hBbmltYXRpb25Qcm9wZXJ0aWVz
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisgICAgQ0NBY3RpdmVBbmltYXRp
b24qIGdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICB2b2lkIHJlbW92ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKwor
ICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25z
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5jcHAKaW5kZXggYmJjYTljYmQ5MDU1ZTFlYzEzY2MwYTk3NDYzOWM1
Zjk3MDg4MDk5Mi4uZWQxZTVlYTAwNzA0ZGY1NjA1MTE3YzBjYTdmODQ2MzI4ZmEyMjlmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
NCwyMiArNDUsMjIgQEAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkMKIHsKIH0KIAotdm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1l
U2VjcykKK0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCgpIHsgfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvciYgZXZlbnRzKQogewotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhm
cmFtZUJlZ2luVGltZVNlY3MpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRp
bWUoZnJhbWVCZWdpblRpbWVTZWNzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25z
V2FpdGluZ0Zvck5leHRUaWNrKGZyYW1lQmVnaW5UaW1lU2VjcywgZXZlbnRzKTsKKyAgICBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2VjcywgZXZlbnRz
KTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1l
QmVnaW5UaW1lU2VjcywgZXZlbnRzKTsKICAgICByZXNvbHZlQ29uZmxpY3RzKGZyYW1lQmVnaW5U
aW1lU2Vjcyk7CiAgICAgdGlja0FuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWVTZWNzKTsKICAgICBw
dXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JU
YXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2VjcywgZXZlbnRz
KTsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5h
cHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YW5pbWF0
aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZSh0aGlzKTsKIH0KIAogQ0NBY3RpdmVBbmltYXRp
b24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9uKEND
QWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkgcHJvcGVydHkpCkBAIC04MCwyNSArODEsMjggQEAgYm9vbCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRB
bmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRv
dWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwogICAg
ICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsKKyAgICAg
ICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobV9jbGllbnQtPmlk
KCksIG5vdykpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUg
bm93KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3Im
IGV2ZW50cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5T
dGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KQorICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5n
Rm9yU3RhcnRUaW1lICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93
KSB7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOworICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChD
Q0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+aWQoKSwgbm93KSk7CisgICAgICAgIH0K
ICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZl
bnRzKQogewogICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgogICAgIFRh
cmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7CkBAIC0xMzAsNiArMTM0LDcgQEAgdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkKICAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7
CiAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgICAgIGV2ZW50cy5h
cHBlbmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobV9jbGllbnQtPmlkKCksIG5vdykpOwogICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKQEAgLTE3OCw5ICsxODMsMTAgQEAgdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRBbmltYXRpb25z
KCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKQorICAgICAgICBpZiAoYWxsQW5pbXNX
aXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIG1fZmluaXNoZWRBbmltYXRpb25z
LmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25hdHVyZSgpKTsKICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBpKys7CiAgICAgfQogfQpAQCAtMTk0LDE0ICsyMDAsMTEgQEAgdm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBu
b3cpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTogewog
ICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5hbmltYXRpb25DdXJ2ZSgp
LT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdl
dFZhbHVlKHRyaW1tZWQpOworICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCBt
X2NsaWVudC0+Ym91bmRzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPmlzRmluaXNoZWRBdChub3cpKQogICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbm93
KTsKIAotICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRlIG9yIHJlbGF0
aXZlLiBBYnNvbHV0ZSBmb3Igbm93LgotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRvQXBwbHk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShGbG9hdFNpemUo
KSwgdG9BcHBseSk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybSh0b0Fw
cGx5KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggMWFkMjIzZGJhODIz
YTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uYmZkZWExZjk2MTFlNTNhYTFlZmM1OTllMGQz
NzlmODIwODNmYWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgKQEAgLTI3LDggKzI3LDEwIEBACiAKICNpbmNsdWRlICJjYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00
NCwxOCArNDYsMjIgQEAgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQoKSB7IH0KIAorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0
eShmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25D
b250cm9sbGVySW1wbERpZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCop
ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsKIH07
CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKTsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0
ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQgYW5p
bWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwoKTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVC
ZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwogCiAgICAgdm9pZCBhZGQo
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogCkBAIC02NywxMiArNzMsMTQgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworCiAgICAgLy8gVGhl
IGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KICAgICBleHBsaWNpdCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50
Kik7CiAKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUg
bm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91Ymxl
IG5vdyk7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmls
aXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CisgICAgdm9pZCBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yJik7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CiAgICAgdm9p
ZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOwogICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFu
aW1hdGlvbnMoKTsKIApAQCAtODAsNiArODgsNyBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8T3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKKyAgICBWZWN0b3I8Q0NB
Y3RpdmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZT4gbV9maW5pc2hlZEFuaW1hdGlvbnM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5k
ZXggYTEzNjE2N2Q3YWZlYzRhNjcxZTdhNjk4MDg1ZDRkZDY2MGVkYTMxMS4uM2EwMzc0N2UyMjM0
MGU1NTM2MjUzZjhlNTY5MmY3MmYwMzI4OTI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJM
YXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1
YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJh
d1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYxLDYgKzYyLDcg
QEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZHJhd09wYWNpdHko
MCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9kZWJ1Z0Jv
cmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDhmYmFiYWU4NmE2YmQ2
YWM4ZDY1Y2I3ZTdlMDZjYTZjOWJlNjkxODAuLmY1ZDRmMTMyYWU0NTFiNDg3NjBkMzkxYWYxN2Qw
ZmI4YTBmMmRmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlICJjYy9D
Q1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MSwxNiArNDIs
MjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsK
IGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBwdWJs
aWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMg
UmVmQ291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xh
eWVySW1wbChpZCkpOwogICAgIH0KKworICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsK
KyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUm
IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICB2aXJ0dWFsIH5DQ0xh
eWVySW1wbCgpOwogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCkBAIC02Niw4ICs3Nyw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7
CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGlj
YUxheWVyLmdldCgpOyB9CiAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVySWQ7
IH0KLQogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVidWdJRDsgfQogI2VuZGlmCkBAIC0xMTEsOSArMTIwLDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFx
dWU7IH0KIAotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKQEAgLTEyOSw5ICsxMzUsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwog
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0VHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KICAgICB2
b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApAQCAtMTU0LDcg
KzE1Nyw2IEBAIHB1YmxpYzoKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNl
dFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFyZ2V0
UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAotICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50
U2l6ZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudEJvdW5kczsgfQpAQCAtMjAzLDYgKzIwNSw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb3BlcnR5
Q2hhbmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUoKTsK
IAorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogYW5pbWF0aW9uQ29udHJvbGxl
cigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzEyLDYgKzMxNiw5IEBAIHBy
aXZhdGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVk
IGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRo
aXMgYW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisKKyAg
ICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gbV9hbmltYXRpb25Db250cm9sbGVyOwogfTsKIAog
dm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZp
cnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJT
b3J0ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGU0NjJlNTMxOGJm
YzdmMzc5NGRhODY1Y2VmZjMzYmFlYzVkMmU1MDEuLmVhMTdlOGM5YTk2MTI5ZjZlNTA5YTE5N2Jm
NjgyMzU5ZjAzMzFkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTcx
LDkgKzE3MSwxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0
cyBhdCBhbGwuLi4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RMYXllcigpKSB7
CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAgZWxz
ZQorICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmltYXRpb24gZHVyaW5nIHRoZSB0
cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBob3N0SW1wbCB0byB2aXNpdCBpdHMgY29udHJvbGxl
cnMuCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICB9IGVs
c2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKIAogICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKQEAgLTI1OSw2ICsyNjEsMTIgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKICAgICAgICAgbV9jbGllbnQt
PnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRBbmlt
YXRpb25FdmVudHMoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKQor
eworICAgIEFTU0VSVChDQ1RocmVhZFByb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgLy8gRklY
TUU6IG5lZWQgdG8gd2FsayB0aGUgdHJlZS4KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikKIHsKICAgICBp
ZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVyKQpAQCAtMzM0LDkgKzM0MiwxMiBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGhvc3RJbQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChyb290TGF5ZXIoKSkKKworICAgIGlmIChyb290
TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkp
OwotICAgIGVsc2UKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9uIGR1
cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgaG9zdEltcGwgdG8gdmlzaXQgaXRz
IGNvbnRyb2xsZXJzLgorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJzKCk7
CisgICAgfSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZjVlMTEzNGM4MWI0M2UyMTg4NmE1ZDkzNTMw
ZWU4OGYxOWE0MDMyNS4uOTQ4YWQyMDM4N2JiOWMyNTliNTE0YTMwZDI1MmQ4MzU3MDhmNmMzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmF0ZUxpbWl0ZXIuaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NQ
cm94eS5oIgogCkBAIC0xNjMsNiArMTY0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0NvbW1pdCgpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAorICAgIHZvaWQg
c2V0QW5pbWF0aW9uRXZlbnRzKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+KTsK
KwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdl
dCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
aW5kZXggZTQ2YWUzMjQ5ZjM4MTVjZDliMDE5MWE5Mjg3MWZhMTdmMmE5ZGI4Ni4uZTIyNjE2YjI5
MDM2YzdmYzk4OTViYTgzYzJiMzAwMmI5ZTFkNzM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKQEAgLTU3LDYgKzU3LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRy
ZWUKICAgICAsIG1fc2VudFBhZ2VTY2FsZURlbHRhKDEpCiAgICAgLCBtX21pblBhZ2VTY2FsZSgw
KQogICAgICwgbV9tYXhQYWdlU2NhbGUoMCkKKyAgICAsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKHRy
dWUpCiAgICAgLCBtX3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxzZSkKIHsKICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtOTcsMjEgKzk4LDggQEAgR3JhcGhpY3NDb250ZXh0
M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpCiB7Ci0gICAgaWYgKCFtX3Bh
Z2VTY2FsZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBzY3JvbGxU
b3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLQotICAgIHNldFBhZ2VTY2FsZURlbHRhKG1f
cGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykgLyBt
X3BhZ2VTY2FsZSk7Ci0gICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmltYXRp
b24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKLSAgICBuZXh0U2Nyb2xs
LnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+c2Ny
b2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKLQotICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+aXNB
bmltYXRpb25Db21wbGV0ZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSkgewotICAgICAgICBtX3Bh
Z2VTY2FsZUFuaW1hdGlvbi5jbGVhcigpOwotICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKTsKLSAgICB9CisgICAgYW5pbWF0ZVBhZ2VTY2FsZShmcmFtZUJlZ2lu
VGltZU1zKTsKKyAgICBhbmltYXRlTGF5ZXJzKGZyYW1lQmVnaW5UaW1lTXMpOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNp
emUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRv
dWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0yNDUsNiArMjMzLDI1IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQ
YXNzTGlzdCYgcGFzc2VzKQogICAgICAgICBwYXNzZXNbaV0tPm9wdGltaXplUXVhZHMoKTsKIH0K
IAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5
ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvciYgZXZlbnRzLCBib29sJiBuZWVkc0FuaW1hdGVMYXllcnMpCit7CisgICAgYm9v
bCBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7CisKKyAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwqIGN1cnJlbnRDb250cm9sbGVyID0gY3VycmVudC0+YW5pbWF0aW9u
Q29udHJvbGxlcigpOworICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVnaW5U
aW1lU2VjcywgZXZlbnRzKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKQorICAgICAgICBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkgeworICAgICAgICBib29sIGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7CisgICAg
ICAgIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwg
ZnJhbWVCZWdpblRpbWVTZWNzLCBldmVudHMsIGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKTsKKyAg
ICAgICAgaWYgKGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAgICAgICAgc3VidHJlZU5l
ZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQorCisgICAgbmVlZHNBbmltYXRlTGF5ZXJz
ID0gc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogSW50U2l6ZSBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBIYXJk
Y29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJkLiBUaGluayBvZgpAQCAtNTUxLDQg
KzU1OCw0NSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UoKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFnZVNj
YWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQoreworICAgIGlmICghbV9wYWdlU2NhbGVBbmlt
YXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1Np
emUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1w
bC0+c2Nyb2xsRGVsdGEoKSk7CisKKyAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFu
aW1hdGlvbi0+cGFnZVNjYWxlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUp
OworICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxP
ZmZzZXRBdFRpbWUoZnJhbWVCZWdpblRpbWVNcyk7CisgICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8g
bV9wYWdlU2NhbGVEZWx0YSk7CisgICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRT
Y3JvbGwgLSBzY3JvbGxUb3RhbCk7CisKKyAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24tPmlz
QW5pbWF0aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykpIHsKKyAgICAgICAgbV9w
YWdlU2NhbGVBbmltYXRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorCisgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3
T25JbXBsVGhyZWFkKCk7CiB9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxh
eWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICBpZiAoIW1fbmVlZHNBbmltYXRl
TGF5ZXJzIHx8ICFtX3Jvb3RMYXllckltcGwuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworCisgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBB
U1NFUlQobV9uZWVkc0FuaW1hdGVMYXllcnMpOworCisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7
CisKKyAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJh
bWVCZWdpblRpbWVNcyAvIDEwMDAsICpldmVudHMsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsKKwor
ICAgIGlmICghZXZlbnRzLT5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50LT5wb3N0QW5pbWF0
aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKGV2ZW50cy5yZWxlYXNlKCkpOworCisg
ICAgaWYgKG1fbmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNS
ZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDVlZTAzOTlmNWI0NTcyMjVhOTFkZmY2
Yjc3N2NkNWQ4YTc2ZDZhOWYuLjA4Yzk3OTMzYWEyZjk4NDQzMWQyZTVjZmY1N2E5NDgzMDFjYzA4
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1LDExICsyNSwx
MyBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NMYXllclRyZWVI
b3N0SW1wbF9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUg
ImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00OCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVm
ZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVu
dHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4pID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXll
ckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC02OCw3
ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlRW5kKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRh
cmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBz
dGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpOwogCi0gICAgLy8gVmlydHVhbCBmb3IgdGVz
dGluZworICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJlZ2lu
Q29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lRGlzcGxheVRpbWVNcyk7CkBAIC0xMTksOCArMTIy
LDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3Qg
SW50U2l6ZSYgdHJhZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91
YmxlIGR1cmF0aW9uU2VjKTsKIAorICAgIGJvb2wgbmVlZHNBbmltYXRlTGF5ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KKyAgICB2b2lkIHNldE5lZWRzQW5pbWF0
ZUxheWVycygpIHsgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOyB9CisKIHByb3RlY3RlZDoK
ICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUoZG91YmxlIGZyYW1l
QmVnaW5UaW1lTXMpOworCisgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisKICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51
bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKQEAgLTEzNSw2ICsxNDcsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERy
YXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAg
IHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICB2b2lk
IG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKKyAgICB2b2lkIGFuaW1h
dGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNz
LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYsIGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycyk7CiAg
ICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwpAQCAtMTUwLDYgKzE2Myw4IEBAIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9zZW50UGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgbV9taW5QYWdlU2Nh
bGUsIG1fbWF4UGFnZVNjYWxlOwogCisgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBuZWNl
c3NhcnkgdG8gdHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3JzLgor
ICAgIGJvb2wgbV9uZWVkc0FuaW1hdGVMYXllcnM7CiAgICAgYm9vbCBtX3BpbmNoR2VzdHVyZUFj
dGl2ZTsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2NhbGVBbmlt
YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDE3YTY5
NTkzYTY0M2NmZmU4MzcxNzYxNDk3ZTRiZWMwYTFjNzFkOTAuLmVhOGM0MGYxMjU2NWVjNDEzYmFi
NTg2YmEyMGU0OWNlZjlmOWRhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCkBAIC0yMzMsNiArMjMzLDEzIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3Rv
cCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFBy
b3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cykKK3sKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluOwor
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cyk7Cit9CisKIC8v
IENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5kZXJf
d2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aAppbmRleCBhZGRhOWYxNGU5ZTU0ZGJhMDVhZjMwZDU3ODY4MzhjNDYzZDM0NDQxLi43MWI1ZTk5
YjJlZDJhZmY3ODI1MDNiZjM5MzM2Njk4M2ZjNTk0NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIENDU2luZ2xlVGhyZWFk
UHJveHlfaAogI2RlZmluZSBDQ1NpbmdsZVRocmVhZFByb3h5X2gKIAorI2luY2x1ZGUgImNjL0ND
QW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5o
IgpAQCAtNjMsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZl
cnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmVlZHNDb21taXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9u
SW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQo
UGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pOwogCiAgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBsZWdhY3kgcGF0aCB3aGVyZSBSZW5kZXJXaWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4K
ICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CkBAIC0xMTEsNiArMTEzLDI0IEBAIHB1
YmxpYzoKICAgICB9CiB9OwogCisvLyBGb3IgdXNlIGluIHRoZSBzaW5nbGUtdGhyZWFkZWQgY2Fz
ZS4gSW4gZGVidWcgYnVpbGRzLCBpdCBwcmV0ZW5kcyB0aGF0IHRoZQorLy8gY29kZSBpcyBydW5u
aW5nIG9uIHRoZSBtYWluIHRocmVhZCB0byBzYXRpc2Z5IGFzc2VydGlvbiBjaGVja3MuCitjbGFz
cyBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgeworcHVibGljOgorICAgIERlYnVnU2NvcGVkU2V0
TWFpblRocmVhZCgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQ0NQcm94
eTo6c2V0Q3VycmVudFRocmVhZElzSW1wbFRocmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9Cisg
ICAgfkRlYnVnU2NvcGVkU2V0TWFpblRocmVhZCgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgQ0NQcm94eTo6c2V0Q3VycmVudFRocmVhZElzSW1wbFRocmVhZCh0cnVlKTsK
KyNlbmRpZgorICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDNlYTcyZTJhMWM3MmZiMzU2OTE0ODkyN2Vj
YjE1MTA0NzI5ODk0MjYuLjc1ZWYxMzYyM2RlODc2ZjQ0YTJjYTQ3ZWFkZDgxMjBiMTEwYjIzMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yNTksNiArMjU5LDEzIEBAIHZvaWQg
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKQogICAgIG1fc2NoZWR1
bGVyT25JbXBsVGhyZWFkLT5zZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIENDVGhyZWFkUHJv
eHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKQoreworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnBvc3RBbmltYXRpb25F
dmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpzZXRBbmltYXRpb25FdmVudHMsIGV2ZW50cykpOworfQorCiB2b2lkIENDVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNTYy
LDYgKzU2OSwxNCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMo
KQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogfQogCit2
b2lkIENDVGhyZWFkUHJveHk6OnNldEFuaW1hdGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cyk7Cit9CisKIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBs
ZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBs
T25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggMjNj
MjlmNDhmYTMyYjdhYzQ4ODE1ODAyY2EwMzU4ZWVhMWQ4ODAxYS4uMzMwZWY1MWNhOThhMTZkMjIz
MWUzMzY1NTQwYWMwM2MxNzMzMmEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMjUs
NiArMjUsNyBAQAogI2lmbmRlZiBDQ1RocmVhZFByb3h5X2gKICNkZWZpbmUgQ0NUaHJlYWRQcm94
eV9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0ND
Q29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1h
dGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPik7CiAKICAgICAvLyBDQ1NjaGVkdWxlckNsaWVudCBpbXBsZW1lbnRhdGlv
bgogICAgIHZpcnR1YWwgYm9vbCBjYW5EcmF3KCk7CkBAIC04Niw2ICs4OCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+KTsKICAgICB2
b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVm
ZmVycygpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uRXZlbnRzKFBhc3NPd25QdHI8Q0NBbmltYXRp
b25FdmVudHNWZWN0b3I+KTsKIAogICAgIC8vIENhbGxlZCBvbiBpbXBsIHRocmVhZAogICAgIHN0
cnVjdCBSZWFkYmFja1JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXgg
MzVmMmIxOTkwNzc5ZDY2OWVmODA0MDJmYjAwZjJhNTU2MTQ3YzMyNi4uYjgzZDI4NTBlZGYzZTA5
ZDM2NWIxNzUyNGVhYzIyODVjN2FhNjU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRl
clRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCisg
ICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0Rl
bGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVS
YXRlQ29udHJvbGxlclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1ZGU4NjhhMmYz
YTI1YWIwMzAyMGVkMjVjMWQwZWM0OTBhLi4yNjFlZGZmZjg1MmYzM2MxM2I0OTIxYmU3MGU2MDll
NDJmNWUyYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0
aXZlQW5pbWF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRl
ICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9u
LmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3Mg
RmFrZUZsb2F0QW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9Ci0g
ICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9
Ci19OworbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRp
b25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAtMTY0LDQgKzE2MCw0
IEBAIFRFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQogICAgIEVYUEVDVF9U
UlVFKGFuaW0tPmlzRmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30g
Ly8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
QW5pbWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Fu
aW1hdGlvblRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmQ4YTJmZTIxNTFlNjhmMmQ1NmM2Yzlh
MDQ3YjZjZDk4M2VmOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtMCwwICsxLDk5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisjZGVmaW5lIENDQW5pbWF0
aW9uVGVzdENvbW1vbl9oCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK2NsYXNz
IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYkNvcmU6OkNDRmxvYXRBbmltYXRp
b25DdXJ2ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUo
KSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsg
fQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBj
bG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9h
dEFuaW1hdGlvbkN1cnZlKTsKKyAgICB9Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1Ymxp
YzoKKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJh
dGlvbihkdXJhdGlvbikgeyB9CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24o
KSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
dXJhdGlvbjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0
VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4g
Y2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUg
bV9kdXJhdGlvbjsKK307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgV2Vi
Q29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRUcmFu
c2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgICAgIDog
bV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAgICAgLCBt
X3RvKHRvKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRUcmFuc2l0aW9u
KCkgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25z
dAorICAgIHsKKyAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOworICAgICAgICBpZiAodGltZSA+
PSAxKQorICAgICAgICAgICAgdGltZSA9IDE7CisgICAgICAgIHJldHVybiAoMSAtIHRpbWUpICog
bV9mcm9tICsgdGltZSAqIG1fdG87CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdl
YkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAg
ZmxvYXQgbV90bzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNlbmRpZiAv
LyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QuY3BwCmluZGV4IDNkNTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTViMGY1M2IuLjJk
Yzk2ZDJhZWU3NmMyZWQxMmIwYmEyMGVmMzAxNGI5Njc0ODA5NGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LmNwcApAQCAtMjQsMTYgKzI0LDE2IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJhbnNm
b3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLQorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4K
ICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5h
bWVzcGFjZSB7CiAKQEAgLTQyLDc0ICs0MiwzOSBAQCBwdWJsaWM6CiAgICAgRmFrZUNvbnRyb2xs
ZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwKSB7IH0KICAgICB2aXJ0dWFsIH5GYWtlQ29udHJvbGxl
ckNsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkg
PSBvcGFjaXR5OyB9CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJv
bGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRy
b2xsZXIpCi0gICAgewotICAgICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9s
bGVyKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Kj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQor
ICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3Vu
ZHM7IH0KIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Ci19OwotCi1jbGFzcyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoK
LSAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlv
bihkdXJhdGlvbikgeyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZh
bHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9w
ZXJhdGlvbnMoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZHVyYXRpb247Cisg
ICAgSW50U2l6ZSBtX2JvdW5kczsKIH07CiAKLWNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBw
dWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlRmxvYXRUcmFu
c2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAgICAgIDog
bV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAgICAgLCBt
X3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRv
dWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwotICAg
ICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJldHVy
biAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBmbG9hdCBtX3Rv
OwotfTsKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgaWQsIHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMgdGhh
dCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCiBU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9u
KQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRy
KG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50
IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRy
b2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZk
dW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CiAKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogfQpAQCAtMTE3LDIwICs4MiwyMSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogLy8gVGVzdHMgdGhhdCB0d28g
cXVldWVkIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1
ZW5jZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1
ZXVpbmcpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRv
cHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJD
bGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41
ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpl
dmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVt
bXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogfQpAQCAtMTM4LDIyICsxMDQsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVldWluZykKIC8vIFRlc3RzIGludGVycnVwdGlu
ZyBhIHRyYW5zaXRpb24gd2l0aCBhbm90aGVyIHRyYW5zaXRpb24uCiBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIEludGVycnVwdCkKIHsKKyAgICBPd25QdHI8Q0NBbmlt
YXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9sbGVy
LT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVh
dGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKICAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMC41KTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAuNSwgKmV2ZW50cyk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgx
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41KTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEuNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1
bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKIH0KQEAgLTE2MSwyMyArMTI4LDI0IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogLy8gVGVzdHMgc2NoZWR1bGluZyB0d28g
YW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVl
LgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0
aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVu
dHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsK
ICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0g
ICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24o
YWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmlt
YXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgwLCBk
dW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhl
IGZsb2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAg
ICAvLyBUaGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRpbWUg
MSBhbmQgc2hvdWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5v
cGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiB9CkBAIC0xODcsMjkgKzE1NSwzMCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQog
Ly8gZm9yIGJvdGggdG8gZmluaXNoKS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQogeworICAgIE93blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9y
bSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAv
LyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNo
b3VsZCBoYXZlIGZpbmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAogICAgIC8vIG9mIGFu
aW1hdGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0
aGUgbGVuZ3RoCiAgICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwog
ICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4K
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBUaGUgdGhlIHNlY29uZCBv
cGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgc3RhcnQgYXQgdGltZSAyIGFuZCBzaG91bGQgYmUKICAg
ICAvLyBkb25lIGJ5IHRpbWUgMwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgzLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXku
b3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogfQpAQCAtMjE3LDIyICsxODYsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAvLyBU
ZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgogVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikK
IHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihu
ZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBk
dW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9s
bGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0
VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI0MCwyOCArMjEwLDI5IEBA
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmltYXRp
b24pCiAvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0
dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5nIGFuaW1hdGlvbi4KIFRFU1QoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0
c1J1bm5pbmdBbmltYXRpb24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
PiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAgRmFr
ZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAx
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAu
NWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0
UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAg
IHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVh
c2UoKSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0YXJ0
IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsK
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVYUEVDVF9F
USgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0yNzAsMzQgKzI0MSwzNSBAQCBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNS
dW5uaW5nQW5pbQogLy8gYW5kIHRoZXJlIGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQg
dG8gc3RhcnQgbGF0ZXIuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qs
IFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1
ZXVlKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3Rh
cnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24g
c2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMC41LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkp
OwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKLSAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2
ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogfQpAQCAtMzA1LDY0ICsyNzcsNjYgQEAgVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmlu
Z0FuaW0KIC8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBmb3IgdGhl
IGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMo
Myk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4y
NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAu
MjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgyLjc1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5
KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgzLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgLy8g
SnVzdCBiZSBleHRyYSBzdXJlLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSg0LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKIH0KIAogLy8gVGVzdCB0aGF0IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRp
b24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5nKQogeworICAgIE93blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50
IGlkID0gMTsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9B
ZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuMjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MTA3Mzc0MTgyNC4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKIApAQCAtMzc1LDgwICszNDksNjYgQEAgVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiAvLyBUZXN0IHRoYXQgcGF1
c2luZyBhbmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCiB7CisgICAgT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQg
aWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXku
b3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgp
KTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEwMjQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCwgKmV2ZW50cyk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAg
IGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgMTAyNCk7CiAK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTAyNC4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxMDI0LjUsICpldmVudHMpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9CiAK
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgQWJvcnRBR3JvdXBlZEFu
aW1hdGlvbikKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhh
ZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
PiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNy
ZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEs
IDAuNzVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1
bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVB
bmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxl
ci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRSghY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBhZGRpbmcgYW4gYW5pbWF0aW9uIHRv
IHRoZSBjb250cm9sbGVyIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBvbiB0aGUgY29u
dHJvbGxlciBjbGllbnQKLS8vIChpbiB0aGlzIGNhc2UsIGFkZGluZyB0aGUgY29udHJvbGxlciB0
byB0aGUgbGlzdCBvZiBhY3RpdmUgY29udHJvbGxlcikuCi1URVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIERpZEFjdGl2YXRlKQotewotICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZHVtbXkuYWN0aXZlQ29udHJv
bGxlcnMoKS5zaXplKCkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgxKSwg
ZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjb250cm9s
bGVyLmdldCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThmOGNiZDc1NzQwYWUyOTM5
ZTIzY2MyMzUwYS4uYWZkNDA3MTkzYjkxYzcyMDZiOTJlMmE4Zjc5M2Q1YjNhNzRmNGVjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1f
ZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlv
bkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPikgeyB9CiAKICAgICBzdGF0aWMgdm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xsRGVs
dGFzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAxNjM3
MWExYWVhZWUwZWU3Y2I1YTI5NTYxYWQ4Y2VmZjEyMDMyMDQ5Li5hZGFlZTcxYjI1MTc2OTE5YTc1
MDA5YzllMWNiYWNhNGRiODZjZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmlsdGVyT3Bl
cmF0aW9ucy5oIgpAQCAtMzUsNiArMzYsOCBAQAogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1
ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5
LmgiCkBAIC00OCwxMSArNTEsMTEgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIAotbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVXNl
ZCBieSB0ZXN0IHN0dWJzIHRvIG5vdGlmeSB0aGUgdGVzdCB3aGVuIHNvbWV0aGluZyBpbnRlcmVz
dGluZyBoYXBwZW5zLgogY2xhc3MgVGVzdEhvb2tzIHsKQEAgLTYwLDYgKzYzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0
SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVM
YXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNj
cm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgeyB9CkBAIC05MSw2ICs5NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
dGVzdEhvb2tzLT5kcmF3TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsKICAgICB9CiAKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVN
cykKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZnJh
bWVCZWdpblRpbWVNcyk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hbmltYXRlTGF5ZXJzKHRoaXMp
OworICAgIH0KKwogcHJpdmF0ZToKICAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhvb2tz
KiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChzZXR0aW5n
cywgY2xpZW50KQpAQCAtMTMyLDYgKzE0MywyNSBAQCBwcml2YXRlOgogICAgIFRlc3RIb29rcyog
bV90ZXN0SG9va3M7CiB9OwogCisvLyBBZGFwdHMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIg
Zm9yIHRlc3QuIEFkZHMgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBhZGRBbmltYXRpb24gdGhh
dCBpbnNlcnRzIGEgZmxvYXQgYW5pbWF0aW9uLgorLy8gRklYTUU6IG9uY2UgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbiBpcyBpbXBsZW1lbnRlZCwgdGhhdCBmdW5jdGlv
biBzaG91bGQgYmUgY2FsbGVkIGRpcmVjdGx5IGFuZCB0aGlzCisvLyBjbGFzcyBjYW4gYmUgcmVt
b3ZlZC4KK2NsYXNzIE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1v
Y2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKKyAgICB7CisgICAgICAg
IGRvdWJsZSBkdXJhdGlvbiA9IDA7CisgICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bihkdXJhdGlvbiwgMSwgMCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiBjbGFzcyBDb21wb3NpdG9yRmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6IHB1YmxpYyBDb21wb3NpdG9yRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZz4gY3Jl
YXRlKEF0dHJpYnV0ZXMgYXR0cnMpCkBAIC0yMjYsNyArMjU2LDkgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0ZXN0SG9v
a3MpIDogbV90ZXN0SG9va3ModGVzdEhvb2tzKSB7IH0KQEAgLTI1Niw2ICsyODgsMTEgQEAgcHVi
bGljOgogICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3Bh
dGNoU2V0TmVlZHNBbmltYXRlLCB0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHBvc3RBZGRBbmlt
YXRpb25Ub01haW5UaHJlYWQoKQorICAgIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xh
eWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFkZEFuaW1hdGlvbiwgdGhpcyk7CisgICAgfQorCiAg
ICAgdm9pZCBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKQogICAgIHsKICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29t
bWl0LCB0aGlzKTsKQEAgLTI3MSw3ICszMDgsNiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRD
b21taXQsIHRoaXMpOwogICAgIH0KIAotCiAgICAgdm9pZCBwb3N0U2V0VmlzaWJsZVRvTWFpblRo
cmVhZChib29sIHZpc2libGUpCiAgICAgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKHZpc2li
bGUgPyBDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldFZpc2libGUgOiBDQ0xheWVyVHJl
ZUhvc3RUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSwgdGhpcyk7CkBAIC0zMTQsNiArMzUwLDE1
IEBAIHByb3RlY3RlZDoKICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRz
QW5pbWF0ZSgpOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWRkQW5pbWF0aW9u
KHZvaWQqIHNlbGYpCisgICAgeworICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAg
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RU
ZXN0Kj4oc2VsZik7CisgICAgICBBU1NFUlQodGVzdCk7CisgICAgICBpZiAodGVzdC0+bV9sYXll
clRyZWVIb3N0ICYmIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisgICAgICAg
ICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtleWZy
YW1lVmFsdWVMaXN0KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAiIiwg
MC4wKTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZUFu
ZENvbW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CkBAIC00NjQsNiArNTA5LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVz
dCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlz
LCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBBU1NFUlRfVFJV
RShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xh
eWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIHJvb3RMYXllci0+c2V0QW5pbWF0aW9uQ29udHJvbGxl
cihNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CiAKICAgICBtX2JlZ2lu
bmluZyA9IHRydWU7CiAgICAgYmVnaW5UZXN0KCk7CkBAIC03OTAsNiArODM2LDQ3IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNBbmltYXRlSW5zaWRlQW5pbWF0aW9uQ2FsbGJh
Y2ssIHJ1bk11bHRpVGhyZWFkCiAgICAgcnVuVGVzdFRocmVhZGVkKCk7CiB9CiAKKy8vIEFkZCBh
IGxheWVyIGFuaW1hdGlvbiBhbmQgY29uZmlybSB0aGF0IENDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGVMYXllcnMgZG9lcyBnZXQKKy8vIGNhbGxlZCBhbmQgY29udGludWVzIHRvIGdldCBjYWxs
ZWQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uIDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0QWRkQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX251bUFuaW1hdGVzKDApCisgICAgICAgICwg
bV9sYXllclRyZWVIb3N0SW1wbCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhv
c3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmICghbV9udW1Bbmlt
YXRlcykgeworICAgICAgICAgICAgLy8gVGhlIGFuaW1hdGlvbiBoYWQgemVybyBkdXJhdGlvbiBz
byBsYXllclRyZWVIb3N0SW1wbCBzaG91bGQgbm8KKyAgICAgICAgICAgIC8vIGxvbmdlciBuZWVk
IHRvIGFuaW1hdGUgaXRzIGxheWVycy4KKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShsYXllclRy
ZWVIb3N0SW1wbC0+bmVlZHNBbmltYXRlTGF5ZXJzKCkpOworICAgICAgICAgICAgbV9udW1Bbmlt
YXRlcysrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIGludCBtX251bUFuaW1hdGVzOworICAgIENDTGF5ZXJUcmVlSG9zdElt
cGwqIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVz
dEFkZEFuaW1hdGlvbiwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVkKCk7
Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgogICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3RTY3JvbGxTaW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCAxNTU3YTdkOTMyMmNjNmJlMjA2YmY1
MGIwMGMwZjQ3MDYzYzU0NzhiLi41ODExZWJjZTI0MWEyNDU2NTE1NDAwYWE2NWFiN2JmMThjNTNi
YTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJv
bml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5j
aHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2LDMxIEBACiAKICNpbmNsdWRlICJUcmVlU3lu
Y2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIK
KyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNs
dWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgog
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBUcmVlU3luY2hyb25pemVyVGVzdCA6IHB1YmxpYyBUZXN0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGdldEFu
aW1hdGlvbkNvbnRyb2xsZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gbGF5ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSB7CiAKQEAgLTExNiw3ICsxMzQsNyBAQCB2b2lk
IGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1w
bCogY2NMYXllcikKIH0KIAogLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5
bmNocm9uaXplcyBpdCB3aXRob3V0IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3RpbmcgbGF5
ZXJzLgotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkp
CitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQog
ewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0xMjks
NyArMTQ3LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9t
RW1wdHkpCiB9CiAKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJv
bml6ZXMgaXQgYXR0ZW1wdGluZyB0byByZXVzZSBzb21lIGxheWVycwotVEVTVChUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQorVEVTVF9GKFRyZWVTeW5j
aHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiB7CiAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0
aW9uTGlzdDsKQEAgLTE1NSw3ICsxNzMsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBz
eW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiAgICAgRVhQRUNUX0VRKHNlY29uZENDTGF5ZXJJ
ZCwgY2NMYXllckRlc3RydWN0aW9uTGlzdFswXSk7CiB9CiAKLVRFU1QoVHJlZVN5bmNocm9uaXpl
clRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKK1RFU1RfRihUcmVlU3luY2hyb25p
emVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogewogICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVS
b290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC0xODcsNyArMjA1LDcgQEAgVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQogICAgIEVY
UEVDVF9FUShzZWNvbmRDaGlsZEJvdW5kcy5oZWlnaHQoKSwgc2Vjb25kQ0NMYXllckNoaWxkQm91
bmRzLmhlaWdodCgpKTsKIH0KIAotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VDQ0xh
eWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwg
cmV1c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKIHsKICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0
OwpAQCAtMjM0LDcgKzI1Miw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NM
YXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiB9CiAKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNp
bXBsZSB0cmVlLCBzeW5jaHJvbml6ZXMgaXQsIHRoZW4gc3luY2hyb25pemVzIHRvIGEgdG90YWxs
eSBuZXcgdHJlZS4gQWxsIGxheWVycyBmcm9tIHRoZSBvbGQgdHJlZSBzaG91bGQgYmUgZGVsZXRl
ZC4KLVRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kp
CitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlVGhlbkRlc3Ryb3kp
CiB7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGludD4g
Y2NMYXllckRlc3RydWN0aW9uTGlzdDsKQEAgLTI2NSw3ICsyODMsNyBAQCBURVNUKFRyZWVTeW5j
aHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVRoZW5EZXN0cm95KQogfQogCiAvLyBDb25zdHJ1
Y3RzK3N5bmNzIGEgdHJlZSB3aXRoIG1hc2ssIHJlcGxpY2EsIGFuZCByZXBsaWNhIG1hc2sgbGF5
ZXJzLgotVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGlj
YU1hc2tMYXllcnMpCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNNYXNrUmVwbGlj
YUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogewogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CkBAIC0zMDcsNSArMzI1LDg1IEBAIFRFU1QoVHJlZVN5bmNocm9uaXpl
clRlc3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogICAgIGV4cGVjdFRy
ZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQo
KSk7CiB9CiAKK1RFU1RfRihUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikK
K3sKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAg
Ly8gU3luYyB3aXRoIG5vIGFuaW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xh
eWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIDApOworCisgICAgLy8gQWRkIGFuaW1hdGlvbiB0byBtYWluIHRocmVhZCBj
b250cm9sbGVyLgorICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQo
KSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0
KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9s
bGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWls
YWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2
ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOwor
fQorCitURVNUX0YoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNBbmltYXRpb25Qcm9wZXJ0aWVz
KQoreworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZ2V0QW5pbWF0
aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLmFw
cGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmlt
YXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjY0xh
eWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShj
Y0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9u
KDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZl
QW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJvb3Qt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisKKyAgICAvLyBQdXNoIGFuIGFuaW1hdGlv
biBwcm9wZXJ0eSBjaGFuZ2UgdG8gdGhlIGltcGwgdGhyZWFkIChzaG91bGQgbm90IGNhdXNlIGFu
IGFuaW1hdGlvbiB0byBiZSBhZGRlZCkuCisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXll
clRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpWzBdLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJU
cmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1h
dGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIGNj
TGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKK30KKworVEVTVF9G
KFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKK3sKKyAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5
ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRo
IG5vIGFuaW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3Qg
PSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IDApOworICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFj
dGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwor
CisgICAgRVhQRUNUX1RSVUUoY2NMYXllclRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCkt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisg
ICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGdldEFu
aW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFuaW1hdGlvbnMo
KS5jbGVhcigpOworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJU
cmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9GQUxT
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Cit9CisKK1RFU1RfRihUcmVlU3lu
Y2hyb25pemVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlvbikKK3sKKyAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVl
Um9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworCisgICAgLy8gU3luYyB3aXRoIG5vIGFu
aW1hdGlvbnMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOwor
ICAgIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQoKSktPmFjdGl2ZUFu
aW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY2NMYXll
clRyZWVSb290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY2NMYXllclRyZWVSb290LT5hbmlt
YXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmlt
YXRpb24gdW50aWwgaXQgaXMgZmluaXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRo
cmVhZCdzIGFuaW1hdGlvbiBzaG91bGQgYmUgY2xlYXJlZC4KKyAgICBPd25QdHI8Q0NBbmltYXRp
b25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0
b3IpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0
ZSgwLCAqZXZlbnRzKTsKKyAgICBjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKKworICAgIEVYUEVDVF9GQUxTRShjY0xheWVyVHJlZVJv
b3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKHNpemVfdCgxKSwgZ2V0QW5pbWF0
aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygpLnNp
emUoKSk7CisKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6
ZV90KDApLCBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3Rp
dmVBbmltYXRpb25zKCkuc2l6ZSgpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127687</attachid>
            <date>2012-02-17 20:13:19 -0800</date>
            <delta_ts>2012-02-21 12:28:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120217231318.patch</filename>
            <type>text/plain</type>
            <size>113768</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBhYjY4NGIyMzY3M2I4
M2E3Yjg4OGFiYjVjODIzMzhjYTE3MWI1NC4uNDk1OWQyMWU4ZjZlYzhhNTUyYjZmYzliYzMzOTM5
NjliOTZlMmIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxMi0wMi0xNyAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFk
ZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9NZWRpYSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NMYXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0QW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Om51bUNo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmFuaW1hdGlvbkNvbnRy
b2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1h
dGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzV2FpdGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNSdW5uaW5nT3JIYXNSdW4pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBY3RpdmVBbmltYXRpb246OmNsb25lRm9ySW1wbFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c3luY2hyb25pemVQcm9wZXJ0aWVzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOgorICAg
ICAgICAoQ0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmlt
YXRpb246OkFuaW1hdGlvblNpZ25hdHVyZTo6QW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAg
KEFuaW1hdGlvblNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlv
bjo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkN1cnZlLmg6CisgICAgICAgIChDQ0FuaW1hdGlvbkN1cnZlKToKKyAgICAgICAg
KENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25TdGFydGVkRXZl
bnQ6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KToKKyAgICAgICAgKENDQW5pbWF0aW9uU3RhcnRl
ZEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXN1
bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdB
bmltYXRpb25zVG9JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9u
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Z2V0QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6b3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmFu
aW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnNldEFuaW1hdGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhy
ZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFu
aW1hdGVQYWdlU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6Om5lZWRzQW5pbWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0FuaW1hdGVMYXllcnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6cG9zdEFuaW1hdGlvbkV2ZW50
c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6Cisg
ICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRGVidWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlYnVnU2Nv
cGVkU2V0TWFpblRocmVhZDo6RGVidWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlYnVnU2NvcGVkU2V0TWFpblRocmVhZDo6fkRlYnVnU2NvcGVkU2V0TWFpblRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZl
bnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0QW5pbWF0aW9uRXZlbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisgICAgICAg
IChDQ1RocmVhZFByb3h5KToKKwogMjAxMi0wMi0xNyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNs
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwODA3
MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDg3M2VhN2QwYjc0MDEwMGE2NGZhYjM3
ODYyMzU2ZjBhMDFlMzgwOC4uZTJjYmIzZWFhZjFjNTE0MDNjNDg4OTY1NjFkOGQ0ZmIxNTkzMDM3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMi0wMi0x
NyAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFBsdW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgICogdGVzdHMv
Q0NBbmltYXRpb25UZXN0Q29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMpOgor
ICAgICAgICAoRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjp+RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgor
ICAgICAgICAoRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5GYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRp
b246OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0VHJh
bnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVy
YXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZh
bHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSk6
CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHA6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6OmlkKToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpGYWtlQ29udHJvbGxlckNsaWVudDo6Ym91bmRzKToKKyAgICAgICAg
KEZha2VDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3Rp
dmVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0NMYXll
clRyZWVIb3N0SW1wbFRlc3Q6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxU
aHJlYWQpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdEhvb2tzOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKE1vY2tMYXll
clRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6
OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNb2NrTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVy
VHJlZUhvc3RDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OnBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQpOgorICAgICAg
ICAoQ0NMYXllclRyZWVIb3N0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RUZXN0OjpkaXNwYXRjaEFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0
QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRB
bmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmFuaW1hdGVMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6
YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMv
VHJlZVN5bmNocm9uaXplclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChU
cmVlU3luY2hyb25pemVyQW5pbWF0aW9uVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU3lu
Y2hyb25pemVyQW5pbWF0aW9uVGVzdDo6Z2V0QW5pbWF0aW9uQ29udHJvbGxlcik6CisKIDIwMTIt
MDItMTcgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDgwNzEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOGJl
ODBmMzYzYmJiYzI1NTQzYTRlYjhlOWZlMDY1MTQ3ODRlYjRhOC4uODViZjAxYmRjYTgyMWI4NWMy
YjdjOWU1MmYyNDZkODE1OWZhMjNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzIzMiw2ICszMjMy
LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkN1cnZlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblJlc3VsdHMuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNEcmF3UXVhZC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwJywKQEAgLTMyNDksNiArMzI1MCw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDUxZjIwNDNmYzU0YjQ1ZGNhYTQ2NDM0OGM5NDc3Zjg3YTQ2
MjRmYTUuLmZiNzMzZmZjMzI5MjlhMWUyOTdmN2QzNjdkZmJiM2Y3NDJlZjZiODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NM
YXllcio+JiBjaGlsZHJlbikKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZChH
cmFwaGljc0xheWVyKiBjaGlsZExheWVyKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
KGNoaWxkTGF5ZXIpOwotICAgIGlmICghbV9pblNldENoaWxkcmVuKSAKKyAgICBpZiAoIW1faW5T
ZXRDaGlsZHJlbikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKQEAgLTM4Miw2ICsz
ODIsMzEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMo
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7
CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWVPZmZzZXQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJv
eFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXItPnBhdXNlQW5pbWF0
aW9uKGFuaW1hdGlvbk5hbWUsIHRpbWVPZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sK
KyAgICBtX2xheWVyLT5yZW1vdmVBbmltYXRpb24oYW5pbWF0aW9uTmFtZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sK
KyAgICBtX2xheWVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKK30KKwordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5ZXItPnJlc3Vt
ZUFuaW1hdGlvbnMoKTsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hh
bmdlZCA9IGZhbHNlOwpAQCAtMzk2LDEyICs0MjEsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CiAgICAgICAgICAgICBjaGlsZHJl
bkNoYW5nZWQgPSB0cnVlOwotICAKKwogICAgICAgICAgICAgLy8gVGhlIG9sZCBjb250ZW50cyBs
YXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0ZUNoaWxkTGlzdC4KICAgICAgICAgICAgIG1f
Y29udGVudHNMYXllciA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiAgICAgaWYgKGNoaWxk
cmVuQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CkBAIC01NTAsNyArNTc1
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0Qo
KQogICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAuNWYsIDAuNWYp
KTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5
ZXItPnNldFRyYW5zZm9ybShpZGVudGl0eSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFNldCB0
aGUgb2xkIGxheWVyIHRvIG9wYWNpdHkgb2YgMS4gRnVydGhlciBkb3duIHdlIHdpbGwgc2V0IHRo
ZSBvcGFjaXR5IG9uIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCiAgICAgICAgIG1fbGF5ZXItPnNldE9w
YWNpdHkoMSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKaW5kZXggZGJmMTVl
NTFkYjEwYjdiZDY1MTU2ZGU4ZTdkODAxOTNmZjg3YjBkMy4uNGRiNWIzOTZiMDM0NzAwMTJjNGZl
MDVkZTAzZjZjY2Q0ODdlNzg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgK
QEAgLTk1LDYgKzk1LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNU
b01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0Nh
bnZhcyhQbGF0Zm9ybUxheWVyKik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5p
bWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwg
dm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRv
dWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCiAgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RGVidWdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggNGJjZjI5N2ZmOTI0NjhjOTg0ZjViNGZjYzEyYmZmNTNiMjY2ZDY3
NC4uYjYyYTMzZTA4Njc1N2NlOTdkNmY4YTEwMzM1NDUzMTk3YzkzM2I3NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2lmIFVTRShTS0lBKQpAQCAtNTksNiArNjAs
NyBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKCkKICAgICA6IG1fbmVlZHNEaXNwbGF5
KGZhbHNlKQogICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50
KDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQ
b2ludCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05
Miw2ICs5NCwzOCBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgcmVtb3Zl
QWxsQ2hpbGRyZW4oKTsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91
YmxlIHRpbWVPZmZzZXQpCit7CisgICAgYm9vbCBhZGRlZEFuaW1hdGlvbiA9IG1fYW5pbWF0aW9u
Q29udHJvbGxlci0+YWRkQW5pbWF0aW9uKHZhbHVlcywgYm94U2l6ZSwgYW5pbWF0aW9uLCBhbmlt
YXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBpZiAoYWRkZWRBbmltYXRpb24pCisgICAgICAg
IHNldE5lZWRzQ29tbWl0KCk7CisgICAgcmV0dXJuIGFkZGVkQW5pbWF0aW9uOworfQorCit2b2lk
IExheWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5wYXVz
ZUFuaW1hdGlvbihhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKKyAgICBzZXROZWVkc0NvbW1p
dCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZW1vdmVB
bmltYXRpb24oYW5pbWF0aW9uTmFtZSk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9p
ZCBMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKKyAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworICAgIHNldE5l
ZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygp
Cit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAg
c2V0TmVlZHNDb21taXQoKTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjpzZXRJc05vbkNvbXBv
c2l0ZWRDb250ZW50KGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVudCkKIHsKICAgICBtX2lzTm9u
Q29tcG9zaXRlZENvbnRlbnQgPSBpc05vbkNvbXBvc2l0ZWRDb250ZW50OwpAQCAtNTE0LDYgKzU0
OCwxMiBAQCBib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRBbmltYXRpb25Db250
cm9sbGVyKFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNv
bnRyb2xsZXIpCit7CisgICAgbV9hbmltYXRpb25Db250cm9sbGVyID0gYW5pbWF0aW9uQ29udHJv
bGxlcjsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+OjppdGVyYXRvciwgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+OjppdGVyYXRvciwgdm9pZCopCiB7CiAgICAgLy8gQ3VycmVudGx5IHdlIGRvbid0
IHVzZSB6LW9yZGVyIHRvIGRlY2lkZSB3aGF0IHRvIHBhaW50LCBzbyB0aGVyZSdzIG5vIG5lZWQg
dG8gYWN0dWFsbHkgc29ydCBMYXllckNocm9taXVtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBm
ZjJlN2QyODYyNjIyZmFkMmMwNjkzOGQ2ZjUyNTY5MTQwZjg4M2ZhLi5jOGY4YmQ0ZGNlMjg4NDY4
YjUwZDEwNzE5OWYwNWJkMmM3Y2IxZmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01Miw2ICs1
Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNs
YXNzIENDVGV4dHVyZVVwZGF0ZXI7CkBAIC02MSw3ICs2Miw2IEBAIGNsYXNzIFJlZ2lvbjsKIC8v
IEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBTcGVjaWFsIGxheWVyIHR5cGVzIGFy
ZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBjbGFzcyBMYXllckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewotICAgIGZyaWVuZCBjbGFzcyBMYXllclRp
bGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY3JlYXRlKCk7CiAKQEAgLTIxNSw3ICsyMTUsMjAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
QWx3YXlzUmVzZXJ2ZVRleHR1cmVzKGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKSB7IG1fYWx3
YXlzUmVzZXJ2ZVRleHR1cmVzID0gYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOyB9CiAgICAgYm9vbCBh
bHdheXNSZXNlcnZlVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Fsd2F5c1Jlc2VydmVUZXh0
dXJlczsgfQogCisgICAgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2b2lkIHBhdXNlQW5pbWF0
aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAg
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisKKyAg
ICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIHJlc3VtZUFu
aW1hdGlvbnMoKTsKKwogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsK
KyAgICBmcmllbmQgY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdDsKKyAgICBmcmllbmQgY2xhc3Mg
TGF5ZXJUaWxlckNocm9taXVtOworICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOwor
ICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25pemVyQW5pbWF0aW9uVGVzdDsKKwogICAgIExh
eWVyQ2hyb21pdW0oKTsKIAogICAgIGJvb2wgaXNQYWludGVkQXhpc0FsaWduZWRJblNjcmVlbigp
IGNvbnN0OwpAQCAtMjMzLDggKzI0Niw2IEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIGZyaWVuZCBjbGFzcyBUcmVlU3luY2hyb25p
emVyOwotICAgIGZyaWVuZCBjbGFzcyBDQ0xheWVySW1wbDsKICAgICAvLyBDb25zdHJ1Y3RzIGEg
Q0NMYXllckltcGwgb2YgdGhlIGNvcnJlY3QgcnVudGltZSB0eXBlIGZvciB0aGlzIExheWVyQ2hy
b21pdW0gdHlwZS4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUND
TGF5ZXJJbXBsKCk7CiAgICAgaW50IG1fbGF5ZXJJZDsKQEAgLTI0MywxMCArMjU0LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldFBhcmVudChMYXllckNocm9taXVtKik7CiAgICAgYm9vbCBoYXNB
bmNlc3RvcihMYXllckNocm9taXVtKikgY29uc3Q7CiAKLSAgICBzaXplX3QgbnVtQ2hpbGRyZW4o
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgIH0K
KyAgICBzaXplX3QgbnVtQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLnNpemUo
KTsgfQogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNoaWxkIG9yIC0xIGlmIG5v
dCBmb3VuZC4KICAgICBpbnQgaW5kZXhPZkNoaWxkKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKQEAg
LTI1NCwxMSArMjYyLDE2IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBj
YWxsZWQgZnJvbSByZW1vdmVGcm9tUGFyZW50LgogICAgIHZvaWQgcmVtb3ZlQ2hpbGQoTGF5ZXJD
aHJvbWl1bSopOwogCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKSB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKyAgICB2
b2lkIHNldEFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcj4pOworCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IG1fY2hpbGRy
ZW47CiAgICAgTGF5ZXJDaHJvbWl1bSogbV9wYXJlbnQ7CiAKICAgICBSZWZQdHI8Q0NMYXllclRy
ZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CiAKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKKwogICAgIC8vIExheWVyIHByb3BlcnRp
ZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyZWVTeW5jaHJvbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKaW5kZXggZDBmZDBjZTUyM2Q2Mzg4NGJlOTMy
ZTFiZDQxNjU4MmYyNTc2MmU0MC4uZGUxY2Y4YTY5NGJhMWIzZmYxY2FmMTc4NDZmZGIxZGU1NjIx
ODQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVHJlZVN5bmNocm9uaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNzQsNiArNzUs
OCBAQCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6
ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bQogICAgIGVsc2UKICAgICAgICAgY2NMYXllcklt
cGwtPnNldFJlcGxpY2FMYXllcigwKTsKIAorICAgIGxheWVyLT5hbmltYXRpb25Db250cm9sbGVy
KCktPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjY0xheWVySW1wbC0+YW5pbWF0aW9uQ29udHJvbGxl
cigpKTsKKwogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsK
ICAgICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uY3BwCmluZGV4IDIxZTZjYzdhOWUyNDZlYzBiZWZhYWEwNTg0ZjZkMjIxYzQ0
NjIwZWEuLjAwMDljYzg4OTgzYTA2NTliMzhhNjkzYTk2OWNhNGMwNzc2NjU3YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKQEAgLTQ0LDYgKzQ0LDggQEAgQ0NBY3RpdmVB
bmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4g
Y3VydmUsIEdyb3VwSUQKIHsKIH0KIAorQ0NBY3RpdmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1h
dGlvbigpIHsgfQorCiB2b2lkIENDQWN0aXZlQW5pbWF0aW9uOjpzZXRSdW5TdGF0ZShSdW5TdGF0
ZSBydW5TdGF0ZSwgZG91YmxlIG5vdykKIHsKICAgICBpZiAocnVuU3RhdGUgPT0gUnVubmluZyAm
JiBtX3J1blN0YXRlID09IFBhdXNlZCkKQEAgLTYzLDYgKzY1LDIxIEBAIGJvb2wgQ0NBY3RpdmVB
bmltYXRpb246OmlzRmluaXNoZWRBdChkb3VibGUgdGltZSkgY29uc3QKICAgICAgICAgJiYgbV9p
dGVyYXRpb25zICogbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSA8PSB0aW1lIC0gc3RhcnRU
aW1lKCkgLSBtX3RvdGFsUGF1c2VkVGltZTsKIH0KIAorYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
aXNXYWl0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9y
TmV4dFRpY2sKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxh
YmlsaXR5CisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gV2FpdGluZ0ZvclN0YXJ0VGltZTsKK30K
KworYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNSdW5uaW5nT3JIYXNSdW4oKSBjb25zdAorewor
ICAgIHJldHVybiBtX3J1blN0YXRlID09IFJ1bm5pbmcKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9
PSBGaW5pc2hlZAorICAgICAgICB8fCBtX3J1blN0YXRlID09IEFib3J0ZWQKKyAgICAgICAgfHwg
bV9ydW5TdGF0ZSA9PSBQYXVzZWQ7Cit9CisKIGRvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJp
bVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKIHsKICAgICBkb3VibGUg
dHJpbW1lZCA9IG5vdzsKQEAgLTk1LDQgKzExMiwzNiBAQCBkb3VibGUgQ0NBY3RpdmVBbmltYXRp
b246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0CiAgICAgcmV0
dXJuIGZtb2QodHJpbW1lZCwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSk7CiB9CiAKK1Bh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IENDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvcklt
cGxUaHJlYWQoKSBjb25zdAoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1
cm4oYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKG1fYW5pbWF0aW9uQ3VydmUtPmNsb25l
KCksIG1fZ3JvdXAsIG1fdGFyZ2V0UHJvcGVydHkpKSk7CisgICAgdG9SZXR1cm4tPm1fcnVuU3Rh
dGUgPSBtX3J1blN0YXRlOworICAgIHRvUmV0dXJuLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlv
bnM7CisgICAgdG9SZXR1cm4tPm1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWU7CisgICAgdG9SZXR1
cm4tPm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgdG9SZXR1cm4tPm1fdG90YWxQYXVz
ZWRUaW1lID0gbV90b3RhbFBhdXNlZFRpbWU7CisgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBDQ0FjdGl2ZUFuaW1hdGlvbjo6c3luY2hyb25pemVQcm9wZXJ0aWVzKEND
QWN0aXZlQW5pbWF0aW9uKiBvdGhlcikKK3sKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhl
IGltcGwgdGhyZWFkIHRvIGluaXRpYXRlIGEgcnVuIHN0YXRlIGNoYW5nZS4KKyAgICAvLyBUaGlz
IGhhcHBlbnMgd2hlbiB0aGUgYW5pbWF0aW9uIHdhcyB3YWl0aW5nIGZvciBhIGZ1dHVyZSBldmVu
dCB0byB0YWtlCisgICAgLy8gcGxhY2UsIGFuZCB0aGUgZXZlbnQgaGFzIHRha2VuIHBsYWNlLiBJ
biB0aGF0IGNhc2UsIHdlIHdhbnQgJ3RoaXMnIHRvCisgICAgLy8gYXNzdW1lIHRoZSBpbXBsIHRo
cmVhZCdzIHJ1biBzdGF0ZSBhbmQgc3RhcnQgdGltZS4KKyAgICBpZiAoaXNXYWl0aW5nKCkgJiYg
b3RoZXItPmlzUnVubmluZ09ySGFzUnVuKCkpIHsKKyAgICAgICAgbV9ydW5TdGF0ZSA9IG90aGVy
LT5tX3J1blN0YXRlOworICAgICAgICBtX3N0YXJ0VGltZSA9IG90aGVyLT5tX3N0YXJ0VGltZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBvdGhlci0+bV9ydW5TdGF0ZSA9IG1fcnVuU3RhdGU7Cisg
ICAgICAgIG90aGVyLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lOworICAgIH0KKworICAgIC8v
IENoYW5nZSBpbiBzdGF0ZSByZWxhdGVkIHRvIGl0ZXJhdGlvbnMgYW5kIHBhdXNlIGlzIGFsd2F5
cyBpbml0aWF0ZWQgZnJvbQorICAgIC8vIHRoZSBtYWluIHRocmVhZCwgc28gaXQgaXMgc2FmZSB0
byBwdXNoIHByb3BlcnRpZXMgaW4gdGhhdCBkaXJlY3Rpb24uCisgICAgb3RoZXItPm1faXRlcmF0
aW9ucyA9IG1faXRlcmF0aW9uczsKKyAgICBvdGhlci0+bV9wYXVzZVRpbWUgPSBtX3BhdXNlVGlt
ZTsKKyAgICBvdGhlci0+bV90b3RhbFBhdXNlZFRpbWUgPSBtX3RvdGFsUGF1c2VkVGltZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgK
aW5kZXggYzIyMjI3OTQxYTNjZWQxMmQ2NThkNzZkNjA0ZWVlOWZiYWQwYTNkMS4uNjk0NDhlNTNi
Mjk1ZWViNDhkODEwMzJhMzQ5ODNiNmYwN2U4NDAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oCkBAIC0yNSwyNCArMjUsMjcgQEAKICNpZm5kZWYgQ0NBY3RpdmVBbmltYXRpb25f
aAogI2RlZmluZSBDQ0FjdGl2ZUFuaW1hdGlvbl9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlv
bkN1cnZlLmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsK
LQogLy8gQSBDQ0FjdGl2ZUFuaW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSByZXF1aXJl
ZCB0byBwbGF5IGEgQ0NBbmltYXRpb25DdXJ2ZS4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGFmZmVj
dGVkIHByb3BlcnR5LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVkLCBldGMuKSwKIC8v
IGxvb3AgY291bnQsIGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0aW1lIHNwZW50IHBh
dXNlZC4KIGNsYXNzIENDQWN0aXZlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDQ0FjdGl2ZUFuaW1hdGlvbik7CiBwdWJsaWM6CiAgICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11
c3QgYmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1l
IEdyb3VwSUQKICAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3Rh
cnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwogICAgIC8vIG1heSBh
bmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5p
bWF0aW9ucyBpbiB0aGUKICAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90
ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKICAgICAvLyBwcm9w
ZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIGludCBH
cm91cElEOworICAgIHR5cGVkZWYgc2l6ZV90IEdyb3VwSUQ7CiAKICAgICAvLyBBbmltYXRpb25z
IGJlZ2luIGluIG9uZSBvZiB0aGUgJ3dhaXRpbmcnIHN0YXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5n
IGZvciB0aGUgbmV4dCB0aWNrCiAgICAgLy8gd2lsbCBzdGFydCB0aGUgbmV4dCB0aW1lIHRoZSBj
b250cm9sbGVyIGFuaW1hdGVzLiBBbmltYXRpb25zIHdhaXRpbmcgZm9yIHRhcmdldApAQCAtNjgs
MTIgKzcxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07CiAKKyAgICBzdHJ1
Y3QgQW5pbWF0aW9uU2lnbmF0dXJlIHsKKyAgICAgICAgQW5pbWF0aW9uU2lnbmF0dXJlKEdyb3Vw
SUQgZ3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICA6
IGdyb3VwSUQoZ3JvdXBJRCkKKyAgICAgICAgICAgICwgdGFyZ2V0UHJvcGVydHkodGFyZ2V0UHJv
cGVydHkpIHsgfQorICAgICAgICBHcm91cElEIGdyb3VwSUQ7CisgICAgICAgIFRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5OworICAgIH07CisKICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUs
IEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihjdXJ2ZSwgZ3JvdXAs
IHRhcmdldFByb3BlcnR5KSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRp
b24oKSB7IH0KKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpOwogCiAgICAgR3JvdXBJ
RCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0
YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KQEAgLTkz
LDYgKzEwNCw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRmluaXNoZWRBdChkb3VibGUgdGltZSkg
Y29uc3Q7CiAgICAgYm9vbCBpc0ZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZSA9
PSBGaW5pc2hlZCB8fCBtX3J1blN0YXRlID09IEFib3J0ZWQ7IH0KIAorICAgIGJvb2wgaXNXYWl0
aW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc1J1bm5pbmdPckhhc1J1bigpIGNvbnN0OworCiAgICAg
Q0NBbmltYXRpb25DdXJ2ZSogYW5pbWF0aW9uQ3VydmUoKSB7IHJldHVybiBtX2FuaW1hdGlvbkN1
cnZlLmdldCgpOyB9CiAgICAgY29uc3QgQ0NBbmltYXRpb25DdXJ2ZSogYW5pbWF0aW9uQ3VydmUo
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkN1cnZlLmdldCgpOyB9CiAKQEAgLTEwMCw2ICsx
MTQsMTIgQEAgcHVibGljOgogICAgIC8vIG9mIGl0ZXJhdGlvbnMsIHJldHVybnMgdGhlIHJlbGF0
aXZlIHRpbWUgaW4gdGhlIGN1cnJlbnQgaXRlcmF0aW9uLgogICAgIGRvdWJsZSB0cmltVGltZVRv
Q3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25zdDsKIAorICAgIEFuaW1hdGlvblNpZ25h
dHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBBbmltYXRpb25TaWduYXR1cmUobV9ncm91
cCwgbV90YXJnZXRQcm9wZXJ0eSk7IH0KKworICAgIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IGNsb25lRm9ySW1wbFRocmVhZCgpIGNvbnN0OworCisgICAgdm9pZCBzeW5jaHJvbml6ZVBy
b3BlcnRpZXMoQ0NBY3RpdmVBbmltYXRpb24qKTsKKwogcHJpdmF0ZToKICAgICBDQ0FjdGl2ZUFu
aW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBHcm91cElELCBUYXJnZXRQcm9w
ZXJ0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaAppbmRleCBkZTk3ZTM4YzBhMjRl
Nzc3OGI4ZDk2ZGM5MGZlZjZlYzk5MzliYWUzLi41MzNhYmFmZWY0NTQ3ZDU0OTNiYTU5NzExYmUx
NTUxNjY3ZWUyNGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCkBAIC0yNSw2ICsy
NSwxMCBAQAogI2lmbmRlZiBDQ0FuaW1hdGlvbkN1cnZlX2gKICNkZWZpbmUgQ0NBbmltYXRpb25D
dXJ2ZV9oCiAKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0Zsb2F0
QW5pbWF0aW9uQ3VydmU7CkBAIC00MSw2ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
ZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgp
IGNvbnN0ID0gMDsKIAogICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogdG9GbG9hdEFu
aW1hdGlvbkN1cnZlKCkgY29uc3Q7CiAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSogdG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIGNvbnN0OwpAQCAtNjAsNyArNjUsNyBAQCBj
bGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0K
IAotICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91Ymxl
IHQsIGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkgY29uc3QgPSAwOwogCiAgICAgLy8gUGFydGlh
bCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjIxYTc5ZTMxMzk3ZWM4OGUzZDU5NGU5MjMyNjNjMWViODAzM2U4NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uRXZlbnRzLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ0FuaW1hdGlvbkV2ZW50c19oCisjZGVmaW5lIENDQW5pbWF0aW9uRXZlbnRzX2gK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJ
bmRpY2F0ZXMgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0YXJ0ZWQgb24gYSBwYXJ0aWN1bGFyIGxh
eWVyLgorc3RydWN0IENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50IHsKKyAgICBDQ0FuaW1hdGlvblN0
YXJ0ZWRFdmVudChpbnQgbGF5ZXJJRCwgZG91YmxlIHRpbWUpCisgICAgICAgIDogbGF5ZXJJRChs
YXllcklEKQorICAgICAgICAsIHRpbWUodGltZSkgeyB9CisgICAgaW50IGxheWVySUQ7CisgICAg
ZG91YmxlIHRpbWU7Cit9OworCit0eXBlZGVmIFZlY3RvcjxDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVu
dD4gQ0NBbmltYXRpb25FdmVudHNWZWN0b3I7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIENDQW5pbWF0aW9uRXZlbnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmJhNzQ4ZTAxNGQxM2RlZThh
YTNmNmY1ZmMzMzBjZDlkMjBmYWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIiAvLyBmb3IgS2V5ZnJhbWVWYWx1ZUxpc3QKKyNpbmNsdWRlICJj
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCkKK3sKK30KKworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6On5DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI+IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworfQorCitib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRTaXplJiAvKmJveFNpemUqLywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworfQorCit2b2lkIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lKQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNw
ZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCit7Cit9CisKKy8vIEVuc3VyZXMgdGhhdCB0
aGUgbGlzdCBvZiBhY3RpdmUgYW5pbWF0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSBp
bXBsIHRocmVhZAorLy8gYXJlIGtlcHQgaW4gc3luYy4KK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnN5bmNocm9uaXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIHJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRP
bkltcGxUaHJlYWQoY29udHJvbGxlckltcGwpOworICAgIHB1c2hOZXdBbmltYXRpb25zVG9JbXBs
VGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25N
YWluVGhyZWFkKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhj
b250cm9sbGVySW1wbCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJl
bW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbkltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBBbnkgYW5pbWF0aW9ucyBmaW5p
c2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQn
cyBjb2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwt
Pm1fZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmUoY29udHJv
bGxlckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zW2ldLmdyb3VwSUQsIGNvbnRyb2xsZXJJbXBs
LT5tX2ZpbmlzaGVkQW5pbWF0aW9uc1tpXS50YXJnZXRQcm9wZXJ0eSk7CisgICAgY29udHJvbGxl
ckltcGwtPm1fZmluaXNoZWRBbmltYXRpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7CisgICAgLy8gQW55IG5l
dyBhbmltYXRpb25zIG93bmVkIGJ5IHRoZSBtYWluIHRocmVhZCdzIGNvbnRyb2xsZXIgYXJlIGNs
b25lZCBhbmQgYWRkZSB0byB0aGUgaW1wbCB0aHJlYWQncyBjb250cm9sbGVyLgorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmICghY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbihtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPmdyb3VwKCksIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSkpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+YWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIERl
bGV0ZSBhbGwgaW1wbCB0aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29y
cmVzcG9uZGluZyBtYWluIHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24s
IGNvbnRyb2xsZXItPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3Ig
aSBpcyBpbmNyZW1lbnRlZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxv
b3AgdGVybWluYXRpb24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1w
bC0+bV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgQ0NBY3RpdmVBbmltYXRp
b24qIGN1cnJlbnQgPSBnZXRBY3RpdmVBbmltYXRpb24oY29udHJvbGxlckltcGwtPm1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgIGlmICghY3VycmVudCkKKyAgICAgICAg
ICAgIGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBpKys7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJvcGVydGllcyhDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIERlbGV0ZSBhbGwgaW1wbCB0
aHJlYWQgYW5pbWF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBtYWlu
IHRocmVhZCBhbmltYXRpb24uCisgICAgLy8gRWFjaCBpdGVyYXRpb24sIGNvbnRyb2xsZXItPm1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgaXMgZGVjcmVtZW50ZWQgb3IgaSBpcyBpbmNyZW1lbnRl
ZAorICAgIC8vIGd1YXJhbnRlZWluZyBwcm9ncmVzcyB0b3dhcmRzIGxvb3AgdGVybWluYXRpb24u
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVBbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50
SW1wbCA9IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAg
ICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0aW9uKGN1cnJl
bnRJbXBsLT5ncm91cCgpLCBjdXJyZW50SW1wbC0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAg
IEFTU0VSVChjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnQpCisgICAgICAgICAgICBjdXJy
ZW50LT5zeW5jaHJvbml6ZVByb3BlcnRpZXMoY3VycmVudEltcGwpOworICAgIH0KK30KKworQ0NB
Y3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpnZXRBY3RpdmVBbmlt
YXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAgICAgICByZXR1
cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoQ0NBY3RpdmVBbmltYXRpb246Okdy
b3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9w
ZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgp
ID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSB0
YXJnZXRQcm9wZXJ0eSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDZkNWMxNmVlOGNlOTU2OWEzNGRiNTQ5MjM0MTljNjkzZWY5YWZj
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgKQEAgLTAsMCArMSw4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCisjZGVm
aW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1h
dGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uOworY2xhc3Mg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOworc3RydWN0IEludFNpemU7CitjbGFzcyBL
ZXlmcmFtZVZhbHVlTGlzdDsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4g
Y3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpOwor
CisgICAgLy8gVGhlc2UgYXJlIHZpcnR1YWwgZm9yIHRlc3RpbmcuCisgICAgdmlydHVhbCBib29s
IGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJv
eFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91
YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CisgICAgdmly
dHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9m
IGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFk
CisgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93
bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KKyAgICB2b2lkIHN5bmNocm9u
aXplQW5pbWF0aW9ucyhDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKworICAgIC8v
IFRoaXMgaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KKyAgICBWZWN0b3I8T3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiA+JiBhY3RpdmVBbmltYXRpb25zKCkgeyByZXR1cm4gbV9hY3RpdmVB
bmltYXRpb25zOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uSW1w
bFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1c2hO
ZXdBbmltYXRpb25zVG9JbXBsVGhyZWFkKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCop
OworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKyAgICB2b2lkIHB1c2hBbmltYXRpb25Qcm9wZXJ0
aWVzKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisgICAgQ0NBY3RpdmVBbmlt
YXRpb24qIGdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsKKyAgICB2b2lkIHJlbW92ZShDQ0FjdGl2
ZUFuaW1hdGlvbjo6R3JvdXBJRCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5KTsK
KworICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRp
b25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5jcHAKaW5kZXggYmJjYTljYmQ5MDU1ZTFlYzEzY2MwYTk3NDYz
OWM1Zjk3MDg4MDk5Mi4uZWQxZTVlYTAwNzA0ZGY1NjA1MTE3YzBjYTdmODQ2MzI4ZmEyMjlmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuaCIKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00NCwyMiArNDUsMjIgQEAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkMKIHsKIH0KIAotdm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5U
aW1lU2VjcykKK0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCgpIHsgfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3RvciYgZXZlbnRzKQogewotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGlj
ayhmcmFtZUJlZ2luVGltZVNlY3MpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWUoZnJhbWVCZWdpblRpbWVTZWNzKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRp
b25zV2FpdGluZ0Zvck5leHRUaWNrKGZyYW1lQmVnaW5UaW1lU2VjcywgZXZlbnRzKTsKKyAgICBz
dGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2VjcywgZXZl
bnRzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZy
YW1lQmVnaW5UaW1lU2VjcywgZXZlbnRzKTsKICAgICByZXNvbHZlQ29uZmxpY3RzKGZyYW1lQmVn
aW5UaW1lU2Vjcyk7CiAgICAgdGlja0FuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWVTZWNzKTsKICAg
ICBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwotICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2VjcywgZXZl
bnRzKTsKIH0KIAogdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNz
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKQogewogICAgIG1fYWN0aXZlQW5pbWF0aW9u
cy5hcHBlbmQoYW5pbSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YW5p
bWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZSh0aGlzKTsKIH0KIAogQ0NBY3RpdmVBbmlt
YXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9u
KENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElEIGdyb3VwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFy
Z2V0UHJvcGVydHkgcHJvcGVydHkpCkBAIC04MCwyNSArODEsMjggQEAgYm9vbCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNr
KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMpCiB7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwog
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsKKyAg
ICAgICAgICAgIGV2ZW50cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobV9jbGllbnQt
PmlkKCksIG5vdykpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3Vi
bGUgbm93KQordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0
b3ImIGV2ZW50cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1f
YWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KQorICAgICAgICBpZiAobV9h
Y3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0g
bm93KSB7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOworICAgICAgICAgICAgZXZlbnRzLmFwcGVu
ZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+aWQoKSwgbm93KSk7CisgICAgICAg
IH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit2b2lk
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
clRhcmdldEF2YWlsYWJpbGl0eShkb3VibGUgbm93LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYg
ZXZlbnRzKQogewogICAgIC8vIEZpcnN0IGNvbGxlY3QgcnVubmluZyBwcm9wZXJ0aWVzLgogICAg
IFRhcmdldFByb3BlcnRpZXMgYmxvY2tlZFByb3BlcnRpZXM7CkBAIC0xMzAsNiArMTM0LDcgQEAg
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkKICAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9u
KSB7CiAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKICAgICAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgICAgIGV2ZW50
cy5hcHBlbmQoQ0NBbmltYXRpb25TdGFydGVkRXZlbnQobV9jbGllbnQtPmlkKCksIG5vdykpOwog
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKQEAgLTE3OCw5ICsxODMsMTAgQEAg
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRBbmltYXRp
b25zKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKQorICAgICAgICBpZiAoYWxsQW5p
bXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIG1fZmluaXNoZWRBbmltYXRp
b25zLmFwcGVuZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNpZ25hdHVyZSgpKTsKICAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBpKys7CiAgICAgfQogfQpAQCAtMTk0LDE0ICsyMDAsMTEgQEAg
dm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJs
ZSBub3cpCiAKICAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTog
ewogICAgICAgICAgICAgICAgIGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIHRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5hbmltYXRpb25DdXJ2
ZSgpLT50b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUt
PmdldFZhbHVlKHRyaW1tZWQpOworICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVk
LCBtX2NsaWVudC0+Ym91bmRzKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPmlzRmluaXNoZWRBdChub3cpKQogICAgICAgICAgICAgICAgICAgICBtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwg
bm93KTsKIAotICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRlIG9yIHJl
bGF0aXZlLiBBYnNvbHV0ZSBmb3Igbm93LgotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRvQXBwbHk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShGbG9hdFNp
emUoKSwgdG9BcHBseSk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybSh0
b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKaW5kZXggMWFkMjIzZGJh
ODIzYTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NC4uYmZkZWExZjk2MTFlNTNhYTFlZmM1OTll
MGQzNzlmODIwODNmYWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTI3LDggKzI3LDEwIEBACiAKICNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNp
bmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00NCwxOCArNDYsMjIgQEAgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQoKSB7IH0KIAorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3Bh
Y2l0eShmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bCopID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0ID0gMDsK
IH07CiAKIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKTsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNy
ZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQg
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICB2aXJ0dWFsIH5DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwoKTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJh
bWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYpOwogCiAgICAgdm9pZCBh
ZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4pOwogCkBAIC02NywxMiArNzMsMTQgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworCiAgICAgLy8g
VGhlIGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KICAgICBleHBsaWNpdCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3Vi
bGUgbm93KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91
YmxlIG5vdyk7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxh
YmlsaXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5l
eHRUaWNrKGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CisgICAgdm9pZCBz
dGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3csIENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yJik7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CiAgICAg
dm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOwogICAgIHZvaWQgcHVyZ2VGaW5pc2hl
ZEFuaW1hdGlvbnMoKTsKIApAQCAtODAsNiArODgsNyBAQCBwcml2YXRlOgogCiAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBWZWN0b3I8T3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKKyAgICBWZWN0b3I8
Q0NBY3RpdmVBbmltYXRpb246OkFuaW1hdGlvblNpZ25hdHVyZT4gbV9maW5pc2hlZEFuaW1hdGlv
bnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
aW5kZXggYTEzNjE2N2Q3YWZlYzRhNjcxZTdhNjk4MDg1ZDRkZDY2MGVkYTMxMS4uM2EwMzc0N2Uy
MjM0MGU1NTM2MjUzZjhlNTY5MmY3MmYwMzI4OTI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJh
d1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9y
RHJhd1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYxLDYgKzYy
LDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZHJhd09wYWNp
dHkoMCkKICAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9kZWJ1
Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDhmYmFiYWU4NmE2
YmQ2YWM4ZDY1Y2I3ZTdlMDZjYTZjOWJlNjkxODAuLmY1ZDRmMTMyYWU0NTFiNDg3NjBkMzkxYWYx
N2QwZmI4YTBmMmRmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKICNpbmNsdWRlICJj
Yy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00MSwxNiAr
NDIsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1
bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotY2xhc3MgQ0NMYXllckltcGwgOiBw
dWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4geworY2xhc3MgQ0NMYXllckltcGwgOiBwdWJs
aWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4sIHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q0xheWVySW1wbChpZCkpOwogICAgIH0KKworICAgIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0
KTsKKyAgICB2aXJ0dWFsIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNp
emUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKICAgICB2aXJ0dWFsIH5D
Q0xheWVySW1wbCgpOwogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCkBAIC02Niw4ICs3Nyw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
Pik7CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYUxheWVyLmdldCgpOyB9CiAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
SWQ7IH0KLQogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdJRDsgfQogI2VuZGlmCkBAIC0xMTEsOSArMTIwLDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIGJvb2wgb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGFxdWU7IH0KIAotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgZmxvYXQgb3BhY2l0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQotCiAgICAgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50Jik7CiAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKQEAgLTEyOSw5ICsxMzUsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KICAg
ICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KICAg
ICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApAQCAtMTU0
LDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1
cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lk
IHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKSB7IG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAotICAgIGNvbnN0IEludFNpemUmIGJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3Qg
SW50U2l6ZSYpOwogCiAgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudEJvdW5kczsgfQpAQCAtMjAzLDYgKzIwNSw4IEBAIHB1YmxpYzoKICAg
ICBib29sIGxheWVyUHJvcGVydHlDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclByb3Bl
cnR5Q2hhbmdlZDsgfQogICAgIHZvaWQgcmVzZXRBbGxDaGFuZ2VUcmFja2luZ0ZvclN1YnRyZWUo
KTsKIAorICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogYW5pbWF0aW9uQ29udHJv
bGxlcigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzEyLDYgKzMxNiw5IEBA
IHByaXZhdGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRh
dGVkIGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNz
IHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisK
KyAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gbV9hbmltYXRpb25Db250cm9sbGVyOwogfTsK
IAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9y
IGZpcnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5
ZXJTb3J0ZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGU0NjJlNTMx
OGJmYzdmMzc5NGRhODY1Y2VmZjMzYmFlYzVkMmU1MDEuLmVhMTdlOGM5YTk2MTI5ZjZlNTA5YTE5
N2JmNjgyMzU5ZjAzMzFkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAt
MTcxLDkgKzE3MSwxMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBs
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4
aXN0cyBhdCBhbGwuLi4KLSAgICBpZiAocm9vdExheWVyKCkpCisgICAgaWYgKHJvb3RMYXllcigp
KSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAg
ZWxzZQorICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmltYXRpb24gZHVyaW5nIHRo
ZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBob3N0SW1wbCB0byB2aXNpdCBpdHMgY29udHJv
bGxlcnMuCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICB9
IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKIAogICAgIGhvc3RJbXBs
LT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKQEAgLTI1OSw2ICsyNjEsMTIg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKICAgICAgICAgbV9jbGll
bnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRB
bmltYXRpb25FdmVudHMoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRz
KQoreworICAgIEFTU0VSVChDQ1RocmVhZFByb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgLy8g
RklYTUU6IG5lZWQgdG8gd2FsayB0aGUgdHJlZS4KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHJvb3RMYXllcikKIHsKICAg
ICBpZiAobV9yb290TGF5ZXIgPT0gcm9vdExheWVyKQpAQCAtMzM0LDkgKzM0MiwxMiBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGhvc3RJbQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChyb290TGF5ZXIoKSkKKworICAgIGlmIChy
b290TGF5ZXIoKSkgewogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIo
KSkpOwotICAgIGVsc2UKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgYWRkZWQgYW4gYW5pbWF0aW9u
IGR1cmluZyB0aGUgdHJlZSBzeW5jLiBUaGlzIHdpbGwgY2F1c2UgaG9zdEltcGwgdG8gdmlzaXQg
aXRzIGNvbnRyb2xsZXJzLgorICAgICAgICBob3N0SW1wbC0+c2V0TmVlZHNBbmltYXRlTGF5ZXJz
KCk7CisgICAgfSBlbHNlCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZjVlMTEzNGM4MWI0M2UyMTg4NmE1ZDkz
NTMwZWU4OGYxOWE0MDMyNS4uOTQ4YWQyMDM4N2JiOWMyNTliNTE0YTMwZDI1MmQ4MzU3MDhmNmMz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmF0ZUxpbWl0ZXIuaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRz
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgogCkBAIC0xNjMsNiArMTY0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0NvbW1pdCgpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAorICAgIHZv
aWQgc2V0QW5pbWF0aW9uRXZlbnRzKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
KTsKKwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVy
LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVm
UHRyPExheWVyQ2hyb21pdW0+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKaW5kZXggZTQ2YWUzMjQ5ZjM4MTVjZDliMDE5MWE5Mjg3MWZhMTdmMmE5ZGI4Ni4uZTIyNjE2
YjI5MDM2YzdmYzk4OTViYTgzYzJiMzAwMmI5ZTFkNzM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTU3LDYgKzU3LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1w
bDo6Q0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXll
clRyZWUKICAgICAsIG1fc2VudFBhZ2VTY2FsZURlbHRhKDEpCiAgICAgLCBtX21pblBhZ2VTY2Fs
ZSgwKQogICAgICwgbV9tYXhQYWdlU2NhbGUoMCkKKyAgICAsIG1fbmVlZHNBbmltYXRlTGF5ZXJz
KHRydWUpCiAgICAgLCBtX3BpbmNoR2VzdHVyZUFjdGl2ZShmYWxzZSkKIHsKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwpAQCAtOTcsMjEgKzk4LDggQEAgR3JhcGhpY3NDb250
ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQoKQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpCiB7Ci0gICAgaWYgKCFt
X3BhZ2VTY2FsZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBzY3Jv
bGxUb3RhbCA9IHRvU2l6ZShtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xsUG9zaXRpb24oKSArIG1f
c2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxEZWx0YSgpKTsKLQotICAgIHNldFBhZ2VTY2FsZURlbHRh
KG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5wYWdlU2NhbGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykg
LyBtX3BhZ2VTY2FsZSk7Ci0gICAgSW50U2l6ZSBuZXh0U2Nyb2xsID0gbV9wYWdlU2NhbGVBbmlt
YXRpb24tPnNjcm9sbE9mZnNldEF0VGltZShmcmFtZUJlZ2luVGltZU1zKTsKLSAgICBuZXh0U2Ny
b2xsLnNjYWxlKDEgLyBtX3BhZ2VTY2FsZURlbHRhKTsKLSAgICBtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsQnkobmV4dFNjcm9sbCAtIHNjcm9sbFRvdGFsKTsKLSAgICBtX2NsaWVudC0+c2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKLQotICAgIGlmIChtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+
aXNBbmltYXRpb25Db21wbGV0ZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSkgewotICAgICAgICBt
X3BhZ2VTY2FsZUFuaW1hdGlvbi5jbGVhcigpOwotICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHND
b21taXRPbkltcGxUaHJlYWQoKTsKLSAgICB9CisgICAgYW5pbWF0ZVBhZ2VTY2FsZShmcmFtZUJl
Z2luVGltZU1zKTsKKyAgICBhbmltYXRlTGF5ZXJzKGZyYW1lQmVnaW5UaW1lTXMpOwogfQogCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IElu
dFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUs
IGRvdWJsZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpCkBAIC0yNDUsNiArMjMzLDI1
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5k
ZXJQYXNzTGlzdCYgcGFzc2VzKQogICAgICAgICBwYXNzZXNbaV0tPm9wdGltaXplUXVhZHMoKTsK
IH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzUmVjdXJzaXZlKEND
TGF5ZXJJbXBsKiBjdXJyZW50LCBkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvciYgZXZlbnRzLCBib29sJiBuZWVkc0FuaW1hdGVMYXllcnMpCit7CisgICAg
Ym9vbCBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7CisKKyAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwqIGN1cnJlbnRDb250cm9sbGVyID0gY3VycmVudC0+YW5pbWF0
aW9uQ29udHJvbGxlcigpOworICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVn
aW5UaW1lU2VjcywgZXZlbnRzKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKQorICAgICAgICBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7
ICsraSkgeworICAgICAgICBib29sIGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7Cisg
ICAgICAgIGFuaW1hdGVMYXllcnNSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQo
KSwgZnJhbWVCZWdpblRpbWVTZWNzLCBldmVudHMsIGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKTsK
KyAgICAgICAgaWYgKGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAgICAgICAgc3VidHJl
ZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisgICAgfQorCisgICAgbmVlZHNBbmltYXRlTGF5
ZXJzID0gc3VidHJlZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogSW50U2l6ZSBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBI
YXJkY29kaW5nIHRoZSBmaXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJkLiBUaGluayBvZgpAQCAtNTUx
LDQgKzU1OCw0NSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEZ1bGxSb290TGF5ZXJE
YW1hZ2UoKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFn
ZVNjYWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQoreworICAgIGlmICghbV9wYWdlU2NhbGVB
bmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0
b1NpemUobV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVy
SW1wbC0+c2Nyb2xsRGVsdGEoKSk7CisKKyAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2Fs
ZUFuaW1hdGlvbi0+cGFnZVNjYWxlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2Nh
bGUpOworICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3Jv
bGxPZmZzZXRBdFRpbWUoZnJhbWVCZWdpblRpbWVNcyk7CisgICAgbmV4dFNjcm9sbC5zY2FsZSgx
IC8gbV9wYWdlU2NhbGVEZWx0YSk7CisgICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5l
eHRTY3JvbGwgLSBzY3JvbGxUb3RhbCk7CisKKyAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24t
PmlzQW5pbWF0aW9uQ29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykpIHsKKyAgICAgICAg
bV9wYWdlU2NhbGVBbmltYXRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorCisgICAgbV9jbGllbnQtPnNldE5lZWRzUmVk
cmF3T25JbXBsVGhyZWFkKCk7CiB9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0
ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICBpZiAoIW1fbmVlZHNBbmlt
YXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllckltcGwuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworCisgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQobV9uZWVkc0FuaW1hdGVMYXllcnMpOworCisgICAgT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
KSk7CisKKyAgICBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVySW1wbC5nZXQoKSwg
ZnJhbWVCZWdpblRpbWVNcyAvIDEwMDAsICpldmVudHMsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsK
KworICAgIGlmICghZXZlbnRzLT5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50LT5wb3N0QW5p
bWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKGV2ZW50cy5yZWxlYXNlKCkpOwor
CisgICAgaWYgKG1fbmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAgICBtX2NsaWVudC0+c2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDVlZTAzOTlmNWI0NTcyMjVhOTFk
ZmY2Yjc3N2NkNWQ4YTc2ZDZhOWYuLjA4Yzk3OTMzYWEyZjk4NDQzMWQyZTVjZmY1N2E5NDgzMDFj
YzA4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1LDExICsy
NSwxMyBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NMYXllclRy
ZWVIb3N0SW1wbF9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1
ZGUgImNjL0NDSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00OCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2Fw
QnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHND
b21taXRPbkltcGxUaHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25F
dmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3Rvcj4pID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NM
YXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC02
OCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlRW5kKCk7
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUm
IHRhcmdldFBvc2l0aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJs
ZSBzdGFydFRpbWVNcywgZG91YmxlIGR1cmF0aW9uTXMpOwogCi0gICAgLy8gVmlydHVhbCBmb3Ig
dGVzdGluZworICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lRGlzcGxheVRpbWVNcyk7CkBAIC0xMTksOCAr
MTIyLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29u
c3QgSW50U2l6ZSYgdHJhZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwg
ZG91YmxlIGR1cmF0aW9uU2VjKTsKIAorICAgIGJvb2wgbmVlZHNBbmltYXRlTGF5ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KKyAgICB2b2lkIHNldE5lZWRzQW5p
bWF0ZUxheWVycygpIHsgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOyB9CisKIHByb3RlY3Rl
ZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUoZG91YmxlIGZy
YW1lQmVnaW5UaW1lTXMpOworCisgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisKICAgICBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9zb3VyY2VGcmFt
ZU51bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKQEAgLTEzNSw2ICsxNDcsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9v
dERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
ICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICB2
b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKKyAgICB2b2lkIGFu
aW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqLCBkb3VibGUgZnJhbWVCZWdpblRpbWVT
ZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYsIGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycyk7
CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCiAgICAgT3duUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwpAQCAtMTUwLDYgKzE2Myw4IEBAIHByaXZh
dGU6CiAgICAgZmxvYXQgbV9zZW50UGFnZVNjYWxlRGVsdGE7CiAgICAgZmxvYXQgbV9taW5QYWdl
U2NhbGUsIG1fbWF4UGFnZVNjYWxlOwogCisgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBu
ZWNlc3NhcnkgdG8gdHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3Jz
LgorICAgIGJvb2wgbV9uZWVkc0FuaW1hdGVMYXllcnM7CiAgICAgYm9vbCBtX3BpbmNoR2VzdHVy
ZUFjdGl2ZTsKIAogICAgIE93blB0cjxDQ1BhZ2VTY2FsZUFuaW1hdGlvbj4gbV9wYWdlU2NhbGVB
bmltYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDE3
YTY5NTkzYTY0M2NmZmU4MzcxNzYxNDk3ZTRiZWMwYTFjNzFkOTAuLmVhOGM0MGYxMjU2NWVjNDEz
YmFiNTg2YmEyMGU0OWNlZjlmOWRhOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwCkBAIC0yMzMsNiArMjMzLDEzIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
c3RvcCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cykKK3sKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWlu
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cyk7Cit9CisK
IC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5k
ZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaAppbmRleCBhZGRhOWYxNGU5ZTU0ZGJhMDVhZjMwZDU3ODY4MzhjNDYzZDM0NDQxLi43MWI1
ZTk5YjJlZDJhZmY3ODI1MDNiZjM5MzM2Njk4M2ZjNTk0NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIENDU2luZ2xlVGhy
ZWFkUHJveHlfaAogI2RlZmluZSBDQ1NpbmdsZVRocmVhZFByb3h5X2gKIAorI2luY2x1ZGUgImNj
L0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94
eS5oIgpAQCAtNjMsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1
ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TmVlZHNDb21taXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1p
dE9uSW1wbFRocmVhZCgpIHsgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJl
YWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pOwogCiAgICAgLy8gQ2FsbGVk
IGJ5IHRoZSBsZWdhY3kgcGF0aCB3aGVyZSBSZW5kZXJXaWRnZXQgZG9lcyB0aGUgc2NoZWR1bGlu
Zy4KICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CkBAIC0xMTEsNiArMTEzLDI0IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCisvLyBGb3IgdXNlIGluIHRoZSBzaW5nbGUtdGhyZWFkZWQg
Y2FzZS4gSW4gZGVidWcgYnVpbGRzLCBpdCBwcmV0ZW5kcyB0aGF0IHRoZQorLy8gY29kZSBpcyBy
dW5uaW5nIG9uIHRoZSBtYWluIHRocmVhZCB0byBzYXRpc2Z5IGFzc2VydGlvbiBjaGVja3MuCitj
bGFzcyBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgeworcHVibGljOgorICAgIERlYnVnU2NvcGVk
U2V0TWFpblRocmVhZCgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQ0NQ
cm94eTo6c2V0Q3VycmVudFRocmVhZElzSW1wbFRocmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9
CisgICAgfkRlYnVnU2NvcGVkU2V0TWFpblRocmVhZCgpCisgICAgeworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICAgICAgQ0NQcm94eTo6c2V0Q3VycmVudFRocmVhZElzSW1wbFRocmVhZCh0cnVl
KTsKKyNlbmRpZgorICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDNlYTcyZTJhMWM3MmZiMzU2OTE0ODky
N2VjYjE1MTA0NzI5ODk0MjYuLjc1ZWYxMzYyM2RlODc2ZjQ0YTJjYTQ3ZWFkZDgxMjBiMTEwYjIz
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yNTksNiArMjU5LDEzIEBAIHZv
aWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKQogICAgIG1fc2No
ZWR1bGVyT25JbXBsVGhyZWFkLT5zZXROZWVkc0NvbW1pdCgpOwogfQogCit2b2lkIENDVGhyZWFk
UHJveHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093
blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKQoreworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnBvc3RBbmltYXRp
b25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX21haW5U
aHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFBy
b3h5OjpzZXRBbmltYXRpb25FdmVudHMsIGV2ZW50cykpOworfQorCiB2b2lkIENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzUmVkcmF3KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAt
NTYyLDYgKzU2OSwxNCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmRpZENvbXBsZXRlU3dhcEJ1ZmZl
cnMoKQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogfQog
Cit2b2lkIENDVGhyZWFkUHJveHk6OnNldEFuaW1hdGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cyk7Cit9CisKIHZvaWQgQ0NUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNv
bXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJ
bXBsT25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXgg
MjNjMjlmNDhmYTMyYjdhYzQ4ODE1ODAyY2EwMzU4ZWVhMWQ4ODAxYS4uMzMwZWY1MWNhOThhMTZk
MjIzMWUzMzY1NTQwYWMwM2MxNzMzMmEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAt
MjUsNiArMjUsNyBAQAogI2lmbmRlZiBDQ1RocmVhZFByb3h5X2gKICNkZWZpbmUgQ0NUaHJlYWRQ
cm94eV9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgImNj
L0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFu
aW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPik7CiAKICAgICAvLyBDQ1NjaGVkdWxlckNsaWVudCBpbXBsZW1lbnRh
dGlvbgogICAgIHZpcnR1YWwgYm9vbCBjYW5EcmF3KCk7CkBAIC04Niw2ICs4OCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91
YmxlIGZyYW1lQmVnaW5UaW1lLCBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+KTsKICAg
ICB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZvaWQgZGlkQ29tcGxldGVTd2Fw
QnVmZmVycygpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uRXZlbnRzKFBhc3NPd25QdHI8Q0NBbmlt
YXRpb25FdmVudHNWZWN0b3I+KTsKIAogICAgIC8vIENhbGxlZCBvbiBpbXBsIHRocmVhZAogICAg
IHN0cnVjdCBSZWFkYmFja1JlcXVlc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5k
ZXggMzVmMmIxOTkwNzc5ZDY2OWVmODA0MDJmYjAwZjJhNTU2MTQ3YzMyNi4uYjgzZDI4NTBlZGYz
ZTA5ZDM2NWIxNzUyNGVhYzIyODVjN2FhNjU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCkBAIC02MSw2ICs2MSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExv
YWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1U
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcs
CisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJh
bWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1ZGU4Njhh
MmYzYTI1YWIwMzAyMGVkMjVjMWQwZWM0OTBhLi4yNjFlZGZmZjg1MmYzM2MxM2I0OTIxYmU3MGU2
MDllNDJmNWUyYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
QWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0KLSNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xh
c3MgRmFrZUZsb2F0QW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9
Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAw
OyB9Ci19OworbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVy
YXRpb25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAtMTY0LDQgKzE2
MCw0IEBAIFRFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQogICAgIEVYUEVD
VF9UUlVFKGFuaW0tPmlzRmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
K30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FuaW1hdGlvblRlc3RDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmQ4YTJmZTIxNTFlNjhmMmQ1NmM2
YzlhMDQ3YjZjZDk4M2VmOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaApAQCAtMCwwICsxLDk5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uVGVzdENvbW1vbl9oCisjZGVmaW5lIENDQW5p
bWF0aW9uVGVzdENvbW1vbl9oCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK2Ns
YXNzIEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYkNvcmU6OkNDRmxvYXRBbmlt
YXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmUoKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
MTsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZl
PiBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VG
bG9hdEFuaW1hdGlvbkN1cnZlKTsKKyAgICB9Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1
YmxpYzoKKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9k
dXJhdGlvbihkdXJhdGlvbikgeyB9CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgg
Z2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgoKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2
ZT4gY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbigqdGhpcykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3Vi
bGUgbV9kdXJhdGlvbjsKK307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMg
V2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRU
cmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgICAg
IDogbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAgICAg
LCBtX3RvKHRvKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GYWtlRmxvYXRUcmFuc2l0
aW9uKCkgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBj
b25zdAorICAgIHsKKyAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOworICAgICAgICBpZiAodGlt
ZSA+PSAxKQorICAgICAgICAgICAgdGltZSA9IDE7CisgICAgICAgIHJldHVybiAoMSAtIHRpbWUp
ICogbV9mcm9tICsgdGltZSAqIG1fdG87CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigqdGhpcykpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207Cisg
ICAgZmxvYXQgbV90bzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNlbmRp
ZiAvLyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QuY3BwCmluZGV4IDNkNTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTViMGY1M2Iu
LjJkYzk2ZDJhZWU3NmMyZWQxMmIwYmEyMGVmMzAxNGI5Njc0ODA5NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApAQCAtMjQsMTYgKzI0LDE2IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLQor
I2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAK
IG5hbWVzcGFjZSB7CiAKQEAgLTQyLDc0ICs0MiwzOSBAQCBwdWJsaWM6CiAgICAgRmFrZUNvbnRy
b2xsZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwKSB7IH0KICAgICB2aXJ0dWFsIH5GYWtlQ29udHJv
bGxlckNsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNp
dHkgPSBvcGFjaXR5OyB9CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsg
bV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29u
dHJvbGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNv
bnRyb2xsZXIpCi0gICAgewotICAgICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250
cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsg
fQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Ci19OwotCi1jbGFzcyBGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKLXB1Ymxp
YzoKLSAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJh
dGlvbihkdXJhdGlvbikgeyB9Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdl
dFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bU9wZXJhdGlvbnMoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZHVyYXRpb247
CisgICAgSW50U2l6ZSBtX2JvdW5kczsKIH07CiAKLWNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24g
OiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlRmxvYXRU
cmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAgICAg
IDogbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAgICAg
LCBtX3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVl
KGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwot
ICAgICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJl
dHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBmbG9hdCBt
X3RvOwotfTsKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgaWQsIHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMg
dGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQu
CiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0
aW9uKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2
ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CiAKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogfQpAQCAtMTE3LDIwICs4MiwyMSBAQCBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogLy8gVGVzdHMgdGhhdCB0
d28gcXVldWVkIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBz
ZXF1ZW5jZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlh
bFF1ZXVpbmcpCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMo
YWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAgRmFrZUNvbnRyb2xs
ZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwg
MC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogfQpAQCAtMTM4LDIyICsxMDQsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsUXVldWluZykKIC8vIFRlc3RzIGludGVycnVw
dGluZyBhIHRyYW5zaXRpb24gd2l0aCBhbm90aGVyIHRyYW5zaXRpb24uCiBURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEludGVycnVwdCkKIHsKKyAgICBPd25QdHI8Q0NB
bmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVu
dHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKLSAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKICAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMC41KTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDAuNSwgKmV2ZW50cyk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAuNWYs
IGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE2MSwyMyArMTI4LDI0IEBAIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogLy8gVGVzdHMgc2NoZWR1bGluZyB0
d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBm
cmVlLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRv
Z2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25F
dmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3Ip
KTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJh
bnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250
cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRv
cHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQg
dGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
ICAgICAvLyBUaGUgdGhlIGZsb2F0IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBzdGFydGVkIGF0IHRp
bWUgMSBhbmQgc2hvdWxkIGJlIGRvbmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1t
eS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiB9CkBAIC0xODcsMjkgKzE1NSwzMCBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2Vk
KQogLy8gZm9yIGJvdGggdG8gZmluaXNoKS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQogeworICAgIE93
blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0g
ICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAg
ICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9u
IHNob3VsZCBoYXZlIGZpbmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAogICAgIC8vIG9m
IGFuaW1hdGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBv
ZiB0aGUgbGVuZ3RoCiAgICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCi0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMp
OwogICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHll
dC4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBUaGUgdGhlIHNlY29u
ZCBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgc3RhcnQgYXQgdGltZSAyIGFuZCBzaG91bGQgYmUK
ICAgICAvLyBkb25lIGJ5IHRpbWUgMwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgzLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVt
bXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogfQpAQCAtMjE3LDIyICsxODYsMjMgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiAv
LyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlLgog
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlv
bikKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0
cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJvbGxlckNsaWVu
dCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAx
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0
YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVy
LT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50
cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI0MCwyOCArMjEwLDI5
IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVBbmlt
YXRpb24pCiAvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUg
ZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5nIGFuaW1hdGlvbi4KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJy
dXB0c1J1bm5pbmdBbmltYXRpb24pCiB7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CiAgICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwog
ICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRpb24gc2hvdWxkIHN0
YXJ0IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC41LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVYUEVD
VF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0yNzAsMzQgKzI0MSwzNSBAQCBURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVw
dHNSdW5uaW5nQW5pbQogLy8gYW5kIHRoZXJlIGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1
ZWQgdG8gc3RhcnQgbGF0ZXIuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1J
blF1ZXVlKQogeworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFk
b3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVy
Q2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3Rp
dmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0
U3RhcnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0g
ICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5zaXRp
b24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMC41LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5
KCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwg
KmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzLCAqZXZlbnRzKTsKICAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgwLjc1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMzA1LDY0ICsyNzcsNjYgQEAgVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVu
bmluZ0FuaW0KIC8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBmb3Ig
dGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCiBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQogeworICAgIE93blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFj
dGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlv
bnMoMyk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MS4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1LCAqZXZlbnRzKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjI1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgyLjc1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFj
aXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgzLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAg
Ly8gSnVzdCBiZSBleHRyYSBzdXJlLgotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSg0LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
b3BhY2l0eSgpKTsKIH0KIAogLy8gVGVzdCB0aGF0IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmlt
YXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4KIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5nKQogeworICAgIE93blB0cjxDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3RvcikpOwogICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3Qg
aW50IGlkID0gMTsKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOwogICAgIHRvQWRkLT5zZXRJdGVyYXRpb25zKC0xKTsKICAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuMjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEu
NzUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTA3Mzc0MTgyNC4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKIApAQCAtMzc1LDgwICszNDksNjYgQEAgVEVTVChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiAvLyBUZXN0IHRoYXQg
cGF1c2luZyBhbmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4KIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCiB7CisgICAgT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yKSk7CiAgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBp
bnQgaWQgPSAxOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0
eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5nZXRBY3Rp
dmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CiAKLSAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEwMjQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCwgKmV2ZW50cyk7CiAgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVD
VF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwog
ICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgMTAyNCk7
CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMTAyNC4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxMDI0LjUsICpldmVudHMpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiB9
CiAKIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgQWJvcnRBR3JvdXBl
ZEFuaW1hdGlvbikKIHsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50
cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKICAgICBGYWtlQ29udHJv
bGxlckNsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxl
ci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAg
ICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NB
Y3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkp
LCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDEsIDAuNzVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYs
IGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3Rp
dmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJv
bGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkt
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRSgh
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKIH0KIAotLy8gVGVzdHMgdGhhdCBhZGRpbmcgYW4gYW5pbWF0aW9u
IHRvIHRoZSBjb250cm9sbGVyIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBvbiB0aGUg
Y29udHJvbGxlciBjbGllbnQKLS8vIChpbiB0aGlzIGNhc2UsIGFkZGluZyB0aGUgY29udHJvbGxl
ciB0byB0aGUgbGlzdCBvZiBhY3RpdmUgY29udHJvbGxlcikuCi1URVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QsIERpZEFjdGl2YXRlKQotewotICAgIEZha2VDb250cm9sbGVy
Q2xpZW50IGR1bW15OwotICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCi0gICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgZHVtbXkuYWN0aXZlQ29u
dHJvbGxlcnMoKS5zaXplKCkpOwotCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotCi0gICAgRVhQRUNUX0VRKHNpemVfdCgx
KSwgZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjb250
cm9sbGVyLmdldCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZjU5ODkzZGU5MDY0MThmOGNiZDc1NzQwYWUy
OTM5ZTIzY2MyMzUwYS4uYWZkNDA3MTkzYjkxYzcyMDZiOTJlMmE4Zjc5M2Q1YjNhNzRmNGVjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9
IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7
IG1fZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1h
dGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPikgeyB9CiAKICAgICBzdGF0aWMgdm9pZCBleHBlY3RDbGVhcmVkU2Nyb2xs
RGVsdGFzUmVjdXJzaXZlKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAx
NjM3MWExYWVhZWUwZWU3Y2I1YTI5NTYxYWQ4Y2VmZjEyMDMyMDQ5Li5hZGFlZTcxYjI1MTc2OTE5
YTc1MDA5YzllMWNiYWNhNGRiODZjZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmlsdGVy
T3BlcmF0aW9ucy5oIgpAQCAtMzUsNiArMzYsOCBAQAogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgorI2lu
Y2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFBy
b3h5LmgiCkBAIC00OCwxMSArNTEsMTEgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAotbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8g
VXNlZCBieSB0ZXN0IHN0dWJzIHRvIG5vdGlmeSB0aGUgdGVzdCB3aGVuIHNvbWV0aGluZyBpbnRl
cmVzdGluZyBoYXBwZW5zLgogY2xhc3MgVGVzdEhvb2tzIHsKQEAgLTYwLDYgKzYzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCkgeyB9CkBAIC05MSw2ICs5NSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fdGVzdEhvb2tzLT5kcmF3TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsKICAgICB9CiAKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRp
bWVNcykKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMo
ZnJhbWVCZWdpblRpbWVNcyk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hbmltYXRlTGF5ZXJzKHRo
aXMpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhv
b2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBjbGllbnQpCiAgICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbChzZXR0
aW5ncywgY2xpZW50KQpAQCAtMTMyLDYgKzE0MywyNSBAQCBwcml2YXRlOgogICAgIFRlc3RIb29r
cyogbV90ZXN0SG9va3M7CiB9OwogCisvLyBBZGFwdHMgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIgZm9yIHRlc3QuIEFkZHMgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBhZGRBbmltYXRpb24g
dGhhdCBpbnNlcnRzIGEgZmxvYXQgYW5pbWF0aW9uLgorLy8gRklYTUU6IG9uY2UgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbiBpcyBpbXBsZW1lbnRlZCwgdGhhdCBmdW5j
dGlvbiBzaG91bGQgYmUgY2FsbGVkIGRpcmVjdGx5IGFuZCB0aGlzCisvLyBjbGFzcyBjYW4gYmUg
cmVtb3ZlZC4KK2NsYXNzIE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKKyAgICB7CisgICAg
ICAgIGRvdWJsZSBkdXJhdGlvbiA9IDA7CisgICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBl
bmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbihkdXJhdGlvbiwgMSwgMCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiBjbGFzcyBDb21wb3NpdG9yRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6IHB1YmxpYyBDb21wb3NpdG9y
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZz4g
Y3JlYXRlKEF0dHJpYnV0ZXMgYXR0cnMpCkBAIC0yMjYsNyArMjU2LDkgQEAgcHVibGljOgogICAg
IHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKQorICAgIHsKKyAgICB9CiAKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0ZXN0
SG9va3MpIDogbV90ZXN0SG9va3ModGVzdEhvb2tzKSB7IH0KQEAgLTI1Niw2ICsyODgsMTEgQEAg
cHVibGljOgogICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRp
c3BhdGNoU2V0TmVlZHNBbmltYXRlLCB0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHBvc3RBZGRB
bmltYXRpb25Ub01haW5UaHJlYWQoKQorICAgIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChD
Q0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFkZEFuaW1hdGlvbiwgdGhpcyk7CisgICAgfQor
CiAgICAgdm9pZCBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKQogICAgIHsKICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRz
Q29tbWl0LCB0aGlzKTsKQEAgLTI3MSw3ICszMDgsNiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVB
bmRDb21taXQsIHRoaXMpOwogICAgIH0KIAotCiAgICAgdm9pZCBwb3N0U2V0VmlzaWJsZVRvTWFp
blRocmVhZChib29sIHZpc2libGUpCiAgICAgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKHZp
c2libGUgPyBDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldFZpc2libGUgOiBDQ0xheWVy
VHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSwgdGhpcyk7CkBAIC0zMTQsNiArMzUw
LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5l
ZWRzQW5pbWF0ZSgpOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWRkQW5pbWF0
aW9uKHZvaWQqIHNlbGYpCisgICAgeworICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhv
c3RUZXN0Kj4oc2VsZik7CisgICAgICBBU1NFUlQodGVzdCk7CisgICAgICBpZiAodGVzdC0+bV9s
YXllclRyZWVIb3N0ICYmIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisgICAg
ICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtl
eWZyYW1lVmFsdWVMaXN0KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAi
IiwgMC4wKTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5lZWRzQW5pbWF0
ZUFuZENvbW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CkBAIC00NjQsNiArNTA5LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2lu
VGVzdCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0
aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBBU1NFUlRf
VFJVRShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCht
X2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIHJvb3RMYXllci0+c2V0QW5pbWF0aW9uQ29udHJv
bGxlcihNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CiAKICAgICBtX2Jl
Z2lubmluZyA9IHRydWU7CiAgICAgYmVnaW5UZXN0KCk7CkBAIC03OTAsNiArODM2LDQ3IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2V0TmVlZHNBbmltYXRlSW5zaWRlQW5pbWF0aW9uQ2Fs
bGJhY2ssIHJ1bk11bHRpVGhyZWFkCiAgICAgcnVuVGVzdFRocmVhZGVkKCk7CiB9CiAKKy8vIEFk
ZCBhIGxheWVyIGFuaW1hdGlvbiBhbmQgY29uZmlybSB0aGF0IENDTGF5ZXJUcmVlSG9zdEltcGw6
OmFuaW1hdGVMYXllcnMgZG9lcyBnZXQKKy8vIGNhbGxlZCBhbmQgY29udGludWVzIHRvIGdldCBj
YWxsZWQuCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uIDogcHVibGljIEND
TGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0QWRkQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX251bUFuaW1hdGVzKDApCisgICAgICAg
ICwgbV9sYXllclRyZWVIb3N0SW1wbCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJl
YWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCkKKyAgICB7CisgICAgICAgIGlmICghbV9udW1B
bmltYXRlcykgeworICAgICAgICAgICAgLy8gVGhlIGFuaW1hdGlvbiBoYWQgemVybyBkdXJhdGlv
biBzbyBsYXllclRyZWVIb3N0SW1wbCBzaG91bGQgbm8KKyAgICAgICAgICAgIC8vIGxvbmdlciBu
ZWVkIHRvIGFuaW1hdGUgaXRzIGxheWVycy4KKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShsYXll
clRyZWVIb3N0SW1wbC0+bmVlZHNBbmltYXRlTGF5ZXJzKCkpOworICAgICAgICAgICAgbV9udW1B
bmltYXRlcysrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIGludCBtX251bUFuaW1hdGVzOworICAgIENDTGF5ZXJUcmVlSG9z
dEltcGwqIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0
VGVzdEFkZEFuaW1hdGlvbiwgcnVuTXVsdGlUaHJlYWQpCit7CisgICAgcnVuVGVzdFRocmVhZGVk
KCk7Cit9CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGUgOiBwdWJsaWMg
Q0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgogICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxTaW1wbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAppbmRleCAxNTU3YTdkOTMyMmNjNmJlMjA2
YmY1MGIwMGMwZjQ3MDYzYzU0NzhiLi45N2IyMTVhNTNlZjcwZWU5MGRjNzMwNWE3MmM1ZTJiZGM1
ZGE4ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5j
aHJvbml6ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVT
eW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMjYsMTMgKzI2LDMxIEBACiAKICNpbmNsdWRlICJUcmVl
U3luY2hyb25pemVyLmgiCiAKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwordXNpbmcgdGVzdGluZzo6VGVzdDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUcmVlU3luY2hyb25pemVyQW5pbWF0aW9uVGVzdCA6
IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIqIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbGF5ZXItPmFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSB7CiAKQEAgLTMwNyw1ICsz
MjUsODUgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVw
bGljYU1hc2tMYXllcnMpCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIH0KIAorVEVTVF9GKFRyZWVTeW5jaHJv
bml6ZXJBbmltYXRpb25UZXN0LCBzeW5jTmV3QW5pbWF0aW9uKQoreworICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVS
b290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdpdGggbm8gYW5p
bWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisK
KyAgICAvLyBBZGQgYW5pbWF0aW9uIHRvIG1haW4gdGhyZWFkIGNvbnRyb2xsZXIuCisgICAgZ2V0
QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9u
cygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxh
eWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1Rf
VFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5p
bWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJl
ZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1RfRihUcmVlU3lu
Y2hyb25pemVyQW5pbWF0aW9uVGVzdCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMpCit7CisgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKworICAgIFJlZlB0cjxD
Q0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBnZXRBbmltYXRpb25Db250cm9s
bGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZl
KCkpLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNjTGF5ZXJUcmVlUm9v
dCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVl
Um9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246
OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFB1c2ggYW4gYW5pbWF0aW9uIHByb3BlcnR5
IGNoYW5nZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBub3QgY2F1c2UgYW4gYW5pbWF0aW9u
IHRvIGJlIGFkZGVkKS4KKyAgICBnZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3Qu
Z2V0KCkpLT5hY3RpdmVBbmltYXRpb25zKClbMF0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpQYXVzZWQsIDApOworICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290Lmdl
dCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgY2NMYXllclRyZWVS
b290LT5hbmltYXRpb25Db250cm9sbGVyKCktPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQorCitURVNUX0YoVHJlZVN5bmNo
cm9uaXplckFuaW1hdGlvblRlc3QsIHN5bmNBYm9ydGVkQW5pbWF0aW9uKQoreworICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXll
clRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdpdGgg
bm8gYW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
MCk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0
aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisK
KyAgICBFWFBFQ1RfVFJVRShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+
Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAg
ICAvLyBBYm9ydCBhbiBhbmltYXRpb24gZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgZ2V0QW5p
bWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+YWN0aXZlQW5pbWF0aW9ucygp
LmNsZWFyKCk7CisgICAgVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRy
ZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX0ZBTFNF
KGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRp
b24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKK30KKworVEVTVF9GKFRyZWVTeW5j
aHJvbml6ZXJBbmltYXRpb25UZXN0LCBzeW5jQ29tcGxldGVkQW5pbWF0aW9uKQoreworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBs
YXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICAvLyBTeW5jIHdp
dGggbm8gYW5pbWF0aW9ucy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9v
dCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgMCk7CisgICAgZ2V0QW5pbWF0aW9uQ29udHJvbGxlcihsYXllclRyZWVSb290LmdldCgpKS0+
YWN0aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpKSwgMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVy
VHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJV
RShjY0xheWVyVHJlZVJvb3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCBjY0xheWVyVHJlZVJv
b3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7CisKKyAgICAvLyBTdGVwIHRocm91Z2gg
dGhlIGFuaW1hdGlvbiB1bnRpbCBpdCBpcyBmaW5pc2hlZC4gQXQgdGhlIG5leHQgc3luYywgdGhl
IG1haW4gdGhyZWFkJ3MgYW5pbWF0aW9uIHNob3VsZCBiZSBjbGVhcmVkLgorICAgIE93blB0cjxD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvcikpOworICAgIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LT5hbmltYXRlKDAsICpldmVudHMpOworICAgIGNjTGF5ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLT5hbmltYXRlKDIsICpldmVudHMpOworCisgICAgRVhQRUNUX0ZBTFNFKGNjTGF5
ZXJUcmVlUm9vdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBn
ZXRBbmltYXRpb25Db250cm9sbGVyKGxheWVyVHJlZVJvb3QuZ2V0KCkpLT5hY3RpdmVBbmltYXRp
b25zKCkuc2l6ZSgpKTsKKworICAgIFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVD
VF9FUShzaXplX3QoMCksIGdldEFuaW1hdGlvbkNvbnRyb2xsZXIobGF5ZXJUcmVlUm9vdC5nZXQo
KSktPmFjdGl2ZUFuaW1hdGlvbnMoKS5zaXplKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128023</attachid>
            <date>2012-02-21 12:28:56 -0800</date>
            <delta_ts>2012-02-22 09:43:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120221152854.patch</filename>
            <type>text/plain</type>
            <size>133650</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwOThjMTYwY2ZlZjVk
ZTQzZDY4OTk0NmQ0ZTI3MjhmZDI5NjkxYi4uZjlkMmQ3OGQ4NWYyN2ZhNTE2MTYyMjU3MzE5ODYx
ODBiNGM4Zjg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MCBAQAorMjAxMi0wMi0yMSAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXR0aW5nczo6c2V0VGhyZWFkZWRBbmltYXRpb25FbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNldHRpbmdzOjp0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQpOgorICAgICAgICAo
U2V0dGluZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChzdGQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250
ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NM
YXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1
c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhhc1J1bik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRpb25TaWdu
YXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDQWN0aXZlQW5pbWF0aW9uOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1h
dGlvbjo6Z3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnNpZ25h
dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRp
b25DdXJ2ZS5oOgorICAgICAgICAoQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpDQ0Fu
aW1hdGlvblN0YXJ0ZWRFdmVudCk6CisgICAgICAgIChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp+Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3lu
Y2hyb25pemVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpyZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
QW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNo
ZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgorICAgICAgICAoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvcGFjaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OmJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRBbmltYXRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJs
ZU9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRp
bmdzKToKKyAgICAgICAgKENDU2V0dGluZ3MpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0
ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVidWdTY29wZWRTZXRNYWluVGhyZWFkOjpEZWJ1Z1Njb3BlZFNldE1haW5U
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVidWdTY29wZWRTZXRNYWluVGhyZWFkOjp+RGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXRBbmltYXRp
b25FdmVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaDoKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEyLTAyLTIxICBBbmRy
ZWFzIEtsaW5nICA8YXdlc29tZWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBTaHJpbmsgYXR0
cmlidXRlIHN0eWxlIHByb3BlcnR5IHNldHMgYWZ0ZXIgcG9wdWxhdGluZyB0aGVtLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZTI5ODZhY2UwYTc1YjMwZTU3NTdmYTczNDQ2MGM2ZGZk
ZDllMTkyLi5hNGM2NmI5MTkyMDIxMGNiYjFmZTc2MmMwYWUwNDhlZjQ2NGMyNGM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTIxICBJYW4gVm9s
bGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGx1bWIg
ZnJvbSBHcmFwaGljc0xheWVyIHRvIHRoZSBjYyB0aHJlYWQgYW5pbWF0aW9uIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODc0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZv
cm0vV2ViTGF5ZXJUcmVlVmlldy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3
OjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAoU2V0dGluZ3MpOgorICAgICAgICAqIHNy
Yy9XZWJMYXllclRyZWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmll
dzo6U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MpOgorICAgICAgICAqIHNyYy9XZWJTZXR0
aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFRocmVh
ZGVkQW5pbWF0aW9uRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9X
ZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgICogdGVzdHMvQ0NBY3RpdmVB
bmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlv
bik6CisgICAgICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXRUZXN0cyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5p
bWF0aW9uQ3VydmU6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6fkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpGYWtlVHJhbnNm
b3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5z
aXRpb246On5GYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Y2xvbmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VGbG9hdFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24pOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkZha2VGbG9hdFRyYW5zaXRpb246On5GYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6
OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6YWRkT3Bh
Y2l0eVRyYW5zaXRpb24pOgorICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAg
ICAgICAoRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZh
a2VGbG9hdEFuaW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKEZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoRmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAg
IChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAo
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjppZCk6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6
Om9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50OjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6dHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6c2V0
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVB
Y3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdDo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6
CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6
OlRlc3RIb29rczo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChNb2NrTGF5ZXJUcmVlSG9zdElt
cGwpOgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMp
OgorICAgICAgICAoV1RGKToKKyAgICAgICAgKE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIp
OgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV1RGOjpNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24p
OgorICAgICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6c2NoZWR1bGVDb21wb3Np
dGUpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0Ojpwb3N0QWRkQW5pbWF0aW9u
VG9NYWluVGhyZWFkKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3QpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFkZEFuaW1hdGlvbik6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KToKKyAgICAgICAgKENDTGF5
ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24pOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0QWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6YmVnaW5UZXN0KToK
KyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6YW5pbWF0ZUxh
eWVycyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmFm
dGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwOgorICAgICAgICAoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpzeW5jaHJvbml6ZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzeW5j
aHJvbml6ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OlRFU1QpOgorCiAyMDEyLTAyLTIxICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gV2ViIEluc3BlY3Rvcjogc2V0IGJyZWFrcG9p
bnQvcGF1c2UgZG9lc24ndCB3b3JrIHdoZW4gd29ya2VyIGlzIGluIGEgdGlnaHQgbG9vcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDY3NDY0ZGVkMzc0M2ZhMDEwZTMyYWRkNDlhZmRlMDdhNGE2ODg4YmYu
LmZmMjMwOThmNjIyMTMzYzg3NzIwZjkxZTQ2ZTY1MGU1NzcwYmIwNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTMyMzYsNiArMzIzNiw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRz
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
RHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCkBAIC0zMjUzLDYgKzMyNTQsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hl
YWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDY0ZjhlMDU4NTQ0ZjgzNjA4ZTFhMjY2MjM5MTE1
MDVmMGRkMzY5NGIuLjkzN2Q5OTQyNTJiM2EyZGM3NmQyYjdjMWM2MTUxNTM2MmE2ZTllMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC0yNDQsNiArMjQ0LDcgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAsIG1fdG91
Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1fdGhyZWFkZWRB
bmltYXRpb25FbmFibGVkKGZhbHNlKQogICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHlU
aW1lcih0aGlzLCAmU2V0dGluZ3M6OmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseVRpbWVyRmlyZWQp
CiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2Ug
aW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IGYx
OWI0YzExZmYxNWQ2Y2NlNzI2ODJmZDU3ZDljOGY1YmM5ODM1ZDkuLjBiZTdlYzA4ZGRkMDNmZThk
MjZjYmE1MjI5OTY1ZjE0NGZiYWRiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTUzNiw2
ICs1MzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNUb3VjaEV2ZW50
RW11bGF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVu
YWJsZWQ7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgc2V0VGhyZWFkZWRBbmltYXRpb25FbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7
IH0KKyAgICAgICAgYm9vbCB0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX3RocmVhZGVkQW5pbWF0aW9uRW5hYmxlZDsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
U2V0dGluZ3MoUGFnZSopOwogCkBAIC02ODYsNiArNjg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAgIGJvb2wgbV90b3VjaEV2ZW50RW11
bGF0aW9uRW5hYmxlZCA6IDE7CiAjZW5kaWYKKyAgICAgICAgYm9vbCBtX3RocmVhZGVkQW5pbWF0
aW9uRW5hYmxlZCA6IDE7CiAKICAgICAgICAgVGltZXI8U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDUxZjIwNDNmYzU0YjQ1ZGNhYTQ2NDM0OGM5NDc3Zjg3YTQ2MjRmYTUu
LjlmM2Q0ZDJhMDU5MDg2MGVmY2Y2NDQzZjEyOWYzYTVkNmM2MDY3YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNjEsNiArNjEsMTAgQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIHsKK3N0YXRpYyBpbnQgZ3JvdXBJZCA9IDA7Cit9CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGlj
c0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMTI0LDcgKzEy
OCw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0
b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQogewogICAgIEdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotICAgIGlmICghbV9pblNldENoaWxkcmVuKSAKKyAg
ICBpZiAoIW1faW5TZXRDaGlsZHJlbikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAK
QEAgLTM4Miw2ICszODYsMzEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKICAgICAgICAgdXBkYXRl
Q2hpbGRMaXN0KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6
ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmFkZEFuaW1hdGlv
bih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQoYW5pbWF0
aW9uTmFtZSksIGdyb3VwSWQrKywgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXItPnBhdXNlQW5pbWF0aW9uKG1hcEFuaW1h
dGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1lT2Zmc2V0KTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUpCit7CisgICAgbV9sYXllci0+cmVtb3ZlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVU
b0lkKGFuaW1hdGlvbk5hbWUpKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1
c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXItPnN1c3BlbmRBbmlt
YXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5p
bWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCiB2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIq
IGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7CkBAIC0zOTYsMTIg
KzQyNSwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlh
KFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2NvbnRl
bnRzTGF5ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7Ci0gIAorCiAg
ICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUgcmVtb3ZlZCB2aWEg
dXBkYXRlQ2hpbGRMaXN0LgogICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKICAgICAg
ICAgfQogICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQogICAgICAgICB1cGRh
dGVDaGlsZExpc3QoKTsKIH0KQEAgLTU1MCw3ICs1NzksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAgICAgICAgIG1fbGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKGlkZW50aXR5
KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBv
ZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24gdGhlIHRyYW5zZm9y
bSBsYXllci4KICAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eSgxKTsKIApAQCAtNjg5LDYgKzcx
OCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlYwogICAgIHBhaW50R3JhcGhpY3NMYXllckNv
bnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQogCitpbnQgR3JhcGhpY3NMYXllckNocm9taXVtOjpt
YXBBbmltYXRpb25OYW1lVG9JZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAg
Ly8gRklYTUU6IG5lZWQgdG8gbWFpbnRhaW4gYSBuYW1lIHRvIGlkIG1hcHBpbmcgaW4gdGhpcyBj
bGFzcy4KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVy
Q2hyb21pdW0uaAppbmRleCBkYmYxNWU1MWRiMTBiN2JkNjUxNTZkZThlN2Q4MDE5M2ZmODdiMGQz
Li5lYjMxNDZiYmQyYjUzMDg5MmI0YmFhZmMzYmFkYjMzNTRlNDQ3MjIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTUsNiArOTUsMTIgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAorICAgIHZpcnR1
YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRT
aXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmLCBkb3VibGUgdGlt
ZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVBbmltYXRpb25zKCk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYpOwpAQCAtMTMyLDYgKzEzOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1
cENvbnRlbnRzTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUo
KSBjb25zdDsKIAorICAgIGludCBtYXBBbmltYXRpb25OYW1lVG9JZChjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUpOworCiAgICAgU3RyaW5nIG1fbmFtZUJhc2U7CiAKICAgICBSZWZQdHI8Q29u
dGVudExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRi
Y2YyOTdmZjkyNDY4Yzk4NGY1YjRmY2MxMmJmZjUzYjI2NmQ2NzQuLjBlYzg1M2Q1NGE2NDY0ZTVk
NzZkMzNkYzc2NDI0ZWM0M2NjMjc4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKICNpZiBVU0UoU0tJQSkKQEAgLTU5LDYgKzYwLDcgQEAgTGF5ZXJDaHJvbWl1bTo6
TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fbGF5
ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKQog
ICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkK
ICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05Miw2ICs5NCw0NyBAQCBM
YXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsK
IH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBh
bmltYXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1lT2Zmc2V0
KQoreworICAgIGlmICghbV9sYXllclRyZWVIb3N0LmdldCgpIHx8ICFtX2xheWVyVHJlZUhvc3Qt
PnNldHRpbmdzKCkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0aW9uSWQs
IGdyb3VwSWQsIHRpbWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAgICAgICAg
c2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisKK3ZvaWQg
TGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGlt
ZU9mZnNldCkKK3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VBbmltYXRp
b24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCkKK3sK
KyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW1hdGlv
bklkKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnN1
c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwor
fQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0TmVlZHND
b21taXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0gbGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChib29sIGlzTm9uQ29tcG9zaXRl
ZENvbnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50ID0gaXNOb25Db21wb3Np
dGVkQ29udGVudDsKQEAgLTQ0MSw2ICs0ODQsOCBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkK
ICAgICAgICAgcmVwbGljYUxheWVyKCktPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXItPnJlcGxpY2FM
YXllcigpKTsKIAorICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5zeW5jaHJvbml6ZUFu
aW1hdGlvbnMobGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKTsKKwogICAgIC8vIFJl
c2V0IGFueSBzdGF0ZSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIGZvciB0aGUgbmV4dCB1cGRhdGUu
CiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5k
ZXggZmYyZTdkMjg2MjYyMmZhZDJjMDY5MzhkNmY1MjU2OTE0MGY4ODNmYS4uOTJmYjAxM2ZiYjdm
YTc1OTYyN2Q1OGJmNTFmMzBiM2NkYmJmZmI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNTIs
NiArNTIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7
CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwpAQCAtNjEsNyArNjIsNiBAQCBjbGFzcyBSZWdpb247
CiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBl
cyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKLSAgICBmcmllbmQgY2xhc3MgTGF5
ZXJUaWxlckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNyZWF0ZSgpOwogCkBAIC0yMTUsNyArMjE1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJlcykgeyBt
X2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQogICAgIGJv
b2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNSZXNlcnZl
VGV4dHVyZXM7IH0KIAorICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1h
dGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZvaWQgcGF1c2VB
bmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdm9pZCBy
ZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKKworICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpIHsg
cmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcj4pOworCiBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBsOworICAg
IGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CisgICAgZnJpZW5kIGNsYXNzIFRyZWVT
eW5jaHJvbml6ZXI7CisKICAgICBMYXllckNocm9taXVtKCk7CiAKICAgICBib29sIGlzUGFpbnRl
ZEF4aXNBbGlnbmVkSW5TY3JlZW4oKSBjb25zdDsKQEAgLTIzMyw4ICsyNDcsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5ZXI7CiAKLSAgICBmcmll
bmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7
CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUg
dHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGludCBtX2xheWVySWQ7CkBA
IC0yNDMsMTAgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoTGF5ZXJDaHJv
bWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1bSopIGNvbnN0OwogCi0g
ICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2No
aWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9m
IHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGluZGV4T2ZDaGlsZChjb25z
dCBMYXllckNocm9taXVtKik7CkBAIC0yNTksNiArMjY4LDggQEAgcHJpdmF0ZToKIAogICAgIFJl
ZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisKICAg
ICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVj
dCBtX3Zpc2libGVMYXllclJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAK
aW5kZXggMjFlNmNjN2E5ZTI0NmVjMGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYS4uOWVmNWZlMjU2
MmI2YjQzMDJkMTFkMmE5ZGFhZmQwYzMwYzMyOWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmNwcApAQCAtMzIsOSArMzIsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1DQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1h
dGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJv
cGVydHkpCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBhbmltYXRpb25J
ZCwgaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIGFuaW1hdGlvbklkLCBn
cm91cElkLCB0YXJnZXRQcm9wZXJ0eSkpOworfQorCitDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3Rp
dmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50IGFuaW1h
dGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiAgICAg
OiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQotICAgICwgbV9ncm91cChncm91cCkKKyAgICAsIG1f
aWQoYW5pbWF0aW9uSWQpCisgICAgLCBtX2dyb3VwKGdyb3VwSWQpCiAgICAgLCBtX3RhcmdldFBy
b3BlcnR5KHRhcmdldFByb3BlcnR5KQogICAgICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KQogICAgICwgbV9pdGVyYXRpb25zKDEpCkBAIC00NCw2ICs1MCwxMCBAQCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlv
bkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1hdGlvbjo6fkNDQWN0
aXZlQW5pbWF0aW9uKCkKK3sKK30KKwogdm9pZCBDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0UnVuU3Rh
dGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSBub3cpCiB7CiAgICAgaWYgKHJ1blN0YXRlID09
IFJ1bm5pbmcgJiYgbV9ydW5TdGF0ZSA9PSBQYXVzZWQpCkBAIC02Myw2ICs3MywyMSBAQCBib29s
IENDQWN0aXZlQW5pbWF0aW9uOjppc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0CiAgICAg
ICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkgPD0gdGlt
ZSAtIHN0YXJ0VGltZSgpIC0gbV90b3RhbFBhdXNlZFRpbWU7CiB9CiAKK2Jvb2wgQ0NBY3RpdmVB
bmltYXRpb246OmlzV2FpdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcnVuU3RhdGUgPT0g
V2FpdGluZ0Zvck5leHRUaWNrCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gV2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eQorICAgICAgICB8fCBtX3J1blN0YXRlID09IFdhaXRpbmdGb3JTdGFy
dFRpbWU7Cit9CisKK2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzUnVubmluZ09ySGFzUnVuKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBSdW5uaW5nCisgICAgICAgIHx8IG1f
cnVuU3RhdGUgPT0gRmluaXNoZWQKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkCisg
ICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gUGF1c2VkOworfQorCiBkb3VibGUgQ0NBY3RpdmVBbmlt
YXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0CiB7CiAg
ICAgZG91YmxlIHRyaW1tZWQgPSBub3c7CkBAIC05NSw0ICsxMjAsMzYgQEAgZG91YmxlIENDQWN0
aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93KSBjb25z
dAogICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkp
OwogfQogCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3QKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2FuaW1hdGlvbkN1
cnZlLT5jbG9uZSgpLCBtX2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOworICAgIHRv
UmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKKyAgICB0b1JldHVybi0+bV9pdGVyYXRp
b25zID0gbV9pdGVyYXRpb25zOworICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1fc3RhcnRU
aW1lOworICAgIHRvUmV0dXJuLT5tX3BhdXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAgIHRvUmV0
dXJuLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVzZWRUaW1lOworICAgIHJldHVybiB0
b1JldHVybi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnN5bmNocm9u
aXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiogb3RoZXIpCit7CisgICAgLy8gSXQgaXMg
cG9zc2libGUgZm9yIHRoZSBpbXBsIHRocmVhZCB0byBpbml0aWF0ZSBhIHJ1biBzdGF0ZSBjaGFu
Z2UuCisgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGFuaW1hdGlvbiB3YXMgd2FpdGluZyBm
b3IgYSBmdXR1cmUgZXZlbnQgdG8gdGFrZQorICAgIC8vIHBsYWNlLCBhbmQgdGhlIGV2ZW50IGhh
cyBoYXBwZW5lZC4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50ICd0aGlzJyB0bworICAgIC8vIGFzc3Vt
ZSB0aGUgaW1wbCB0aHJlYWQncyBydW4gc3RhdGUgYW5kIHN0YXJ0IHRpbWUuCisgICAgaWYgKGlz
V2FpdGluZygpICYmIG90aGVyLT5pc1J1bm5pbmdPckhhc1J1bigpKSB7CisgICAgICAgIG1fcnVu
U3RhdGUgPSBvdGhlci0+bV9ydW5TdGF0ZTsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBvdGhlci0+
bV9zdGFydFRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3RoZXItPm1fcnVuU3RhdGUgPSBt
X3J1blN0YXRlOworICAgICAgICBvdGhlci0+bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZTsKKyAg
ICB9CisKKyAgICAvLyBDaGFuZ2UgaW4gc3RhdGUgcmVsYXRlZCB0byBpdGVyYXRpb25zIGFuZCBw
YXVzZSBpcyBhbHdheXMgaW5pdGlhdGVkIGZyb20KKyAgICAvLyB0aGUgbWFpbiB0aHJlYWQsIHNv
IGl0IGlzIHNhZmUgdG8gcHVzaCBwcm9wZXJ0aWVzIGluIHRoYXQgZGlyZWN0aW9uLgorICAgIG90
aGVyLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlvbnM7CisgICAgb3RoZXItPm1fcGF1c2VUaW1l
ID0gbV9wYXVzZVRpbWU7CisgICAgb3RoZXItPm1fdG90YWxQYXVzZWRUaW1lID0gbV90b3RhbFBh
dXNlZFRpbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2VkMTJkNjU4ZDc2ZDYwNGVlZTlmYmFkMGEz
ZDEuLmFkOWU4NGVlNzkzZGRjNzE3N2NlY2ZiZDAxZTk1YzE3OWY3ZDIyYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5p
bWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMjUsMjUgKzI1LDIwIEBACiAjaWZuZGVmIENDQWN0
aXZlQW5pbWF0aW9uX2gKICNkZWZpbmUgQ0NBY3RpdmVBbmltYXRpb25faAogCisjaW5jbHVkZSAi
Y2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKLQogLy8gQSBDQ0Fj
dGl2ZUFuaW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSByZXF1aXJlZCB0byBwbGF5IGEg
Q0NBbmltYXRpb25DdXJ2ZS4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGFmZmVjdGVkIHByb3BlcnR5
LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVkLCBldGMuKSwKIC8vIGxvb3AgY291bnQs
IGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0aW1lIHNwZW50IHBhdXNlZC4KIGNsYXNz
IENDQWN0aXZlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0FjdGl2ZUFu
aW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRv
Z2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdyb3VwSUQKLSAg
ICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNh
bWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwotICAgIC8vIG1heSBhbmltYXRlIGFueSBv
ZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0
aGUKLSAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZl
IGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKLSAgICAvLyBwcm9wZXJ0eSB1bmlxdWVs
eSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIGludCBHcm91cElEOwotCiAg
ICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMuIEFu
aW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawogICAgIC8vIHdpbGwgc3RhcnQgdGhl
IG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5nIGZv
ciB0YXJnZXQKICAgICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVpciB0
YXJnZXQgcHJvcGVydHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucwpAQCAtNjgsMTQg
KzYzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07CiAKLSAgICBzdGF0aWMg
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRp
b25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlv
bihjdXJ2ZSwgZ3JvdXAsIHRhcmdldFByb3BlcnR5KSk7Ci0gICAgfQorICAgIHN0cnVjdCBBbmlt
YXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmltYXRpb25TaWduYXR1cmUoaW50IGdyb3VwSWQs
IFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgOiBncm91cElkKGdy
b3VwSWQpCisgICAgICAgICAgICAsIHRhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KSB7IH0K
KyAgICAgICAgaW50IGdyb3VwSWQ7CisgICAgICAgIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5OworICAgIH07CiAKLSAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsgfQorICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJv
cGVydHkpOwogCi0gICAgR3JvdXBJRCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0K
KyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpOworCisgICAgaW50IGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIGludCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7
IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0UHJvcGVydHk7IH0KIAogICAgIFJ1blN0YXRlIHJ1blN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9ydW5TdGF0ZTsgfQpAQCAtOTMsNiArOTQsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Zp
bmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OwogICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVk
OyB9CiAKKyAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OworICAgIGJvb2wgaXNSdW5uaW5nT3JI
YXNSdW4oKSBjb25zdDsKKwogICAgIENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkg
eyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogICAgIGNvbnN0IENDQW5pbWF0aW9u
Q3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5n
ZXQoKTsgfQogCkBAIC0xMDAsMTEgKzEwNCwyNyBAQCBwdWJsaWM6CiAgICAgLy8gb2YgaXRlcmF0
aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24u
CiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0
OwogCisgICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIEFu
aW1hdGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisgICAgUGFz
c093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3Q7CisK
KyAgICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiopOworCiBw
cml2YXRlOgotICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2
ZT4sIEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbihQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBU
YXJnZXRQcm9wZXJ0eSk7CiAKICAgICBPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gbV9hbmltYXRp
b25DdXJ2ZTsKLSAgICBHcm91cElEIG1fZ3JvdXA7CisKKyAgICAvLyBJRHMgYXJlIG5vdCBuZWNl
c3NhcmlseSB1bmlxdWUuCisgICAgaW50IG1faWQ7CisKKyAgICAvLyBBbmltYXRpb25zIHRoYXQg
bXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcgYW5kIGhhdmUgdGhlIHNh
bWUgZ3JvdXAgaWQKKyAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8g
c3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucworICAgIC8vIG1h
eSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwg
YW5pbWF0aW9ucyBpbiB0aGUKKyAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4g
Tm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKKyAgICAvLyBw
cm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KKyAgICBpbnQgbV9ncm91
cDsKKwogICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7CiAgICAgUnVuU3RhdGUg
bV9ydW5TdGF0ZTsKICAgICBpbnQgbV9pdGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25D
dXJ2ZS5oCmluZGV4IGRlOTdlMzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMuLjUz
M2FiYWZlZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1NTE2NjdlZTI0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgKQEAgLTI1LDYgKzI1LDEwIEBACiAjaWZuZGVmIENDQW5pbWF0aW9uQ3Vy
dmVfaAogI2RlZmluZSBDQ0FuaW1hdGlvbkN1cnZlX2gKIAorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENDRmxvYXRBbmltYXRpb25DdXJ2ZTsKQEAgLTQxLDYgKzQ1LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgPSAwOwogCiAgICAgY29uc3QgQ0NGbG9h
dEFuaW1hdGlvbkN1cnZlKiB0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKICAgICBjb25z
dCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkg
Y29uc3Q7CkBAIC02MCw3ICs2NSw3IEBAIGNsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUg
OiBwdWJsaWMgQ0NBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsgfQogCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRp
b25zIGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBj
b25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgog
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbkV2ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjFhNzllMzEzOTdlYzg4ZTNk
NTk0ZTkyMzI2M2MxZWI4MDMzZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaApAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uRXZlbnRzX2gKKyNk
ZWZpbmUgQ0NBbmltYXRpb25FdmVudHNfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEluZGljYXRlcyB0aGF0IGFuIGFuaW1hdGlvbiBoYXMg
c3RhcnRlZCBvbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCitzdHJ1Y3QgQ0NBbmltYXRpb25TdGFydGVk
RXZlbnQgeworICAgIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklELCBkb3VibGUg
dGltZSkKKyAgICAgICAgOiBsYXllcklEKGxheWVySUQpCisgICAgICAgICwgdGltZSh0aW1lKSB7
IH0KKyAgICBpbnQgbGF5ZXJJRDsKKyAgICBkb3VibGUgdGltZTsKK307CisKK3R5cGVkZWYgVmVj
dG9yPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25FdmVudHNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk0NTUxZDljMGYyYWFhYTI4NzhmMDZmOWYwYjVjMGM4M2I0YjViNzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZvciBLZXlm
cmFtZVZhbHVlTGlzdAorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQoreworfQorCitDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkKK3sKK30KKworUGFz
c093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcik7Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlv
biogYW5pbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBhbmltYXRpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZ3JvdXBJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKGludCBh
bmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAgICAgICAgICAgIG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwg
dGltZU9mZnNldCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
OjpyZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAgICAgICAgICAgIG1fYWN0
aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGkrKzsK
KyAgICB9Cit9CisKKy8vIEFjY29yZGluZyB0byByZW5kZXIgbGF5ZXIgYmFja2luZywgdGhlc2Ug
YXJlIGZvciB0ZXN0aW5nIG9ubHkuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpz
dXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKworLy8gTG9va2luZyBhdCBHcmFw
aGljc0xheWVyQ0EsIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgYW5hbG9nIHRvIHN1c3BlbmRBbmlt
YXRpb25zLCB3aGljaCBpcyBmb3IgdGVzdGluZy4KK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQoreworfQorCisvLyBFbnN1cmVzIHRoYXQgdGhlIGxp
c3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgaW1wbCB0
aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5bmMuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KiBjb250cm9sbGVySW1wbCkKK3sKKyAgICByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKGNvbnRy
b2xsZXJJbXBsKTsKKyAgICBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChjb250cm9sbGVy
SW1wbCk7CisgICAgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChjb250cm9s
bGVySW1wbCk7CisgICAgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoY29udHJvbGxlckltcGwpOwor
fQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVDb21wbGV0ZWRBbmlt
YXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCit7
CisgICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFkIGFyZSBy
ZW1vdmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9u
c1tpXS5ncm91cElkLCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNbaV0udGFy
Z2V0UHJvcGVydHkpOworICAgIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5j
bGVhcigpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5p
bWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRy
b2xsZXJJbXBsKQoreworICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0aGUgbWFp
biB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhlIGltcGwgdGhy
ZWFkJ3MgY29udHJvbGxlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBsLT5nZXRB
Y3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQorICAgICAgICAgICAgY29udHJvbGxlcklt
cGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFuaW1hdGlv
bnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBj
b250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlv
bnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0
aW9uLgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFy
YW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
KSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZlQW5pbWF0
aW9uKGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCksIGNvbnRy
b2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpOworICAg
ICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+bV9hY3RpdmVB
bmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAg
IH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblBy
b3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkK
K3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRo
ZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgorICAgIC8vIEVh
Y2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRl
Y3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jl
c3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAg
ICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+bV9hY3Rp
dmVBbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVu
dCA9IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVudEltcGwt
PnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBBU1NFUlQoY3VycmVudCk7CisgICAgICAgIGlm
IChjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0aWVzKGN1
cnJlbnRJbXBsKTsKKyAgICB9Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlm
IChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisgICAgICAg
ICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoaW50IGdyb3VwSWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwSWQg
JiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdldFByb3Bl
cnR5KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NzA0YTYwMzMwNzQ0M2MwYTQyMjBlYTdhMGQ2N2IzZTYxOWM0Y2RmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKKyNkZWZpbmUgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24u
aCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBbmltYXRpb247CitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CitzdHJ1
Y3QgSW50U2l6ZTsKK2NsYXNzIEtleWZyYW1lVmFsdWVMaXN0OworCitjbGFzcyBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKCk7CisKKyAgICAvLyBUaGVzZSBhcmUgdmlydHVhbCBmb3IgdGVzdGlu
Zy4KKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGlv
bklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBw
YXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CisgICAgdmlydHVh
bCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0IG9mIGFj
dGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhyZWFkCisg
ICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVy
c2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KKyAgICB2aXJ0dWFsIHZvaWQgc3lu
Y2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisg
ICAgLy8gVGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgIFZlY3RvcjxPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+ID4mIGFjdGl2ZUFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2Fj
dGl2ZUFuaW1hdGlvbnM7IH0KKworcHJvdGVjdGVkOgorICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25z
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaE5ld0FuaW1h
dGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisgICAg
dm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiog
Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0
UHJvcGVydHkpOworICAgIHZvaWQgcmVtb3ZlKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAppbmRleCBiYmNhOWNi
ZDkwNTVlMWVjMTNjYzBhOTc0NjM5YzVmOTcwODgwOTkyLi40ZjcyNzk4Y2E5Yzc3NmViYjMyYWYz
NzExZTZlNWY0YzgwNzdmZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogCisjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDI4ICs0NSwzMCBAQCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0
aW9uQwogewogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0
ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQorQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjp+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCkKIHsKLSAgICBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzKTsKLSAgICBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vjcyk7Ci0gICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNl
Y3MpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZShk
b3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZlbnRz
KQoreworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhmcmFtZUJlZ2luVGlt
ZVNlY3MsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShm
cmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zv
clRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CiAgICAgcmVz
b2x2ZUNvbmZsaWN0cyhmcmFtZUJlZ2luVGltZVNlY3MpOwogICAgIHRpY2tBbmltYXRpb25zKGZy
YW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgcHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKLSAgICBz
dGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1l
U2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShm
cmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CiB9CiAKIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKIHsK
ICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgbV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUodGhp
cyk7CiB9CiAKLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCBncm91cCwg
Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQorQ0NBY3RpdmVBbmlt
YXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5pbWF0aW9u
KGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJvcGVydHkp
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBn
cm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJ
ZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gcHJvcGVydHkp
CiAgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwogICAgIH0K
ICAgICByZXR1cm4gMDsKQEAgLTgwLDI1ICs4MywyOCBAQCBib29sIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdykKK3ZvaWQgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91Ymxl
IG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKIHsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBp
ZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CiAgICAgICAg
ICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAg
ICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+aWQoKSwg
bm93KSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJsZSBub3cp
Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYgZXZl
bnRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRl
KCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9hY3RpdmVB
bmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBub3cpCisgICAgICAgIGlmIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JT
dGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBub3cpIHsK
ICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKENDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50KG1fY2xpZW50LT5pZCgpLCBub3cpKTsKKyAgICAgICAgfQogICAg
IH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0
aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdykKK3ZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0
QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMp
CiB7CiAgICAgLy8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCiAgICAgVGFyZ2V0
UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsKQEAgLTEzMCw2ICsxMzYsNyBAQCB2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eQogICAgICAgICAgICAgaWYgKG51bGxJbnRlcnNlY3Rpb24pIHsKICAg
ICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwogICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVu
ZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+aWQoKSwgbm93KSk7CiAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNp
emUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwpAQCAtMTc4LDkgKzE4NSwxMCBAQCB2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAo
YWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisgICAgICAgIGlmIChhbGxBbmltc1dpdGhT
YW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgbV9maW5pc2hlZEFuaW1hdGlvbnMuYXBw
ZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0dXJlKCkpOwogICAgICAgICAgICAgbV9h
Y3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIGkrKzsKICAgICB9CiB9CkBAIC0xOTQsMTQgKzIwMiwxMSBAQCB2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMoZG91YmxlIG5vdykK
IAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZlKCktPnRv
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFs
dWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQsIG1fY2xp
ZW50LT5ib3VuZHMoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBub3cpOwog
Ci0gICAgICAgICAgICAgICAgLy8gRGVjaWRlIGhlcmUgaWYgYWJzb2x1dGUgb3IgcmVsYXRpdmUu
IEFic29sdXRlIGZvciBub3cuCi0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dG9BcHBseTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGx5KEZsb2F0U2l6ZSgpLCB0
b0FwcGx5KTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKHRvQXBwbHkp
OworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCAxYWQyMjNkYmE4MjNhMmEw
NTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Li4yOTYwNjZkZTAwMmUyNjQ0YTBhZDdhMDY5NDE5NDc5
YzAyZDhjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaApAQCAtMjcsOCArMjcsMTAgQEAKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZl
QW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ0LDM1
ICs0Niw0MSBAQCBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewog
cHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZs
b2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKikgPSAw
OworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAwOwogfTsKIAog
Y2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOwogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY3JlYXRlKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwogCi0gICAgdm9pZCBhbmltYXRl
KGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCgpOworCisgICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CiAKICAgICB2b2lkIGFkZChQYXNz
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUg
YW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0
eSBpZiBzdWNoIGFuCiAgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAgICBDQ0FjdGl2ZUFuaW1h
dGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0aW9uKiBn
ZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eSk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhbmltYXRp
b25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCiAgICAgYm9vbCBoYXNB
Y3RpdmVBbmltYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisKICAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQg
YnkgdGhlIGxheWVyLgogICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZvaWQgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpOwotICAgIHZvaWQgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KTsKLSAgICB2b2lkIHN0
YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdyk7Cisg
ICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdywgQ0NB
bmltYXRpb25FdmVudHNWZWN0b3ImKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKKyAgICB2
b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5v
dywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKICAgICB2b2lkIHJlc29sdmVDb25mbGljdHMo
ZG91YmxlIG5vdyk7CiAgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwogCkBAIC04
MCw2ICs4OCw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZlY3RvcjxDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5p
bWF0aW9uU2lnbmF0dXJlPiBtX2ZpbmlzaGVkQW5pbWF0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBjMmJkMzRiMGJmYjhlOTA4
NzYzNDMzMWQxY2UyNjFmMmFlYmJkZDY2Li5iZWY1MDRkMTM4MDU2ZjdlYTA3ZjMwYjFhMmUyMjU3
ZjMxOGQ2ZTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJT
b3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjEsNiArNjIsNyBAQCBDQ0xheWVySW1wbDo6Q0NM
YXllckltcGwoaW50IGlkKQogICAgICwgbV9kcmF3T3BhY2l0eSgwKQogICAgICwgbV9kZWJ1Z0Jv
cmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkKKyAgICAs
IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6Y3JlYXRlKHRoaXMpKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA5ZTZjNTUwMDdlZTdlMzhkNzVmNjMxMWM5YTBm
OGRlZGE3NDc2ZWFjLi5kMGQ1MjQxYmU2ZjY4NmRjODVkMDZlYmQ4OWRmMzg2ZTY0ZDA5NTY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCiAj
aW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNl
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsMTIgKzQ2LDIxIEBAIGNsYXNzIEND
TGF5ZXJTb3J0ZXI7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOwogCi1jbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJ
bXBsPiB7CitjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBs
PiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKGlkKSk7CiAgICAgfQor
CisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
Zm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1
cm4gbV9ib3VuZHM7IH0KKwogICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7CiAKICAgICAvLyBU
cmVlIHN0cnVjdHVyZS4KQEAgLTY2LDggKzc2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVw
bGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKICAgICBDQ0xheWVySW1wbCogcmVw
bGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0KCk7IH0KIAotICAg
IGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQotCiAjaWZuZGVmIE5ERUJVRwog
ICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKQEAg
LTExMSw5ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAgICAg
Ym9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCi0gICAgdm9pZCBzZXRP
cGFjaXR5KGZsb2F0KTsKLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFj
aXR5OyB9Ci0KICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBj
b25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0K
IApAQCAtMTI5LDkgKzEzNCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRy
YW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJp
bmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkBAIC0xNTQsNyArMTU2LDYgQEAgcHVibGljOgogICAg
IENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShD
Q1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFj
ZTsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3Vu
ZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CiAKICAgICBjb25zdCBJ
bnRTaXplJiBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50Qm91bmRzOyB9
CkBAIC0yMDMsNiArMjA0LDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJQcm9wZXJ0eUNoYW5n
ZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOyB9CiAgICAgdm9pZCBy
ZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCisgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKiBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGlj
aXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzEyLDYgKzMxNSw5IEBAIHByaXZhdGU6CiAgICAg
Ly8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmluZyB1cGRh
dGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5kIGxlYXZl
IGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisKKyAgICAvLyBNYW5hZ2Vz
IGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2b2lkIHNv
cnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmlyc3QsIFZl
Y3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNvcnRlciop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZTQ2MmU1MzE4YmZjN2YzNzk0
ZGE4NjVjZWZmMzNiYWVjNWQyZTUwMS4uZWExN2U4YzlhOTYxMjlmNmU1MDlhMTk3YmY2ODIzNTlm
MDMzMWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xNzEsOSArMTcx
LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKIAogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFs
bC4uLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICBpZiAocm9vdExheWVyKCkpIHsKICAgICAg
ICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRy
ZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKLSAgICBlbHNlCisgICAg
ICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRyZWUgc3lu
Yy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBjb250cm9sbGVycy4KKyAg
ICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxheWVycygpOworICAgIH0gZWxzZQogICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogCiAgICAgaG9zdEltcGwtPnNldFNvdXJj
ZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwpAQCAtMjU5LDYgKzI2MSwxMiBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQogICAgICAgICBtX2NsaWVudC0+c2NoZWR1
bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvbkV2
ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7CisgICAg
QVNTRVJUKENDVGhyZWFkUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBGSVhNRTogbmVl
ZCB0byB3YWxrIHRoZSB0cmVlLgorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExh
eWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogewogICAgIGlmIChtX3Jv
b3RMYXllciA9PSByb290TGF5ZXIpCkBAIC0zMzQsOSArMzQyLDEyIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAgaWYgKHJvb3RMYXllcigp
KSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7Ci0gICAg
ZWxzZQorICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmltYXRpb24gZHVyaW5nIHRo
ZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBob3N0SW1wbCB0byB2aXNpdCBpdHMgY29udHJv
bGxlcnMuCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsKKyAgICB9
IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAppbmRleCBmNWUxMTM0YzgxYjQzZTIxODg2YTVkOTM1MzBlZTg4ZjE5
YTQwMzI1Li40ZWQ4ZGE5NjM0ODY5MjA3ZmRhZGU5Zjg5MWE5ZDM5MjM0M2Q1ODg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJSYXRlTGltaXRlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5Lmgi
CiAKQEAgLTc1LDYgKzc2LDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAgICAgLCBy
ZWZyZXNoUmF0ZSgwKQogICAgICAgICAgICAgLCBwZXJUaWxlUGFpbnRpbmcoZmFsc2UpCiAgICAg
ICAgICAgICAsIHBhcnRpYWxTd2FwRW5hYmxlZChmYWxzZSkKKyAgICAgICAgICAgICwgdGhyZWFk
ZWRBbmltYXRpb25FbmFibGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtYXhQYXJ0aWFsVGV4dHVy
ZVVwZGF0ZXMoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkgeyB9CiAKICAgICBi
b29sIGFjY2VsZXJhdGVQYWludGluZzsKQEAgLTg0LDYgKzg2LDcgQEAgc3RydWN0IENDU2V0dGlu
Z3MgewogICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKICAgICBib29sIHBlclRpbGVQYWludGluZzsK
ICAgICBib29sIHBhcnRpYWxTd2FwRW5hYmxlZDsKKyAgICBib29sIHRocmVhZGVkQW5pbWF0aW9u
RW5hYmxlZDsKICAgICBzaXplX3QgbWF4UGFydGlhbFRleHR1cmVVcGRhdGVzOwogfTsKIApAQCAt
MTYzLDYgKzE2Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXQo
KTsKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lkIHNldEFuaW1hdGlvbkV2
ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPik7CisKICAgICBMYXllckNo
cm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQogICAgIGNv
bnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVy
LmdldCgpOyB9CiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVt
Pik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDA1NGJlYjMy
ZWU1MzU5Y2JjNWJhNTRmOTFiNmE5NmMxNTQwZmY1YjUuLmJiNDBhOTYxMTM3YTlhYTIwNTc5ODEx
MDMzM2NkNTI4NDhjYmQxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCkBAIC01OCw2ICs1OCw3IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9z
dEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAgICAgLCBtX3Nl
bnRQYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV9taW5QYWdlU2NhbGUoMCkKICAgICAsIG1fbWF4
UGFnZVNjYWxlKDApCisgICAgLCBtX25lZWRzQW5pbWF0ZUxheWVycyh0cnVlKQogICAgICwgbV9w
aW5jaEdlc3R1cmVBY3RpdmUoZmFsc2UpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKQEAgLTk4LDIxICs5OSw4IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpjb250ZXh0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRl
KGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogewotICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRp
b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUo
bV9zY3JvbGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+
c2Nyb2xsRGVsdGEoKSk7Ci0KLSAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1h
dGlvbi0+cGFnZVNjYWxlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUpOwot
ICAgIEludFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZz
ZXRBdFRpbWUoZnJhbWVCZWdpblRpbWVNcyk7Ci0gICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9w
YWdlU2NhbGVEZWx0YSk7Ci0gICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3Jv
bGwgLSBzY3JvbGxUb3RhbCk7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhy
ZWFkKCk7Ci0KLSAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24tPmlzQW5pbWF0aW9uQ29tcGxl
dGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykpIHsKLSAgICAgICAgbV9wYWdlU2NhbGVBbmltYXRp
b24uY2xlYXIoKTsKLSAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFk
KCk7Ci0gICAgfQorICAgIGFuaW1hdGVQYWdlU2NhbGUoZnJhbWVCZWdpblRpbWVNcyk7CisgICAg
YW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZU1zKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3Np
dGlvbiwgYm9vbCBhbmNob3JQb2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1l
TXMsIGRvdWJsZSBkdXJhdGlvbk1zKQpAQCAtMjQ1LDYgKzIzMywyNSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6Om9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nl
cykKICAgICAgICAgcGFzc2VzW2ldLT5vcHRpbWl6ZVF1YWRzKCk7CiB9CiAKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogY3VycmVu
dCwgZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2
ZW50cywgYm9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKQoreworICAgIGJvb2wgc3VidHJlZU5lZWRz
QW5pbWF0ZUxheWVycyA9IGZhbHNlOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKiBjdXJyZW50Q29udHJvbGxlciA9IGN1cnJlbnQtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpOworICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1lU2Vjcywg
ZXZlbnRzKTsKKyAgICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KQorICAgICAgICBzdWJ0cmVlTmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1ZTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudC0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAg
ICAgICBib29sIGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzID0gZmFsc2U7CisgICAgICAgIGFuaW1h
dGVMYXllcnNSZWN1cnNpdmUoY3VycmVudC0+Y2hpbGRyZW4oKVtpXS5nZXQoKSwgZnJhbWVCZWdp
blRpbWVTZWNzLCBldmVudHMsIGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKTsKKyAgICAgICAgaWYg
KGNoaWxkTmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAgICAgICAgc3VidHJlZU5lZWRzQW5pbWF0
ZUxheWVycyA9IHRydWU7CisgICAgfQorCisgICAgbmVlZHNBbmltYXRlTGF5ZXJzID0gc3VidHJl
ZU5lZWRzQW5pbWF0ZUxheWVyczsKK30KKwogSW50U2l6ZSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
b250ZW50U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gVE9ETyhhZWxpYXMpOiBIYXJkY29kaW5nIHRo
ZSBmaXJzdCBjaGlsZCBoZXJlIGlzIHdlaXJkLiBUaGluayBvZgpAQCAtNTYxLDQgKzU2OCw0NSBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKQogICAg
IH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZU1zKQoreworICAgIGlmICghbV9wYWdlU2NhbGVBbmltYXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgc2Nyb2xsVG90YWwgPSB0b1NpemUobV9zY3Jv
bGxMYXllckltcGwtPnNjcm9sbFBvc2l0aW9uKCkgKyBtX3Njcm9sbExheWVySW1wbC0+c2Nyb2xs
RGVsdGEoKSk7CisKKyAgICBzZXRQYWdlU2NhbGVEZWx0YShtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+
cGFnZVNjYWxlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpIC8gbV9wYWdlU2NhbGUpOworICAgIElu
dFNpemUgbmV4dFNjcm9sbCA9IG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5zY3JvbGxPZmZzZXRBdFRp
bWUoZnJhbWVCZWdpblRpbWVNcyk7CisgICAgbmV4dFNjcm9sbC5zY2FsZSgxIC8gbV9wYWdlU2Nh
bGVEZWx0YSk7CisgICAgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbEJ5KG5leHRTY3JvbGwgLSBz
Y3JvbGxUb3RhbCk7CisKKyAgICBpZiAobV9wYWdlU2NhbGVBbmltYXRpb24tPmlzQW5pbWF0aW9u
Q29tcGxldGVBdFRpbWUoZnJhbWVCZWdpblRpbWVNcykpIHsKKyAgICAgICAgbV9wYWdlU2NhbGVB
bmltYXRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBs
VGhyZWFkKCk7CisgICAgfQorCisgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhy
ZWFkKCk7CiB9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhkb3Vi
bGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICBpZiAoIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8
ICFtX3Jvb3RMYXllckltcGwuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50
LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOworCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9u
ZWVkc0FuaW1hdGVMYXllcnMpOworCisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
PiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisKKyAgICBh
bmltYXRlTGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVySW1wbC5nZXQoKSwgZnJhbWVCZWdpblRp
bWVNcyAvIDEwMDAsICpldmVudHMsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsKKworICAgIGlmICgh
ZXZlbnRzLT5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50LT5wb3N0QW5pbWF0aW9uRXZlbnRz
VG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKGV2ZW50cy5yZWxlYXNlKCkpOworCisgICAgaWYgKG1f
bmVlZHNBbmltYXRlTGF5ZXJzKQorICAgICAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbklt
cGxUaHJlYWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDg5NDkxNTQyZTQzM2ZhYWZlZjI2NmE0ZWYxYTg5ZDA4
MDYwYjlhZmQuLjQ4MWU0YTNiMzBjMmJhMjA0NTcwMDI4MTcyZTZkZTNlNmY5ZWNiOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1LDExICsyNSwxMyBAQAogI2lm
bmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9o
CiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDSW5w
dXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5o
IgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00
OCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBs
ZXRlT25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxU
aHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pID0g
MDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJl
ZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC02OCw3ICs3MSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlRW5kKCk7CiAgICAgdmlydHVh
bCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0
aW9uLCBib29sIGFuY2hvclBvaW50LCBmbG9hdCBwYWdlU2NhbGUsIGRvdWJsZSBzdGFydFRpbWVN
cywgZG91YmxlIGR1cmF0aW9uTXMpOwogCi0gICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZworICAg
IC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcuCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7
CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGUoZG91YmxlIGZyYW1lRGlzcGxheVRpbWVNcyk7CkBAIC0xMTksOCArMTIyLDE3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dHJhZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0
aW9uU2VjKTsKIAorICAgIGJvb2wgbmVlZHNBbmltYXRlTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KKyAgICB2b2lkIHNldE5lZWRzQW5pbWF0ZUxheWVycygp
IHsgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOyB9CisKIHByb3RlY3RlZDoKICAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xp
ZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGVQYWdlU2NhbGUoZG91YmxlIGZyYW1lQmVnaW5UaW1l
TXMpOworCisgICAgLy8gVmlydHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0ZUxheWVycyhkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisKICAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAg
ICBpbnQgbV9mcmFtZU51bWJlcjsKQEAgLTEzNSw2ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwg
Y29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgY2Fs
Y3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmLCBDQ0xheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRl
clBhc3NMaXN0Jik7CisgICAgdm9pZCBhbmltYXRlTGF5ZXJzUmVjdXJzaXZlKENDTGF5ZXJJbXBs
KiwgZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImLCBi
b29sJiBuZWVkc0FuaW1hdGVMYXllcnMpOwogICAgIEludFNpemUgY29udGVudFNpemUoKSBjb25z
dDsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsK
QEAgLTE1MCw2ICsxNjMsOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fc2VudFBhZ2VTY2FsZURl
bHRhOwogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VTY2FsZTsKIAorICAgIC8v
IElmIHRoaXMgaXMgdHJ1ZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHRyYXZlcnNlIHRoZSBsYXllciB0
cmVlIHRpY2tpbmcgdGhlIGFuaW1hdG9ycy4KKyAgICBib29sIG1fbmVlZHNBbmltYXRlTGF5ZXJz
OwogICAgIGJvb2wgbV9waW5jaEdlc3R1cmVBY3RpdmU7CiAKICAgICBPd25QdHI8Q0NQYWdlU2Nh
bGVBbmltYXRpb24+IG1fcGFnZVNjYWxlQW5pbWF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAppbmRleCAxN2E2OTU5M2E2NDNjZmZlODM3MTc2MTQ5N2U0YmVjMGEx
YzcxZDkwLi5lYThjNDBmMTI1NjVlYzQxM2JhYjU4NmJhMjBlNDljZWY5ZjlkYThkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjMzLDYgKzIzMywxMyBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7
CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFp
blRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBl
dmVudHMpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBEZWJ1
Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpbjsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1h
dGlvbkV2ZW50cyhldmVudHMpOworfQorCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVs
aW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQog
dm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggYWRkYTlmMTRlOWU1NGRiYTA1YWYz
MGQ1Nzg2ODM4YzQ2M2QzNDQ0MS4uNzFiNWU5OWIyZWQyYWZmNzgyNTAzYmYzOTMzNjY5ODNmYzU5
NDcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMjUsNiArMjUs
NyBAQAogI2lmbmRlZiBDQ1NpbmdsZVRocmVhZFByb3h5X2gKICNkZWZpbmUgQ0NTaW5nbGVUaHJl
YWRQcm94eV9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUg
ImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTYzLDYgKzY0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25J
bXBsVGhyZWFkKCkgeyBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9z
dC0+c2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZl
bnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNW
ZWN0b3I+KTsKIAogICAgIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHBhdGggd2hlcmUgUmVuZGVy
V2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAgICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVs
eSgpOwpAQCAtMTExLDYgKzExMywyNCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorLy8gRm9yIHVz
ZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UuIEluIGRlYnVnIGJ1aWxkcywgaXQgcHJldGVu
ZHMgdGhhdCB0aGUKKy8vIGNvZGUgaXMgcnVubmluZyBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gc2F0
aXNmeSBhc3NlcnRpb24gY2hlY2tzLgorY2xhc3MgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIHsK
K3B1YmxpYzoKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQoKQorICAgIHsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgICAgIENDUHJveHk6OnNldEN1cnJlbnRUaHJlYWRJc0ltcGxUaHJl
YWQoZmFsc2UpOworI2VuZGlmCisgICAgfQorICAgIH5EZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQo
KQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIENDUHJveHk6OnNldEN1cnJl
bnRUaHJlYWRJc0ltcGxUaHJlYWQodHJ1ZSk7CisjZW5kaWYKKyAgICB9Cit9OworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRl
eCAzZWE3MmUyYTFjNzJmYjM1NjkxNDg5MjdlY2IxNTEwNDcyOTg5NDI2Li43NWVmMTM2MjNkZTg3
NmY0NGEyY2E0N2VhZGQ4MTIwYjExMGIyMzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cApAQCAtMjU5LDYgKzI1OSwxMyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0
T25JbXBsVGhyZWFkKCkKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0TmVlZHNDb21t
aXQoKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWlu
VGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2
ZW50cykKK3sKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFk
IiwgdGhpcywgMCk7CisgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0QW5pbWF0aW9uRXZlbnRzLCBldmVudHMp
KTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTU2Miw2ICs1NjksMTQgQEAgdm9pZCBDQ1RocmVhZFBy
b3h5OjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkKICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZENv
bXBsZXRlU3dhcEJ1ZmZlcnMoKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5OjpzZXRBbmltYXRp
b25FdmVudHMoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhl
dmVudHMpOworfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1wbFRocmVhZCIsIHRoaXMsIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDIzYzI5ZjQ4ZmEzMmI3YWM0ODgxNTgwMmNhMDM1OGVl
YTFkODgwMWEuLjMzMGVmNTFjYTk4YTE2ZDIyMzFlMzM2NTU0MGFjMDNjMTczMzJhMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgQ0NUaHJlYWRQ
cm94eV9oCiAjZGVmaW5lIENDVGhyZWFkUHJveHlfaAogCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRp
b25FdmVudHMuaCIKICNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC03
MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBs
ZXRlT25JbXBsVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7
CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxU
aHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pOwogCiAgICAgLy8gQ0NT
Y2hlZHVsZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygp
OwpAQCAtODYsNiArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1p
dChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxD
Q1Njcm9sbEFuZFNjYWxlU2V0Pik7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsK
ICAgICB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHNldEFuaW1hdGlv
bkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPik7CiAKICAgICAvLyBD
YWxsZWQgb24gaW1wbCB0aHJlYWQKICAgICBzdHJ1Y3QgUmVhZGJhY2tSZXF1ZXN0IHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDZlOWE0ZDBkZmE5NWZiNzQ4NzFlNWZmMzlmYjI4
YWRmZmRhYWQ5ZmIuLmQxYTk2NzgxZTdiMDQ5MWE1YzE4ODQyZTdlMzg3OWE3NzczMzcyZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjEsMTAgKzYxLDEzIEBACiAgICAgICAg
ICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVz
dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5k
ZXggOTc2ZTc2YmI0ZTZmZmIxN2Y1NmY1MjViMDZmZGNiM2VlZjJlNjMxMC4uN2YxYmJiMGM0OTY5
OGRiOTIzNjRhNTYyOGFmNTRhNTEyZjU1ZTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC0xNDIsNiArMTQyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRUaHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAwOwogCiBwcm90ZWN0ZWQ6
CiAgICAgfldlYlNldHRpbmdzKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgKaW5kZXggMWFkNDY4OWZl
YTkwN2FjNGVlMWQyZThiZTgxNWFmYTJjYjM2NzNhMy4uMTdhODc2YTk4NTFkZGZjMGNmOWE1NjFj
OTg2YWRjMjNiYmQ2YWFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaApAQCAtNTAsNyArNTAsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAg
ICAgICAgICwgcmVmcmVzaFJhdGUoMCkKICAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZh
bHNlKQotICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpIHsgfQorICAgICAg
ICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAsIHRocmVhZGVk
QW5pbWF0aW9uRW5hYmxlZChmYWxzZSkgeyB9CiAKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlUGFp
bnRpbmc7CiAgICAgICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOwpAQCAtNTksNiArNjAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKICAgICAgICAgYm9vbCBwZXJU
aWxlUGFpbnRpbmc7CiAgICAgICAgIGJvb2wgcGFydGlhbFN3YXBFbmFibGVkOworICAgICAgICBi
b29sIHRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZDsKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
ICAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0OwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCmluZGV4
IGNhMDM1MTQzM2U3OGIwMGQ4Y2M2MDRlYTAwMmZlMTY3NjBlMWQ0MjguLmQyYzBmMGMxMjFhN2Mw
ZDVlNWJmZTFlNTA1ZWQ3YmVhYmJiMjdiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCkBAIC00NSw2ICs0NSw3IEBAIFdlYkxheWVyVHJl
ZVZpZXc6OlNldHRpbmdzOjpvcGVyYXRvciBDQ1NldHRpbmdzKCkgY29uc3QKICAgICBzZXR0aW5n
cy5yZWZyZXNoUmF0ZSA9IHJlZnJlc2hSYXRlOwogICAgIHNldHRpbmdzLnBlclRpbGVQYWludGlu
ZyA9IHBlclRpbGVQYWludGluZzsKICAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBw
YXJ0aWFsU3dhcEVuYWJsZWQ7CisgICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVk
ID0gdGhyZWFkZWRBbmltYXRpb25FbmFibGVkOwogCiAgICAgLy8gRklYTUU6IHNob3dGUFNDb3Vu
dGVyIC8gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIC8gbWF4UGFydGlhbFRleHR1cmVVcGRhdGVzIGFy
ZW4ndCBzdXBwb3J0ZWQgY3VycmVudGx5LgogICAgIHJldHVybiBzZXR0aW5nczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDkwYmQwMGNj
MTk4MTM0ODA2MzlhZGZmNWRlNDkxMWJjZDUwMmFlODguLjQzMmJkNDcwM2Y3MTQwY2FhNzNkYWU1
NWRjNmNkNjBkNGEzNWJkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2V0dGluZ3NJbXBsLmNwcApAQCAtNTQyLDQgKzU0Miw5IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBs
OjpzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fc2V0dGluZ3MtPnNl
dFBhcnRpYWxTd2FwRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6
OnNldFRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0
aW5ncy0+c2V0VGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGVuYWJsZWQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmgKaW5kZXggYmI2MTFjN2I3ODU2OGM3NDQ5YmMwN2ZkZTU4YzI2M2E5ZTQzOWMxMS4uNTFk
OTMyM2E0MDg4MjZlNTQxYTlkMzNmMDA1MTlkYTljYTJlYTU0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTEzNyw2ICsxMzcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGJvb2wp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChib29sKTsKIAogcHJpdmF0ZToKICAgICBX
ZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAppbmRleCA4MGExZDk2OGY3ZGM4NjJkZjlhYjFlNGZlMjUzNzI2MTA4
NmExMzBkLi45YTA3ZGFmMzMyZGQ0ODBjN2U2YzEzZTlhYjdhYzI4YmI0NmJiYTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0zMTY3LDYgKzMxNjcs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiAKICAgICAgICAgY2NTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdl
KCktPnNldHRpbmdzKCktPnBlclRpbGVEcmF3aW5nRW5hYmxlZCgpOwogICAgICAgICBjY1NldHRp
bmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3YXBF
bmFibGVkKCk7CisgICAgICAgIGNjU2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0g
cGFnZSgpLT5zZXR0aW5ncygpLT50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKIAogICAgICAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6
Y3JlYXRlKFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1
ZGU4NjhhMmYzYTI1YWIwMzAyMGVkMjVjMWQwZWM0OTBhLi5lMTRlZjliYzA5NzFhMTFlMjE0YjMx
NGQ3NTgyOTE1ZWNjNTZkMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0K
LSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25U
ZXN0Q29tbW9uLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2
ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVy
biAxOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJl
dHVybiAwOyB9Ci19OworbmFtZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMCwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0
aW9ucyhpdGVyYXRpb25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAt
MTY0LDQgKzE2MCw0IEBAIFRFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQog
ICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUwNjE1NzM0
MThhMDkwMWI1NTgxNjljZTAxNmNjMzhkOTAzODFlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcApAQCAtMCww
ICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
CisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OkZh
a2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkKK3sKK30KKworRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6
On5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpCit7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6
Q0NBbmltYXRpb25DdXJ2ZT4gRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKTsKK30K
KworRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJs
ZSBkdXJhdGlvbikKKyAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCit7Cit9CisKK0Zha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKQoreworfQorCitXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFs
dWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Cit9CisKK1Bhc3NPd25Q
dHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmNs
b25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFu
c2l0aW9uKCp0aGlzKSk7Cit9CisKKworRmFrZUZsb2F0VHJhbnNpdGlvbjo6RmFrZUZsb2F0VHJh
bnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQorICAgIDogbV9k
dXJhdGlvbihkdXJhdGlvbikKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykKK3sK
K30KKworRmFrZUZsb2F0VHJhbnNpdGlvbjo6fkZha2VGbG9hdFRyYW5zaXRpb24oKQoreworfQor
CitmbG9hdCBGYWtlRmxvYXRUcmFuc2l0aW9uOjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QK
K3sKKyAgICB0aW1lIC89IG1fZHVyYXRpb247CisgICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAg
dGltZSA9IDE7CisgICAgcmV0dXJuICgxIC0gdGltZSkgKiBtX2Zyb20gKyB0aW1lICogbV90bzsK
K30KKworRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6OkZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKKyAgICA6IG1fb3BhY2l0eSgwKQoreworfQor
CitGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKK3sKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpD
Q0FuaW1hdGlvbkN1cnZlPiBGYWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7Cit9CisK
K3ZvaWQgYWRkT3BhY2l0eVRyYW5zaXRpb24oV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSYgbGF5ZXIs
IGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KQor
eworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5
T3BhY2l0eSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkKKyAgICAgICAgdmFsdWVzLmluc2VydChu
ZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCBzdGFydE9wYWNpdHkpKTsKKyAgICB2YWx1ZXMuaW5z
ZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCBlbmRPcGFjaXR5KSk7CisKKyAg
ICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAg
IGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMSk7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisKKyAg
ICBsYXllci5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAs
IDAsIDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXRUZXN0cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWY5NjRlNDQyZWRjYzRlZDZmMDU3OTZmMDZjMThhNzhmZjBhZWY5YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9u
LmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25U
ZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKworI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdFRlc3Rz
IHsKKworY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NG
bG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRBbmltYXRpb25DdXJ2
ZSgpOworICAgIHZpcnR1YWwgfkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICB2aXJ0
dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGZs
b2F0IGdldFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKK307
CisKK2NsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIFdlYkNvcmU6OkNDVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKGRvdWJsZSBkdXJhdGlvbik7CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oKTsKKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
dXJhdGlvbjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0
VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKKworICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9uOworfTsKKworY2xhc3MgRmFr
ZUZsb2F0VHJhbnNpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUg
eworcHVibGljOgorICAgIEZha2VGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uLCBmbG9h
dCBmcm9tLCBmbG9hdCB0byk7CisgICAgdmlydHVhbCB+RmFrZUZsb2F0VHJhbnNpdGlvbigpOwor
CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9u
OyB9CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zy
b207CisgICAgZmxvYXQgbV90bzsKK307CisKK2NsYXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCB7CitwdWJsaWM6CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbENsaWVudCgpOworCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9
CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkg
PSBvcGFjaXR5OyB9CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9
CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9vcGFjaXR5OworICAgIFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIFdlYkNvcmU6OkludFNpemUgbV9ib3VuZHM7
Cit9OworCit2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFdlYkNvcmU6OkxheWVyQ2hyb21pdW0m
LCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSk7
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvblRl
c2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCmluZGV4IDNk
NTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTViMGY1M2IuLmUxYWVjY2M1MzlhNWQ1MWRm
ZjE4YTJiZTdjNDJlZWJhMTQ1N2VmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LmNwcApAQCAtMjQsOTIgKzI0LDM5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2lu
Y2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLQorI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKLWNs
YXNzIEZha2VDb250cm9sbGVyQ2xpZW50IDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQoKSA6IG1f
b3BhY2l0eSgwKSB7IH0KLSAgICB2aXJ0dWFsIH5GYWtlQ29udHJvbGxlckNsaWVudCgpIHsgfQot
Ci0gICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkg
PSBvcGFjaXR5OyB9Ci0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJv
bGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRy
b2xsZXIpCi0gICAgewotICAgICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9s
bGVyKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Kj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQot
Ci1wcml2YXRlOgotICAgIGZsb2F0IG1fb3BhY2l0eTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3RyYW5zZm9ybTsKLSAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Kj4gbV9hY3RpdmVDb250cm9sbGVyczsKLX07Ci0KLWNsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uIDogcHVibGljIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgewotcHVibGljOgotICAgIEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0
aW9uKSB7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUoZG91
YmxlIHRpbWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9u
cygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLX07Ci0KLWNs
YXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsK
LXB1YmxpYzoKLSAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQg
ZnJvbSwgZmxvYXQgdG8pCi0gICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAg
LCBtX2Zyb20oZnJvbSkKLSAgICAgICAgLCBtX3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAg
ICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAg
ICAgdGltZSAvPSBtX2R1cmF0aW9uOwotICAgICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAg
ICAgdGltZSA9IDE7Ci0gICAgICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAq
IG1fdG87Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZs
b2F0IG1fZnJvbTsKLSAgICBmbG9hdCBtX3RvOwotfTsKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+
IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0
eSkKK3sKKyAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgMCwgaWQs
IHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJv
bSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogewotICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFk
b3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVs
ZWFzZSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRz
KTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTE3LDIwICs2NCwyMSBA
QCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0
aW9uKQogLy8gVGVzdHMgdGhhdCB0d28gcXVldWVkIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoZSBz
YW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1ZW5jZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRv
cHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxl
ci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwg
KmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTM4LDIyICs4NiwyMyBAQCBURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQogLy8g
VGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4K
IFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogewot
ICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcikp
OworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFkZChj
cmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogCi0g
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAg
dG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ss
IDApOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgorICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMC41LCAqZXZlbnRzKTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4K
ICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAg
RVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41LCAqZXZlbnRzKTsKICAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTYxLDIzICsxMTAsMjQgQEAgVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCiAvLyBUZXN0cyBzY2hl
ZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aGVuIG9ubHkgb25lIHByb3Bl
cnR5IGlzIGZyZWUuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNj
aGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQogewotICAgIEZha2VDb250cm9s
bGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZl
bnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0p
KTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRl
KDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRl
ZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkp
OwogICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQg
dGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1
bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKIH0KQEAgLTE4NywyOSArMTM3LDMwIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2Nr
ZWQpCiAvLyBmb3IgYm90aCB0byBmaW5pc2gpLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiB7Ci0gICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Cisg
ICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3Jt
KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAs
IDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8v
IEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCi0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAgICAvLyBUaGUgb3BhY2l0eSBhbmltYXRpb24gc2hv
dWxkIGhhdmUgZmluaXNoZWQgYXQgdGltZSAxLCBidXQgdGhlIGdyb3VwCiAgICAgLy8gb2YgYW5p
bWF0aW9ucyB3aXRoIGlkIDEgZG9uJ3QgZmluaXNoIHVudGlsIHRpbWUgMiBiZWNhdXNlIG9mIHRo
ZSBsZW5ndGgKICAgICAvLyBvZiB0aGUgdHJhbnNmb3JtIGFuaW1hdGlvbi4KLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAg
ICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0Lgog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBF
WFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9w
YWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIgYW5kIHNob3VsZCBiZQogICAg
IC8vIGRvbmUgYnkgdGltZSAzCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5v
cGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiB9CkBAIC0yMTcsMjIgKzE2OCwyMyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKIC8vIFRl
c3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCiBURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQog
ewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15Owog
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9B
ZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAw
KTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0Fk
ZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
LSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwg
KmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMjQwLDI4ICsxOTIsMjkgQEAgVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKIC8v
IFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhh
dCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgogVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmlu
Z0FuaW1hdGlvbikKIHsKLSAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRp
b25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBj
b250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0
ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZs
b2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmlt
YXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0
YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAogICAg
IC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHku
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBF
WFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41
ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9w
YWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKIH0KQEAgLTI3MCwzNCArMjIzLDM1IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAv
LyBhbmQgdGhlcmUgaXMgeWV0IGFub3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRl
ci4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5p
bWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCiB7Ci0gICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Cisg
ICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41
ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29u
dHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAwLjc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRp
YXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVu
dHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
ICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoNCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwog
ICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBA
IC0zMDUsNjQgKzI1OSw2NiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbQogLy8gVGVzdCB0aGF0
IGEgbG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZvciB0aGUgY29ycmVjdCBudW1iZXIgb2Yg
aXRlcmF0aW9ucy4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJp
dmlhbExvb3BpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3du
UHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0Fj
dGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKICAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKICAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuMjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEu
NzUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUsICpl
dmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgyLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUsICpldmVudHMp
OwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwogICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBKdXN0IGJlIGV4dHJhIHN1cmUuCi0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVu
dHMpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOwogfQogCiAvLyBUZXN0IHRo
YXQgYW4gaW5maW5pdGVseSBsb29waW5nIGFuaW1hdGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBh
Ym9ydGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0
ZUxvb3BpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGll
bnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29u
dHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUo
JmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEp
OwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVt
bXkub3BhY2l0eSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1LCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3
Mzc0MTgyNC43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1LCAqZXZl
bnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogCkBAIC0zNzUsODAgKzMz
MSw2NiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRl
TG9vcGluZykKIC8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVj
dGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3Vt
ZSkKIHsKLSAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NBbmlt
YXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1t
eTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVy
KAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkp
KTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgw
LjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0
QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNv
bnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwLjVmKTsKIAotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpSdW5uaW5nLCAxMDI0KTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC4yNSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkub3BhY2l0eSgpKTsKIH0KIAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQogewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50
IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0
UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAg
ICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5z
Zm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwg
MiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigx
KSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+
YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRy
b2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
IAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
ICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIDEpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAq
ZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVY
UEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogfQogCi0vLyBUZXN0cyB0aGF0IGFkZGluZyBh
biBhbmltYXRpb24gdG8gdGhlIGNvbnRyb2xsZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxi
YWNrIG9uIHRoZSBjb250cm9sbGVyIGNsaWVudAotLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRo
ZSBjb250cm9sbGVyIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBjb250cm9sbGVyKS4KLVRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgRGlkQWN0aXZhdGUpCi17Ci0gICAgRmFr
ZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1t
eS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0KLSAgICBFWFBFQ1Rf
RVEoc2l6ZV90KDEpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7Ci0gICAgRVhQ
RUNUX0VRKGNvbnRyb2xsZXIuZ2V0KCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOwot
fQotCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZlY2MxZmZhODJlOGU1YjYyOWQ2ZWMxYmYwNjhiZGNhYWQ1Nzg2NjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdC5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKKyNpbmNsdWRlIDxnbW9jay9n
bW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0
czsKKworbmFtZXNwYWNlIHsKKworUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQoreworICAgIHJl
dHVybiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCAwLCBpZCwgcHJvcGVydHkpOwor
fQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY05ld0FuaW1hdGlv
bikKK3sKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1w
bCgKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAor
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworCisgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlvbnMo
KS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisK
KyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0
KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0
YXRlKCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0Fu
aW1hdGlvblByb3BlcnRpZXMpCit7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bD4gY29udHJvbGxlckltcGwoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6Y3JlYXRlKCZkdW1teSkpOworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0
ZSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0
aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5h
Y3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNv
bnRyb2xsZXJJbXBsLmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBF
WFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHks
IGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFB1c2ggYW4gYW5pbWF0aW9uIHByb3Bl
cnR5IGNoYW5nZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBub3QgY2F1c2UgYW4gYW5pbWF0
aW9uIHRvIGJlIGFkZGVkKS4KKyAgICBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbigwLCAwKTsK
KyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0
KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6UGF1c2VkLCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKK3sKKyAg
ICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKKyAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbCgKKyAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9u
Q3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250
cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworCisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlv
bjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2
ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOwor
CisgICAgY29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKDApOworCisgICAgLy8gQWJvcnQgYW4g
YW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGNvbnRyb2xsZXItPnN5bmNocm9u
aXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3lu
Y0NvbXBsZXRlZEFuaW1hdGlvbikKK3sKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbENsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsPiBjb250cm9sbGVySW1wbCgKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3Jl
YXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmlt
YXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXIt
PmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMo
Y29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0
eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmlt
YXRpb24gdW50aWwgaXQgaXMgZmluaXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRo
cmVhZCdzIGFuaW1hdGlvbiBzaG91bGQgYmUgY2xlYXJlZC4KKyAgICBPd25QdHI8Q0NBbmltYXRp
b25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0
b3IpKTsKKyAgICBjb250cm9sbGVySW1wbC0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKKyAgICBjb250
cm9sbGVySW1wbC0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKKworICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgRVhQRUNUX0VRKHNpemVfdCgxKSwgY29udHJvbGxlci0+YWN0aXZlQW5pbWF0
aW9ucygpLnNpemUoKSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMo
Y29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgY29udHJv
bGxlci0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwCmluZGV4IDgyMDczM2I0NzIwOGM2ZWNmZjE3Yzg4YTI1MmIzZGQ3OGQ2ZmRk
ZDEuLjdlZTIzZTczMzBkNjU2MDg0ZmJiMzFiOTcxZmE2MTE1ZWZiMTJiYzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2Fw
QnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVl
c3RDb21taXQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNU
b01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4pIHsgfQogCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vy
c2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMTYzNzFhMWFlYWVl
MGVlN2NiNWEyOTU2MWFkOGNlZmYxMjAzMjA0OS4uZjk4ODNiMGIxMTQ4ZjI4MjIyNTY4ZjA1YWEz
MzFmOWI2MWUyYjE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5o
IgogI2luY2x1ZGUgIkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMu
aCIKQEAgLTM1LDYgKzM2LDggQEAKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1
ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oIgpAQCAt
NTAsNiArNTMsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCiBuYW1lc3BhY2UgewpAQCAtNjAsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJ
bXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVy
VHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUo
Y29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0
aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KSB7IH0KQEAgLTkxLDYgKzk2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV90ZXN0SG9va3MtPmRy
YXdMYXllcnNPbkNDVGhyZWFkKHRoaXMpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQorICAgIHsKKyAg
ICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZU1z
KTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFuaW1hdGVMYXllcnModGhpcyk7CisgICAgfQorCiBw
cml2YXRlOgogICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbChUZXN0SG9va3MqIHRlc3RIb29rcywg
Y29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNs
aWVudCkKICAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKHNldHRpbmdzLCBjbGllbnQpCkBA
IC0xMzIsNiArMTQ0LDI1IEBAIHByaXZhdGU6CiAgICAgVGVzdEhvb2tzKiBtX3Rlc3RIb29rczsK
IH07CiAKKy8vIEFkYXB0cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciBmb3IgdGVzdC4gQWRk
cyBhIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIGFkZEFuaW1hdGlvbiB0aGF0IGluc2VydHMgYSBm
bG9hdCBhbmltYXRpb24uCisvLyBGSVhNRTogb25jZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6YWRkQW5pbWF0aW9uIGlzIGltcGxlbWVudGVkLCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBiZSBj
YWxsZWQgZGlyZWN0bHkgYW5kIHRoaXMKKy8vIGNsYXNzIGNhbiBiZSByZW1vdmVkLgorY2xhc3Mg
TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25z
dCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBpbnQgYW5pbWF0aW9uSWQsIGlu
dCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKKyAgICB7CisgICAgICAgIGRvdWJsZSBkdXJh
dGlvbiA9IDA7CisgICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbihkdXJhdGlvbiwg
MSwgMCkpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwogY2xhc3MgQ29tcG9zaXRvckZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9z
aXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tp
bmc+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzKQpAQCAtMjI2LDcgKzI1Nyw5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkKKyAgICB7CisgICAgfQogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyog
dGVzdEhvb2tzKSA6IG1fdGVzdEhvb2tzKHRlc3RIb29rcykgeyB9CkBAIC0yNTYsNiArMjg5LDEx
IEBAIHB1YmxpYzoKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0
OjpkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZSwgdGhpcyk7CiAgICAgfQogCisgICAgdm9pZCBwb3N0
QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKKyAgICB7CisgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hBZGRBbmltYXRpb24sIHRoaXMpOworICAg
IH0KKwogICAgIHZvaWQgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCkKICAgICB7CiAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRO
ZWVkc0NvbW1pdCwgdGhpcyk7CkBAIC0yNzEsNyArMzA5LDYgQEAgcHVibGljOgogICAgICAgICBj
YWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmlt
YXRlQW5kQ29tbWl0LCB0aGlzKTsKICAgICB9CiAKLQogICAgIHZvaWQgcG9zdFNldFZpc2libGVU
b01haW5UaHJlYWQoYm9vbCB2aXNpYmxlKQogICAgIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVh
ZCh2aXNpYmxlID8gQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRWaXNpYmxlIDogQ0NM
YXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRJbnZpc2libGUsIHRoaXMpOwpAQCAtMzE0LDYg
KzM1MSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5z
ZXROZWVkc0FuaW1hdGUoKTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFkZEFu
aW1hdGlvbih2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRy
ZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgQVNTRVJUKHRlc3QpOworICAgICAgaWYgKHRlc3Qt
Pm1fbGF5ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQor
ICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCktPmFkZEFuaW1hdGlv
bihLZXlmcmFtZVZhbHVlTGlzdChBbmltYXRlZFByb3BlcnR5T3BhY2l0eSksIEludFNpemUoKSwg
MCwgMCwgMCwgMC4wKTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5lZWRz
QW5pbWF0ZUFuZENvbW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CkBAIC00NjQsNiArNTEwLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpk
b0JlZ2luVGVzdCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNy
ZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBB
U1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RMYXllci0+c2V0TGF5ZXJUcmVl
SG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIHJvb3RMYXllci0+c2V0TGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyKE1vY2tMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsK
IAogICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKICAgICBiZWdpblRlc3QoKTsKQEAgLTc5MCw2ICs4
MzcsNDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXROZWVkc0FuaW1hdGVJbnNpZGVB
bmltYXRpb25DYWxsYmFjaywgcnVuTXVsdGlUaHJlYWQKICAgICBydW5UZXN0VGhyZWFkZWQoKTsK
IH0KIAorLy8gQWRkIGEgbGF5ZXIgYW5pbWF0aW9uIGFuZCBjb25maXJtIHRoYXQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyBkb2VzIGdldAorLy8gY2FsbGVkIGFuZCBjb250aW51
ZXMgdG8gZ2V0IGNhbGxlZC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24g
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgeworcHVibGljOgorICAgIEND
TGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24oKQorICAgICAgICA6IG1fbnVtQW5pbWF0ZXMo
MCkKKyAgICAgICAgLCBtX2xheWVyVHJlZUhvc3RJbXBsKDApCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgcG9zdEFkZEFuaW1hdGlv
blRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJz
KENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBsKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX251bUFuaW1hdGVzKSB7CisgICAgICAgICAgICAvLyBUaGUgYW5pbWF0aW9uIGhhZCB6
ZXJvIGR1cmF0aW9uIHNvIGxheWVyVHJlZUhvc3RJbXBsIHNob3VsZCBubworICAgICAgICAgICAg
Ly8gbG9uZ2VyIG5lZWQgdG8gYW5pbWF0ZSBpdHMgbGF5ZXJzLgorICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKGxheWVyVHJlZUhvc3RJbXBsLT5uZWVkc0FuaW1hdGVMYXllcnMoKSk7CisgICAgICAg
ICAgICBtX251bUFuaW1hdGVzKys7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQor
ICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVtQW5pbWF0ZXM7CisgICAgQ0NM
YXllclRyZWVIb3N0SW1wbCogbV9sYXllclRyZWVIb3N0SW1wbDsKK307CisKK1RFU1RfRihDQ0xh
eWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uLCBydW5NdWx0aVRocmVhZCkKK3sKKyAgICBydW5U
ZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBs
ZSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CiBwdWJsaWM6CiAgICAg
Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDE1NTdhN2Q5
MzIyY2M2YmUyMDZiZjUwYjAwYzBmNDcwNjNjNTQ3OGIuLmI4N2UxYTg4OTlhODhkMDBiMWJmM2Uy
MWRmNWNlNTc1YjM4NjU0NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0yNiwxMyArMjYsMTYgQEAKIAogI2lu
Y2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENv
bW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIK
ICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAogbmFtZXNwYWNlIHsKIApAQCAtOTEsNiArOTQs
MzAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8aW50PiogbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0
OwogfTsKIAorY2xhc3MgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAgfQor
CisgICAgY29uc3QgYm9vbCBzeW5jaHJvbml6ZWRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9zeW5jaHJvbml6ZWRBbmltYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcigpCisgICAgICAgIDogbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zKGZh
bHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRp
b25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlckltcGwpCisgICAg
eworICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVBbmltYXRp
b25zKGNvbnRyb2xsZXJJbXBsKTsKKyAgICAgICAgbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG1fc3luY2hyb25pemVkQW5pbWF0aW9uczsKK307CisK
IHZvaWQgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5
ZXJJbXBsKiBjY0xheWVyKQogewogICAgIEFTU0VSVF9UUlVFKGxheWVyKTsKQEAgLTMwNyw1ICsz
MzQsMTkgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVw
bGljYU1hc2tMYXllcnMpCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIH0KIAorVEVTVChUcmVlU3luY2hyb25p
emVyVGVzdCwgc3luY2hyb25pemVBbmltYXRpb25zKQoreworICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICBsYXllclRyZWVSb290LT5zZXRMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkp
OworCisgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PEZha2VMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIqPihsYXllclRyZWVSb290LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSktPnN5bmNo
cm9uaXplZEFuaW1hdGlvbnMoKSk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgMCk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkp
OworCisgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcio+KGxheWVyVHJlZVJvb3QtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKS0+c3luY2hy
b25pemVkQW5pbWF0aW9ucygpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128231</attachid>
            <date>2012-02-22 09:43:23 -0800</date>
            <delta_ts>2012-02-22 13:36:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120222124322.patch</filename>
            <type>text/plain</type>
            <size>133605</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2JkMGI0MjE5NWE2MzU3
MTZiYzBkOWY4YmU5NmI3OGM1ZTg2YmQxMS4uYTFlZTZmM2M1Y2JmNzc0NjU0ODU0YWQwNDIwODc4
NzA2MmNmNWYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MCBAQAorMjAxMi0wMi0yMiAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0
aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNldHRpbmdzOjpzZXRUaHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2V0dGluZ3M6OnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCk6CisgICAgICAgIChT
ZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKHN0ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9NZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVyUHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNo
cm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmg6CisgICAgICAgIChHcmFwaGljc0xh
eWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphZGRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYXVz
ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW1vdmVBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpudW1DaGlsZHJlbik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6fkNDQWN0aXZlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1dhaXRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzUnVubmluZ09ySGFzUnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjbG9uZUZvckltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnN5bmNocm9uaXplUHJvcGVy
dGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uaDoKKyAgICAgICAgKENDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpBbmltYXRpb25TaWduYXR1cmU6OkFuaW1hdGlvblNpZ25h
dHVyZSk6CisgICAgICAgIChBbmltYXRpb25TaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NBY3RpdmVBbmltYXRpb246OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0
aW9uOjpncm91cCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c2lnbmF0
dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmg6CisgICAgICAgIChDQ0FuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKENDVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uRXZlbnRzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25TdGFydGVkRXZlbnQ6OkNDQW5p
bWF0aW9uU3RhcnRlZEV2ZW50KToKKyAgICAgICAgKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6On5DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzeW5j
aHJvbml6ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlbW92ZUNvbXBsZXRlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnB1c2hOZXdBbmltYXRpb25zVG9JbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVB
bmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoQW5pbWF0aW9uUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6fkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hl
ZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmg6CisgICAgICAgIChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NM
YXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmg6CisgICAgICAgIChDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om9wYWNpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVySW1wbDo6Ym91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1hdGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxl
T25JbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGlu
Z3MpOgorICAgICAgICAoQ0NTZXR0aW5ncyk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRy
ZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmlt
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXll
cnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjphbmltYXRlUGFnZVNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpuZWVkc0FuaW1hdGVMYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNBbmltYXRl
TGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6
OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eSk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQ6OkRlYnVnU2NvcGVkU2V0TWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQ6On5EZWJ1
Z1Njb3BlZFNldE1haW5UaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldEFuaW1hdGlv
bkV2ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5oOgorICAgICAgICAoQ0NUaHJlYWRQcm94eSk6CisKIDIwMTItMDItMjEgIFZzZXZv
bG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogW0luc3BlY3RvckluZGV4ZWREQl0gU2hvdyBJbmRleGVkREIgdmlld3Mgb24gc2VsZWN0aW9u
IEluZGV4ZWREQiBlbGVtZW50cyBpbiByZXNvdXJjZXMgcGFuZWwuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IGRmNDIyZmIxNjgwMjliZjdiNzkyM2ZkYTFkODI5ZWU0Njc5MWY2ODUuLmYy
Yzg3ZDRlZjVhMmUxYTk0OGFjOTRjOTI1ZTdjN2VlMjI4NDE2NWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIwMTItMDItMjIgIElhbiBWb2xsaWNrICA8dm9s
bGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBQbHVtYiBmcm9tIEdyYXBo
aWNzTGF5ZXIgdG8gdGhlIGNjIHRocmVhZCBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4NzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBKYW1lcyBSb2JpbnNvbgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICog
cHVibGljL1dlYlNldHRpbmdzLmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYkxheWVy
VHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6
OlNldHRpbmdzKToKKyAgICAgICAgKFNldHRpbmdzKToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJU
cmVlVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdz
OjpvcGVyYXRvciBDQ1NldHRpbmdzKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRUaHJlYWRlZEFuaW1hdGlv
bkVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJ
bXBsLmg6CisgICAgICAgIChXZWJTZXR0aW5nc0ltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAqIHRlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0VGVzdHMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZl
OjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6RmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246OmNsb25lKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRU
cmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlRmxvYXRUcmFuc2l0aW9uOjp+RmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjpGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFr
ZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6On5GYWtlTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0VHJh
bnNpdGlvbjo6Y2xvbmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmFkZE9wYWNpdHlUcmFuc2l0
aW9uKToKKyAgICAgICAgKiB0ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKEZha2VG
bG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlOjpnZXRWYWx1ZSk6CisgICAgICAgIChGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0
aW9uKToKKyAgICAgICAgKEZha2VGbG9hdFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkZha2VGbG9hdFRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKEZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6aWQpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjpvcGFjaXR5KToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6OnNldFRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQ6OmJvdW5kcyk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Y3JlYXRlQWN0aXZlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdFRl
c3RzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6
OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpUZXN0SG9va3M6
OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAg
ICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAg
KFdURik6CisgICAgICAgIChNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdU
Rjo6TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAg
KFdURjo6TW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6cG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVh
ZCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXll
clRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hBZGRBbmltYXRpb24pOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RU
ZXN0QWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFu
aW1hdGlvbjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbik6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmJlZ2luVGVzdCk6CisgICAgICAgIChX
VEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmFuaW1hdGVMYXllcnMpOgorICAg
ICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjphZnRlclRlc3QpOgor
ICAgICAgICAoV1RGOjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcDoKKyAgICAgICAgKEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hy
b25pemVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpU
RVNUKToKKwogMjAxMi0wMi0yMiAgSGFvIFpoZW5nICA8emhlbmdoYW9AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtjaHJvbWl1bV0gQnVpbGQgV2ViS2l0IHdpdGggTUVESUFfU1RSRUFNIGRpc2Fi
bGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU4Y2FhYTFjOGNmNjBmYTYwYjA2YmMxZTE0M2JiNWVh
OTZhYmEyNzEuLmM0NWM4ZDg4OTMyMjA4MTNkZDRhMjI5Y2QzZjRkZWM2MWMzOWI5NWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTMyNDQsNiArMzI0NCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRp
b25SZXN1bHRzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCkBAIC0zMjYxLDYgKzMy
NjIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDY0ZjhlMDU4NTQ0ZjgzNjA4ZTFh
MjY2MjM5MTE1MDVmMGRkMzY5NGIuLjkzN2Q5OTQyNTJiM2EyZGM3NmQyYjdjMWM2MTUxNTM2MmE2
ZTllMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC0yNDQsNiArMjQ0LDcgQEAgU2V0
dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICAsIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1f
dGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGZhbHNlKQogICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHlUaW1lcih0aGlzLCAmU2V0dGluZ3M6OmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseVRp
bWVyRmlyZWQpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHll
dCwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5o
CmluZGV4IGYxOWI0YzExZmYxNWQ2Y2NlNzI2ODJmZDU3ZDljOGY1YmM5ODM1ZDkuLjBiZTdlYzA4
ZGRkMDNmZThkMjZjYmE1MjI5OTY1ZjE0NGZiYWRiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgK
QEAgLTUzNiw2ICs1MzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNU
b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEVt
dWxhdGlvbkVuYWJsZWQ7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgc2V0VGhyZWFkZWRBbmlt
YXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KKyAgICAgICAgYm9vbCB0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX3RocmVhZGVkQW5pbWF0aW9uRW5hYmxlZDsgfQorCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgU2V0dGluZ3MoUGFnZSopOwogCkBAIC02ODYsNiArNjg5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAgIGJvb2wgbV90b3Vj
aEV2ZW50RW11bGF0aW9uRW5hYmxlZCA6IDE7CiAjZW5kaWYKKyAgICAgICAgYm9vbCBtX3RocmVh
ZGVkQW5pbWF0aW9uRW5hYmxlZCA6IDE7CiAKICAgICAgICAgVGltZXI8U2V0dGluZ3M+IG1fbG9h
ZHNJbWFnZXNBdXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQgbG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDUxZjIwNDNmYzU0YjQ1ZGNhYTQ2NDM0OGM5NDc3Zjg3
YTQ2MjRmYTUuLmNkZWNmNTkxNzM5ODY3MmU1YmRhZGI0YjExZDdlYzMyOTVjYmVkNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNjEsNiArNjEsMTAgQEAKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIHsKK3N0YXRpYyBpbnQgc19uZXh0R3Jv
dXBJZCA9IDA7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGlj
c0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50
KQpAQCAtMTI0LDcgKzEyOCw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGls
ZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQogewog
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotICAgIGlmICghbV9pblNl
dENoaWxkcmVuKSAKKyAgICBpZiAoIW1faW5TZXRDaGlsZHJlbikKICAgICAgICAgdXBkYXRlQ2hp
bGRMaXN0KCk7CiB9CiAKQEAgLTM4Miw2ICszODYsMzEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikK
ICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9t
aXVtOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3Qg
SW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIG1fbGF5
ZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9u
TmFtZVRvSWQoYW5pbWF0aW9uTmFtZSksIHNfbmV4dEdyb3VwSWQrKywgdGltZU9mZnNldCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXItPnBh
dXNlQW5pbWF0aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1lT2Zm
c2V0KTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAgbV9sYXllci0+cmVtb3ZlQW5pbWF0
aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAg
IG1fbGF5ZXItPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5p
bWF0aW9ucygpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNU
b01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2Vk
ID0gZmFsc2U7CkBAIC0zOTYsMTIgKzQyNSwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hh
bmdlZCA9IHRydWU7Ci0gIAorCiAgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVy
IHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlQ2hpbGRMaXN0LgogICAgICAgICAgICAgbV9jb250
ZW50c0xheWVyID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRyZW5D
aGFuZ2VkKQogICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KQEAgLTU1MCw3ICs1NzksNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAg
ICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwog
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+
c2V0VHJhbnNmb3JtKGlkZW50aXR5KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBv
bGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9w
YWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4KICAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0
eSgxKTsKIApAQCAtNjg5LDYgKzcxOCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlYwogICAg
IHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQogCitpbnQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZChjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbk5hbWUpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFpbnRhaW4gYSBuYW1lIHRv
IGlkIG1hcHBpbmcgaW4gdGhpcyBjbGFzcy4KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBkYmYxNWU1MWRiMTBiN2JkNjUx
NTZkZThlN2Q4MDE5M2ZmODdiMGQzLi5lYjMxNDZiYmQyYjUzMDg5MmI0YmFhZmMzYmFkYjMzNTRl
NDQ3MjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTUsNiArOTUs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZv
cm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3Jt
TGF5ZXIqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25z
dCBTdHJpbmcmLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOwor
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKICAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMTMyLDYgKzEzOCw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogICAg
IGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdDsKIAorICAgIGludCBtYXBBbmltYXRpb25OYW1l
VG9JZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOworCiAgICAgU3RyaW5nIG1fbmFtZUJh
c2U7CiAKICAgICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCmluZGV4IGRmMjU5OGZmNzFiMDg1OTg2NTY1YWIxNWU2MzNlYjgyN2M5MjFk
OWQuLjUzM2QxOWM1YjA3MzNlMDZiNzRhYzQxYzhhZGFjNmJlZDY1ZWEzZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpZiBVU0UoU0tJQSkKQEAgLTU5LDYgKzYw
LDcgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxh
eShmYWxzZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVu
dCgwKQorICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9h
bmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDAp
CkBAIC05Miw2ICs5NCw0NyBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAg
cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6
ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3Vw
SWQsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFt
X2xheWVyVHJlZUhvc3QtPnNldHRpbmdzKCkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFu
aW1hdGlvbkNvbnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlv
biwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1h
dGlvbikKKyAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRp
b247Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlv
bklkLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci0+cGF1c2VBbmltYXRpb24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRz
Q29tbWl0KCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBh
bmltYXRpb25JZCkKK3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5p
bWF0aW9uKGFuaW1hdGlvbklkKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExh
eWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXRO
ZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMo
KQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7
CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
cj4gbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250
cm9sbGVyID0gbGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7
Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChib29s
IGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50
ID0gaXNOb25Db21wb3NpdGVkQ29udGVudDsKQEAgLTQ0MSw2ICs0ODQsOCBAQCB2b2lkIExheWVy
Q2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGlmIChy
ZXBsaWNhTGF5ZXIoKSkKICAgICAgICAgcmVwbGljYUxheWVyKCktPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXItPnJlcGxpY2FMYXllcigpKTsKIAorICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVy
LT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMobGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigp
KTsKKwogICAgIC8vIFJlc2V0IGFueSBzdGF0ZSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIGZvciB0
aGUgbmV4dCB1cGRhdGUuCiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKaW5kZXggZmYyZTdkMjg2MjYyMmZhZDJjMDY5MzhkNmY1MjU2OTE0MGY4ODNm
YS4uOTJmYjAxM2ZiYjdmYTc1OTYyN2Q1OGJmNTFmMzBiM2NkYmJmZmI3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaApAQCAtNTIsNiArNTIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwpAQCAtNjEsNyArNjIsNiBA
QCBjbGFzcyBSZWdpb247CiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gU3Bl
Y2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgogY2xhc3Mg
TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKLSAgICBm
cmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZSgpOwogCkBAIC0yMTUsNyArMjE1LDIxIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jlc2Vy
dmVUZXh0dXJlcykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0
dXJlczsgfQogICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4g
bV9hbHdheXNSZXNlcnZlVGV4dHVyZXM7IH0KIAorICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0
aW9uKiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOwor
ICAgIHZvaWQgcGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNl
dCk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKKworICAgIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0
aW9ucygpOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGxheWVyQW5pbWF0aW9u
Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9
CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcj4pOworCiBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIEND
TGF5ZXJJbXBsOworICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CisgICAgZnJp
ZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CisKICAgICBMYXllckNocm9taXVtKCk7CiAKICAg
ICBib29sIGlzUGFpbnRlZEF4aXNBbGlnbmVkSW5TY3JlZW4oKSBjb25zdDsKQEAgLTIzMyw4ICsy
NDcsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5
ZXI7CiAKLSAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xh
c3MgQ0NMYXllckltcGw7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBj
b3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGlu
dCBtX2xheWVySWQ7CkBAIC0yNDMsMTAgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQ
YXJlbnQoTGF5ZXJDaHJvbWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1
bSopIGNvbnN0OwogCi0gICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVy
bnMgdGhlIGluZGV4IG9mIHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGlu
ZGV4T2ZDaGlsZChjb25zdCBMYXllckNocm9taXVtKik7CkBAIC0yNTksNiArMjY4LDggQEAgcHJp
dmF0ZToKIAogICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXI7CisKICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3Vu
ZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVjMGJlZmFhYTA1ODRmNmQyMjFjNDQ2
MjBlYS4uOWVmNWZlMjU2MmI2YjQzMDJkMTFkMmE5ZGFhZmQwYzMwYzMyOWY4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVB
bmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMzIsOSArMzIsMTUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFz
c093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJv
cGVydHkgdGFyZ2V0UHJvcGVydHkpCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUs
IGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUs
IGFuaW1hdGlvbklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSkpOworfQorCitDQ0FjdGl2ZUFu
aW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0
UHJvcGVydHkpCiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQotICAgICwgbV9ncm91cChn
cm91cCkKKyAgICAsIG1faWQoYW5pbWF0aW9uSWQpCisgICAgLCBtX2dyb3VwKGdyb3VwSWQpCiAg
ICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQogICAgICwgbV9ydW5TdGF0ZShX
YWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQogICAgICwgbV9pdGVyYXRpb25zKDEpCkBAIC00
NCw2ICs1MCwxMCBAQCBDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093
blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFu
aW1hdGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKCkKK3sKK30KKwogdm9pZCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6c2V0UnVuU3RhdGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSBub3cpCiB7CiAgICAg
aWYgKHJ1blN0YXRlID09IFJ1bm5pbmcgJiYgbV9ydW5TdGF0ZSA9PSBQYXVzZWQpCkBAIC02Myw2
ICs3MywyMSBAQCBib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc0ZpbmlzaGVkQXQoZG91YmxlIHRp
bWUpIGNvbnN0CiAgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0aW9uQ3VydmUtPmR1
cmF0aW9uKCkgPD0gdGltZSAtIHN0YXJ0VGltZSgpIC0gbV90b3RhbFBhdXNlZFRpbWU7CiB9CiAK
K2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzV2FpdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcnVuU3RhdGUgPT0gV2FpdGluZ0Zvck5leHRUaWNrCisgICAgICAgIHx8IG1fcnVuU3RhdGUg
PT0gV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eQorICAgICAgICB8fCBtX3J1blN0YXRlID09
IFdhaXRpbmdGb3JTdGFydFRpbWU7Cit9CisKK2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzUnVu
bmluZ09ySGFzUnVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBSdW5uaW5n
CisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gRmluaXNoZWQKKyAgICAgICAgfHwgbV9ydW5TdGF0
ZSA9PSBBYm9ydGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gUGF1c2VkOworfQorCiBkb3Vi
bGUgQ0NBY3RpdmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBu
b3cpIGNvbnN0CiB7CiAgICAgZG91YmxlIHRyaW1tZWQgPSBub3c7CkBAIC05NSw0ICsxMjAsMzYg
QEAgZG91YmxlIENDQWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihk
b3VibGUgbm93KSBjb25zdAogICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1fYW5pbWF0aW9uQ3Vy
dmUtPmR1cmF0aW9uKCkpOwogfQogCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3QKK3sKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlv
bihtX2FuaW1hdGlvbkN1cnZlLT5jbG9uZSgpLCBtX2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3Bl
cnR5KSkpOworICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKKyAgICB0b1Jl
dHVybi0+bV9pdGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIHRvUmV0dXJuLT5tX3N0YXJ0
VGltZSA9IG1fc3RhcnRUaW1lOworICAgIHRvUmV0dXJuLT5tX3BhdXNlVGltZSA9IG1fcGF1c2VU
aW1lOworICAgIHRvUmV0dXJuLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVzZWRUaW1l
OworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmlt
YXRpb246OnN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiogb3RoZXIpCit7
CisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBpbXBsIHRocmVhZCB0byBpbml0aWF0ZSBh
IHJ1biBzdGF0ZSBjaGFuZ2UuCisgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGFuaW1hdGlv
biB3YXMgd2FpdGluZyBmb3IgYSBmdXR1cmUgZXZlbnQgdG8gdGFrZQorICAgIC8vIHBsYWNlLCBh
bmQgdGhlIGV2ZW50IGhhcyBoYXBwZW5lZC4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50ICd0aGlzJyB0
bworICAgIC8vIGFzc3VtZSB0aGUgaW1wbCB0aHJlYWQncyBydW4gc3RhdGUgYW5kIHN0YXJ0IHRp
bWUuCisgICAgaWYgKGlzV2FpdGluZygpICYmIG90aGVyLT5pc1J1bm5pbmdPckhhc1J1bigpKSB7
CisgICAgICAgIG1fcnVuU3RhdGUgPSBvdGhlci0+bV9ydW5TdGF0ZTsKKyAgICAgICAgbV9zdGFy
dFRpbWUgPSBvdGhlci0+bV9zdGFydFRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3RoZXIt
Pm1fcnVuU3RhdGUgPSBtX3J1blN0YXRlOworICAgICAgICBvdGhlci0+bV9zdGFydFRpbWUgPSBt
X3N0YXJ0VGltZTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2UgaW4gc3RhdGUgcmVsYXRlZCB0byBp
dGVyYXRpb25zIGFuZCBwYXVzZSBpcyBhbHdheXMgaW5pdGlhdGVkIGZyb20KKyAgICAvLyB0aGUg
bWFpbiB0aHJlYWQsIHNvIGl0IGlzIHNhZmUgdG8gcHVzaCBwcm9wZXJ0aWVzIGluIHRoYXQgZGly
ZWN0aW9uLgorICAgIG90aGVyLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlvbnM7CisgICAgb3Ro
ZXItPm1fcGF1c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgb3RoZXItPm1fdG90YWxQYXVzZWRU
aW1lID0gbV90b3RhbFBhdXNlZFRpbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2VkMTJkNjU4ZDc2
ZDYwNGVlZTlmYmFkMGEzZDEuLmFkOWU4NGVlNzkzZGRjNzE3N2NlY2ZiZDAxZTk1YzE3OWY3ZDIy
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMjUsMjUgKzI1LDIwIEBA
CiAjaWZuZGVmIENDQWN0aXZlQW5pbWF0aW9uX2gKICNkZWZpbmUgQ0NBY3RpdmVBbmltYXRpb25f
aAogCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NBbmltYXRpb25DdXJ2
ZTsKLQogLy8gQSBDQ0FjdGl2ZUFuaW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSByZXF1
aXJlZCB0byBwbGF5IGEgQ0NBbmltYXRpb25DdXJ2ZS4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGFm
ZmVjdGVkIHByb3BlcnR5LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVkLCBldGMuKSwK
IC8vIGxvb3AgY291bnQsIGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0aW1lIHNwZW50
IHBhdXNlZC4KIGNsYXNzIENDQWN0aXZlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ0FjdGl2ZUFuaW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgLy8gQW5pbWF0aW9ucyB0aGF0
IG11c3QgYmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBz
YW1lIEdyb3VwSUQKLSAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8g
c3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwotICAgIC8vIG1h
eSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwg
YW5pbWF0aW9ucyBpbiB0aGUKLSAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4g
Tm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKLSAgICAvLyBw
cm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIGlu
dCBHcm91cElEOwotCiAgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0
aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawogICAgIC8v
IHdpbGwgc3RhcnQgdGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0
aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKICAgICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMg
c29vbiBhcyB0aGVpciB0YXJnZXQgcHJvcGVydHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0
aW9ucwpAQCAtNjgsMTQgKzYzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07
CiAKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NP
d25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q0FjdGl2ZUFuaW1hdGlvbihjdXJ2ZSwgZ3JvdXAsIHRhcmdldFByb3BlcnR5KSk7Ci0gICAgfQor
ICAgIHN0cnVjdCBBbmltYXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmltYXRpb25TaWduYXR1
cmUoaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgICAgICAg
ICAgOiBncm91cElkKGdyb3VwSWQpCisgICAgICAgICAgICAsIHRhcmdldFByb3BlcnR5KHRhcmdl
dFByb3BlcnR5KSB7IH0KKyAgICAgICAgaW50IGdyb3VwSWQ7CisgICAgICAgIFRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5OworICAgIH07CiAKLSAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1h
dGlvbigpIHsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVh
dGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3Jv
dXBJZCwgVGFyZ2V0UHJvcGVydHkpOwogCi0gICAgR3JvdXBJRCBncm91cCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ3JvdXA7IH0KKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpOworCisgICAg
aW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGludCBncm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JvdXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KIAogICAgIFJ1blN0YXRlIHJ1blN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZTsgfQpAQCAtOTMsNiArOTQsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OwogICAgIGJvb2wgaXNG
aW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5T
dGF0ZSA9PSBBYm9ydGVkOyB9CiAKKyAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OworICAgIGJv
b2wgaXNSdW5uaW5nT3JIYXNSdW4oKSBjb25zdDsKKwogICAgIENDQW5pbWF0aW9uQ3VydmUqIGFu
aW1hdGlvbkN1cnZlKCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogICAgIGNv
bnN0IENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogCkBAIC0xMDAsMTEgKzEwNCwyNyBAQCBwdWJsaWM6CiAg
ICAgLy8gb2YgaXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3Vy
cmVudCBpdGVyYXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRv
dWJsZSBub3cpIGNvbnN0OwogCisgICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIEFuaW1hdGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5
KTsgfQorCisgICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhy
ZWFkKCkgY29uc3Q7CisKKyAgICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFu
aW1hdGlvbiopOworCiBwcml2YXRlOgotICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25DdXJ2ZT4sIEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKKyAgICBDQ0FjdGl2
ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBpbnQgYW5pbWF0aW9uSWQs
IGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICBPd25QdHI8Q0NBbmltYXRpb25D
dXJ2ZT4gbV9hbmltYXRpb25DdXJ2ZTsKLSAgICBHcm91cElEIG1fZ3JvdXA7CisKKyAgICAvLyBJ
RHMgYXJlIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCisgICAgaW50IG1faWQ7CisKKyAgICAvLyBB
bmltYXRpb25zIHRoYXQgbXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcg
YW5kIGhhdmUgdGhlIHNhbWUgZ3JvdXAgaWQKKyAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJl
IGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0
aW9ucworICAgIC8vIG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVy
dGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0aGUKKyAgICAvLyBncm91cCBoYXZlIGZpbmlz
aGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0
YXJnZXQKKyAgICAvLyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4K
KyAgICBpbnQgbV9ncm91cDsKKwogICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7
CiAgICAgUnVuU3RhdGUgbV9ydW5TdGF0ZTsKICAgICBpbnQgbV9pdGVyYXRpb25zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGRlOTdlMzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVm
NmVjOTkzOWJhZTMuLjUzM2FiYWZlZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1NTE2NjdlZTI0ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDYgKzI1LDEwIEBACiAjaWZuZGVm
IENDQW5pbWF0aW9uQ3VydmVfaAogI2RlZmluZSBDQ0FuaW1hdGlvbkN1cnZlX2gKIAorI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDRmxvYXRBbmltYXRpb25DdXJ2ZTsK
QEAgLTQxLDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24o
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgPSAwOwogCiAg
ICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiB0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBj
b25zdDsKICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0b1RyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKCkgY29uc3Q7CkBAIC02MCw3ICs2NSw3IEBAIGNsYXNzIENDVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgQ0NBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsgfQogCi0gICAgdmlydHVhbCBU
cmFuc2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6
ZSYgbGF5ZXJTaXplKSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGlt
cGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJh
bnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjFh
NzllMzEzOTdlYzg4ZTNkNTk0ZTkyMzI2M2MxZWI4MDMzZTg0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25F
dmVudHMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0
aW9uRXZlbnRzX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25FdmVudHNfaAorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEluZGljYXRlcyB0aGF0IGFu
IGFuaW1hdGlvbiBoYXMgc3RhcnRlZCBvbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCitzdHJ1Y3QgQ0NB
bmltYXRpb25TdGFydGVkRXZlbnQgeworICAgIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBs
YXllcklELCBkb3VibGUgdGltZSkKKyAgICAgICAgOiBsYXllcklEKGxheWVySUQpCisgICAgICAg
ICwgdGltZSh0aW1lKSB7IH0KKyAgICBpbnQgbGF5ZXJJRDsKKyAgICBkb3VibGUgdGltZTsKK307
CisKK3R5cGVkZWYgVmVjdG9yPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvcjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmlt
YXRpb25FdmVudHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0NTUxZDljMGYyYWFhYTI4NzhmMDZmOWYwYjVjMGM4M2I0
YjViNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwx
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNj
L0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiIC8vIGZvciBLZXlmcmFtZVZhbHVlTGlzdAorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0
aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQoreworfQor
CitDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
KCkKK3sKK30KKworUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVM
aXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFNpemUmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBhbmltYXRpb25JZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3JvdXBJZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNl
QW5pbWF0aW9uKGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OlBhdXNlZCwgdGltZU9mZnNldCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAg
ICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGkrKzsKKyAgICB9Cit9CisKKy8vIEFjY29yZGluZyB0byByZW5kZXIgbGF5ZXIg
YmFja2luZywgdGhlc2UgYXJlIGZvciB0ZXN0aW5nIG9ubHkuCit2b2lkIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKworLy8g
TG9va2luZyBhdCBHcmFwaGljc0xheWVyQ0EsIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgYW5hbG9n
IHRvIHN1c3BlbmRBbmltYXRpb25zLCB3aGljaCBpcyBmb3IgdGVzdGluZy4KK3ZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQoreworfQorCisvLyBFbnN1
cmVzIHRoYXQgdGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFk
IGFuZCB0aGUgaW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5bmMuCit2b2lkIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICByZW1vdmVDb21wbGV0ZWRB
bmltYXRpb25zKGNvbnRyb2xsZXJJbXBsKTsKKyAgICBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRo
cmVhZChjb250cm9sbGVySW1wbCk7CisgICAgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFp
blRocmVhZChjb250cm9sbGVySW1wbCk7CisgICAgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoY29u
dHJvbGxlckltcGwpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1v
dmVDb21wbGV0ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29u
dHJvbGxlckltcGwpCit7CisgICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGlt
cGwgdGhyZWFkIGFyZSByZW1vdmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2Zp
bmlzaGVkQW5pbWF0aW9uc1tpXS5ncm91cElkLCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFu
aW1hdGlvbnNbaV0udGFyZ2V0UHJvcGVydHkpOworICAgIGNvbnRyb2xsZXJJbXBsLT5tX2Zpbmlz
aGVkQW5pbWF0aW9ucy5jbGVhcigpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwqIGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBv
d25lZCBieSB0aGUgbWFpbiB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUg
dG8gdGhlIGltcGwgdGhyZWFkJ3MgY29udHJvbGxlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWNvbnRy
b2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91
cCgpLCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQorICAgICAgICAg
ICAgY29udHJvbGxlckltcGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1w
bFRocmVhZCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OnJlbW92ZUFuaW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwg
dGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFp
biB0aHJlYWQgYW5pbWF0aW9uLgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5t
X2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50
ZWQKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9u
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5p
bWF0aW9ucy5zaXplKCk7KSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0g
Z2V0QWN0aXZlQW5pbWF0aW9uKGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
Pmdyb3VwKCksIGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFBy
b3BlcnR5KCkpOworICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVy
SW1wbC0+bV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaSsrOworICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6
cHVzaEFuaW1hdGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBj
b250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlv
bnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0
aW9uLgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlv
bnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFy
YW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250cm9s
bGVySW1wbC0+bV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBDQ0FjdGl2ZUFu
aW1hdGlvbiogY3VycmVudCA9IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAo
KSwgY3VycmVudEltcGwtPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBBU1NFUlQoY3VycmVu
dCk7CisgICAgICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudC0+c3luY2hyb25p
emVQcm9wZXJ0aWVzKGN1cnJlbnRJbXBsKTsKKyAgICB9Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9u
KiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91
cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJ
ZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJv
cGVydHkpCisgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1v
dmUoaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQ
cm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91
cCgpID09IGdyb3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgp
ID09IHRhcmdldFByb3BlcnR5KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVt
b3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzA0YTYwMzMwNzQ0M2MwYTQyMjBlYTdhMGQ2N2IzZTYx
OWM0Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDc5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gK
KyNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NB
Y3RpdmVBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBBbmltYXRpb247CitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw7CitzdHJ1Y3QgSW50U2l6ZTsKK2NsYXNzIEtleWZyYW1lVmFsdWVMaXN0OworCitj
bGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKTsKKworICAgIHZpcnR1
YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CisKKyAgICAvLyBUaGVzZSBhcmUgdmly
dHVhbCBmb3IgdGVzdGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtl
eWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
KiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAg
IHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25J
ZCk7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgLy8gRW5zdXJlcyB0aGF0
IHRoZSBsaXN0IG9mIGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhl
IGltcGwgdGhyZWFkCisgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2Vz
IG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KKyAgICB2
aXJ0dWFsIHZvaWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbCopOworCisgICAgLy8gVGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5Lgor
ICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4mIGFjdGl2ZUFuaW1hdGlvbnMo
KSB7IHJldHVybiBtX2FjdGl2ZUFuaW1hdGlvbnM7IH0KKworcHJvdGVjdGVkOgorICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZW1vdmVDb21w
bGV0ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZv
aWQgcHVzaE5ld0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKik7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFk
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaEFuaW1hdGlv
blByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisKKyAgICBDQ0Fj
dGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIHZvaWQgcmVtb3ZlKGludCBncm91cElkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgVmVjdG9yPE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNw
cAppbmRleCBiYmNhOWNiZDkwNTVlMWVjMTNjYzBhOTc0NjM5YzVmOTcwODgwOTkyLi40ZjcyNzk4
Y2E5Yzc3NmViYjMyYWYzNzExZTZlNWY0YzgwNzdmZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTI2LDYgKzI2LDcg
QEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogCisj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVy
YXRpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDI4ICs0NSwzMCBAQCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bChDQ0xheWVyQW5pbWF0aW9uQwogewogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQorQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjp+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCkKIHsK
LSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNz
KTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1l
U2Vjcyk7Ci0gICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShm
cmFtZUJlZ2luVGltZVNlY3MpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3RvciYgZXZlbnRzKQoreworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGlj
ayhmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CisgICAgc3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIGV2
ZW50cyk7CiAgICAgcmVzb2x2ZUNvbmZsaWN0cyhmcmFtZUJlZ2luVGltZVNlY3MpOwogICAgIHRp
Y2tBbmltYXRpb25zKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgcHVyZ2VGaW5pc2hlZEFuaW1h
dGlvbnMoKTsKLSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5
KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdl
dEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CiB9CiAKIHZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gYW5pbSkKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
RGlkQWN0aXZhdGUodGhpcyk7CiB9CiAKLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6
R3JvdXBJRCBncm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5
KQorQ0NBY3RpdmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0
QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJv
cGVydHkgcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3Bl
cnR5KCkgPT0gcHJvcGVydHkpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdy
b3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5
KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ld
LmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTgwLDI1ICs4MywyOCBAQCBib29sIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdykKK3ZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
TmV4dFRpY2soZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKIHsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkgewogICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKICAgICAgICAgICAgIG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcs
IG5vdyk7CiAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShu
b3cpOworICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCht
X2NsaWVudC0+aWQoKSwgbm93KSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lKGRvdWJsZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1hdGlvbkV2
ZW50c1ZlY3RvciYgZXZlbnRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRp
bWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBub3cpCisgICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRp
b246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRp
bWUoKSA8PSBub3cpIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CisgICAgICAgICAgICBldmVu
dHMuYXBwZW5kKENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KG1fY2xpZW50LT5pZCgpLCBub3cpKTsK
KyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5v
dykKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNX
YWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yJiBldmVudHMpCiB7CiAgICAgLy8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRp
ZXMuCiAgICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsKQEAgLTEzMCw2ICsx
MzYsNyBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRp
b25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eQogICAgICAgICAgICAgaWYgKG51bGxJbnRl
cnNlY3Rpb24pIHsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwogICAgICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAg
ICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+aWQoKSwg
bm93KSk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91
cCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwpAQCAtMTc4LDkgKzE4
NSwxMCBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hl
ZEFuaW1hdGlvbnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisgICAgICAgIGlm
IChhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgbV9maW5pc2hl
ZEFuaW1hdGlvbnMuYXBwZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0dXJlKCkpOwog
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgZWxzZQor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGkrKzsKICAgICB9CiB9CkBAIC0xOTQsMTQgKzIw
MiwxMSBAQCB2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlv
bnMoZG91YmxlIG5vdykKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJh
bnNmb3JtOiB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1h
dGlvbkN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAg
ICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVl
KHRyaW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0
aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZp
bmlzaGVkLCBub3cpOwogCi0gICAgICAgICAgICAgICAgLy8gRGVjaWRlIGhlcmUgaWYgYWJzb2x1
dGUgb3IgcmVsYXRpdmUuIEFic29sdXRlIGZvciBub3cuCi0gICAgICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdG9BcHBseTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGx5
KEZsb2F0U2l6ZSgpLCB0b0FwcGx5KTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJh
bnNmb3JtKHRvQXBwbHkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0o
bWF0cml4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCAx
YWQyMjNkYmE4MjNhMmEwNTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Li4yOTYwNjZkZTAwMmUyNjQ0
YTBhZDdhMDY5NDE5NDc5YzAyZDhjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaApAQCAtMjcsOCArMjcsMTAgQEAKIAogI2luY2x1
ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTQ0LDM1ICs0Niw0MSBAQCBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbENsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29u
c3QgPSAwOwogfTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOwog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwogCi0g
ICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHZpcnR1YWwg
fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCgpOworCisgICAgdm9pZCBhbmltYXRlKGRv
dWJsZSBmcmFtZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CiAKICAg
ICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7CiAKICAgICAvLyBSZXR1
cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRo
ZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCiAgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAg
ICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9u
OjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0
aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
YXJlIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQu
CiAgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisKICAgICAvLyBUaGUgYW5p
bWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgogICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsK
IAotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cp
OwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93
KTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHko
ZG91YmxlIG5vdyk7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2so
ZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKKyAgICB2b2lkIHN0YXJ0QW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNW
ZWN0b3ImKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFi
aWxpdHkoZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKICAgICB2b2lkIHJl
c29sdmVDb25mbGljdHMoZG91YmxlIG5vdyk7CiAgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0
aW9ucygpOwogCkBAIC04MCw2ICs4OCw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3RvcjxPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZlY3RvcjxDQ0FjdGl2
ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlPiBtX2ZpbmlzaGVkQW5pbWF0aW9uczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBj
ZTU0ZTdlNGI3NDk0Mjg5ZjVhODFkNjM1ZGFkNjgzYmU5NjVjNzMwLi5kNGJhYmUyNzZlMzc3OTU4
OTZjYmRhODE2YzFmM2RhYjFlNTIyZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVh
ZC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjEsNiArNjIsNyBAQCBD
Q0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9kcmF3T3BhY2l0eSgwKQog
ICAgICwgbV9kZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVnQm9yZGVy
V2lkdGgoMCkKKyAgICAsIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKHRoaXMpKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA5ZTZjNTUwMDdlZTdl
MzhkNzVmNjMxMWM5YTBmOGRlZGE3NDc2ZWFjLi5kMGQ1MjQxYmU2ZjY4NmRjODVkMDZlYmQ4OWRm
Mzg2ZTY0ZDA5NTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsMTIgKzQ2
LDIxIEBAIGNsYXNzIENDTGF5ZXJTb3J0ZXI7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtOwogCi1jbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENDTGF5ZXJJbXBsPiB7CitjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENDTGF5ZXJJbXBsPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0
ZShpbnQgaWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBs
KGlkKSk7CiAgICAgfQorCisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllcklkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZp
cnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KKwogICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBs
KCk7CiAKICAgICAvLyBUcmVlIHN0cnVjdHVyZS4KQEAgLTY2LDggKzc2LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKICAgICBD
Q0xheWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXIu
Z2V0KCk7IH0KIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQotCiAj
aWZuZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lE
OyB9CiAjZW5kaWYKQEAgLTExMSw5ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFx
dWUoYm9vbCk7CiAgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQog
Ci0gICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0KICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKTsKICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KIApAQCAtMTI5LDkgKzEzNCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQogICAgIHZvaWQgc2V0
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogICAgIGNvbnN0IFN0
cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkBAIC0xNTQsNyArMTU2LDYg
QEAgcHVibGljOgogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0
UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJT
dXJmYWNlID0gc3VyZmFjZTsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7
CiAKICAgICBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50Qm91bmRzOyB9CkBAIC0yMDMsNiArMjA0LDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5
ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2Vk
OyB9CiAgICAgdm9pZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCisgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIo
KSB7IHJldHVybiBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzEyLDYgKzMxNSw5IEBA
IHByaXZhdGU6CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRh
dGVkIGR1cmluZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNz
IHRoaXMgYW5kIGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisK
KyAgICAvLyBNYW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7
CiB9OwogCiB2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRl
cmF0b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwg
Q0NMYXllclNvcnRlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZTQ2
MmU1MzE4YmZjN2YzNzk0ZGE4NjVjZWZmMzNiYWVjNWQyZTUwMS4uZWExN2U4YzlhOTYxMjlmNmU1
MDlhMTk3YmY2ODIzNTlmMDMzMWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC0xNzEsOSArMTcxLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRP
bkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBv
bmUgZXhpc3RzIGF0IGFsbC4uLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICBpZiAocm9vdExh
eWVyKCkpIHsKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsK
LSAgICBlbHNlCisgICAgICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJp
bmcgdGhlIHRyZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBj
b250cm9sbGVycy4KKyAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxheWVycygpOwor
ICAgIH0gZWxzZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogCiAgICAgaG9z
dEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwpAQCAtMjU5LDYgKzI2
MSwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQogICAgICAgICBt
X2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnNldEFuaW1hdGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBl
dmVudHMpCit7CisgICAgQVNTRVJUKENDVGhyZWFkUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAg
ICAvLyBGSVhNRTogbmVlZCB0byB3YWxrIHRoZSB0cmVlLgorfQorCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQog
ewogICAgIGlmIChtX3Jvb3RMYXllciA9PSByb290TGF5ZXIpCkBAIC0zMzQsOSArMzQyLDEyIEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIo
MCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAg
aWYgKHJvb3RMYXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RM
YXllcigpKSk7Ci0gICAgZWxzZQorICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmlt
YXRpb24gZHVyaW5nIHRoZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBob3N0SW1wbCB0byB2
aXNpdCBpdHMgY29udHJvbGxlcnMuCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVM
YXllcnMoKTsKKyAgICB9IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBmNWUxMTM0YzgxYjQzZTIxODg2
YTVkOTM1MzBlZTg4ZjE5YTQwMzI1Li40ZWQ4ZGE5NjM0ODY5MjA3ZmRhZGU5Zjg5MWE5ZDM5MjM0
M2Q1ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSYXRlTGltaXRlci5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25F
dmVudHMuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRl
ICJjYy9DQ1Byb3h5LmgiCiAKQEAgLTc1LDYgKzc2LDcgQEAgc3RydWN0IENDU2V0dGluZ3Mgewog
ICAgICAgICAgICAgLCByZWZyZXNoUmF0ZSgwKQogICAgICAgICAgICAgLCBwZXJUaWxlUGFpbnRp
bmcoZmFsc2UpCiAgICAgICAgICAgICAsIHBhcnRpYWxTd2FwRW5hYmxlZChmYWxzZSkKKyAgICAg
ICAgICAgICwgdGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGZhbHNlKQogICAgICAgICAgICAgLCBt
YXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSkgeyB9CiAKICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKQEAgLTg0LDYgKzg2LDcgQEAg
c3RydWN0IENDU2V0dGluZ3MgewogICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKICAgICBib29sIHBl
clRpbGVQYWludGluZzsKICAgICBib29sIHBhcnRpYWxTd2FwRW5hYmxlZDsKKyAgICBib29sIHRo
cmVhZGVkQW5pbWF0aW9uRW5hYmxlZDsKICAgICBzaXplX3QgbWF4UGFydGlhbFRleHR1cmVVcGRh
dGVzOwogfTsKIApAQCAtMTYzLDYgKzE2Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNDb21taXQoKTsKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lk
IHNldEFuaW1hdGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPik7
CisKICAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5n
ZXQoKTsgfQogICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDc2OGFjMmYyYTM1MzZlZDU5ODYxNWZhM2NmMGYyYjBiMzdkN2E5MTAuLmY4M2YxNDI0
Y2ZjMDVmMGEwZmVmNDFlYmY5ODNhMmYyY2U1NGY4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC01OCw2ICs1OCw3IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6
OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJU
cmVlCiAgICAgLCBtX3NlbnRQYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV9taW5QYWdlU2NhbGUo
MCkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDApCisgICAgLCBtX25lZWRzQW5pbWF0ZUxheWVycyhm
YWxzZSkKICAgICAsIG1fcGluY2hHZXN0dXJlQWN0aXZlKGZhbHNlKQogewogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CkBAIC05OCwyMSArOTksOCBAQCBHcmFwaGljc0NvbnRl
eHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKLSAgICBpZiAoIW1f
cGFnZVNjYWxlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHNjcm9s
bFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9z
Y3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOwotCi0gICAgc2V0UGFnZVNjYWxlRGVsdGEo
bV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAv
IG1fcGFnZVNjYWxlKTsKLSAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1h
dGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpOwotICAgIG5leHRTY3Jv
bGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwotICAgIG1fY2xpZW50LT5zZXROZWVk
c1JlZHJhd09uSW1wbFRocmVhZCgpOwotCi0gICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5p
c0FuaW1hdGlvbkNvbXBsZXRlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpKSB7Ci0gICAgICAgIG1f
cGFnZVNjYWxlQW5pbWF0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0Nv
bW1pdE9uSW1wbFRocmVhZCgpOwotICAgIH0KKyAgICBhbmltYXRlUGFnZVNjYWxlKGZyYW1lQmVn
aW5UaW1lTXMpOworICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWVNcyk7CiB9CiAKIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50
U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwg
ZG91YmxlIHN0YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25NcykKQEAgLTI1MCw2ICsyMzgsMjUg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRl
clBhc3NMaXN0JiBwYXNzZXMpCiAgICAgfQogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OmFuaW1hdGVMYXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQsIGRvdWJsZSBmcmFt
ZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMsIGJvb2wmIG5l
ZWRzQW5pbWF0ZUxheWVycykKK3sKKyAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1hdGVMYXllcnMg
PSBmYWxzZTsKKworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY3VycmVudENv
bnRyb2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBjdXJy
ZW50Q29udHJvbGxlci0+YW5pbWF0ZShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CisgICAg
aWYgKGN1cnJlbnRDb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSkKKyAgICAgICAgc3Vi
dHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGN1cnJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCBjaGls
ZE5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOworICAgICAgICBhbmltYXRlTGF5ZXJzUmVjdXJz
aXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCksIGZyYW1lQmVnaW5UaW1lU2VjcywgZXZl
bnRzLCBjaGlsZE5lZWRzQW5pbWF0ZUxheWVycyk7CisgICAgICAgIGlmIChjaGlsZE5lZWRzQW5p
bWF0ZUxheWVycykKKyAgICAgICAgICAgIHN1YnRyZWVOZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVl
OworICAgIH0KKworICAgIG5lZWRzQW5pbWF0ZUxheWVycyA9IHN1YnRyZWVOZWVkc0FuaW1hdGVM
YXllcnM7Cit9CisKIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGVudFNpemUoKSBj
b25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTogSGFyZGNvZGluZyB0aGUgZmlyc3QgY2hpbGQg
aGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKQEAgLTYyNSw0ICs2MzIsNDUgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXRGdWxsUm9vdExheWVyRGFtYWdlKCkKICAgICB9CiB9CiAKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZShkb3VibGUgZnJhbWVCZWdpblRp
bWVNcykKK3sKKyAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5z
Y3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9sbERlbHRhKCkpOworCisg
ICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGlt
ZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKKyAgICBJbnRTaXplIG5leHRTY3Jv
bGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5U
aW1lTXMpOworICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNjYWxlRGVsdGEpOworICAg
IG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwor
CisgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRlQXRUaW1l
KGZyYW1lQmVnaW5UaW1lTXMpKSB7CisgICAgICAgIG1fcGFnZVNjYWxlQW5pbWF0aW9uLmNsZWFy
KCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAg
IH0KKworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpOwogfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMoZG91YmxlIGZyYW1lQmVnaW5U
aW1lTXMpCit7CisgICAgaWYgKCFtX25lZWRzQW5pbWF0ZUxheWVycyB8fCAhbV9yb290TGF5ZXJJ
bXBsKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC0+c2V0TmVlZHNSZWRyYXdPbklt
cGxUaHJlYWQoKTsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmlt
YXRlTGF5ZXJzIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKG1fbmVlZHNBbmltYXRlTGF5ZXJzKTsK
KworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5l
dyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworCisgICAgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2
ZShtX3Jvb3RMYXllckltcGwuZ2V0KCksIGZyYW1lQmVnaW5UaW1lTXMgLyAxMDAwLCAqZXZlbnRz
LCBtX25lZWRzQW5pbWF0ZUxheWVycyk7CisKKyAgICBpZiAoIWV2ZW50cy0+aXNFbXB0eSgpKQor
ICAgICAgICBtX2NsaWVudC0+cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRo
cmVhZChldmVudHMucmVsZWFzZSgpKTsKKworICAgIGlmIChtX25lZWRzQW5pbWF0ZUxheWVycykK
KyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCAwYTNjYmFlOGQ4Zjc5ZGMzOTY4ODQ4NDhkM2E0OGM1NzNkOWU4NWNlLi5mYzI5MDU1OWNj
OTEzZDQ0YTBjMWRkYWExNmU4MWVlZWQ0YzBiMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC0yNSwxMSArMjUsMTMgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0
SW1wbF9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25FdmVudHMuaCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1Jl
bmRlclBhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNiArNTAsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBh
c3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+KSA9IDA7CiB9OwogCiAvLyBDQ0xheWVy
VHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lh
dGVkIHJlbmRlcmluZyBzdGF0ZQpAQCAtNjgsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydFBhZ2VTY2Fs
ZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQb2lu
dCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lTXMsIGRvdWJsZSBkdXJhdGlvbk1z
KTsKIAotICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcKKyAgICAvLyBWaXJ0dWFsIGZvciB0ZXN0
aW5nLgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b21taXRDb21wbGV0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZURp
c3BsYXlUaW1lTXMpOwpAQCAtMTE5LDggKzEyMiwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0
YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRyYWdldFBvc2l0aW9uLCBib29s
IHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CiAKKyAgICBib29s
IG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRlTGF5ZXJz
OyB9CisgICAgdm9pZCBzZXROZWVkc0FuaW1hdGVMYXllcnMoKSB7IG1fbmVlZHNBbmltYXRlTGF5
ZXJzID0gdHJ1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbChjb25z
dCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworCisgICAgdm9pZCBh
bmltYXRlUGFnZVNjYWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKTsKKworICAgIC8vIFZpcnR1
YWwgZm9yIHRlc3RpbmcuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIGZy
YW1lQmVnaW5UaW1lTXMpOworCiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9jbGll
bnQ7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7
CkBAIC0xMzksNiArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxs
U3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0JiwgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
ICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIHZv
aWQgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCosIGRvdWJsZSBmcmFtZUJlZ2lu
VGltZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgYm9vbCYgbmVlZHNBbmltYXRlTGF5
ZXJzKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAKICAgICBPd25QdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CkBAIC0xNTQsNiArMTY3LDggQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX3NlbnRQYWdlU2NhbGVEZWx0YTsKICAgICBmbG9hdCBtX21p
blBhZ2VTY2FsZSwgbV9tYXhQYWdlU2NhbGU7CiAKKyAgICAvLyBJZiB0aGlzIGlzIHRydWUsIGl0
IGlzIG5lY2Vzc2FyeSB0byB0cmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSB0aWNraW5nIHRoZSBhbmlt
YXRvcnMuCisgICAgYm9vbCBtX25lZWRzQW5pbWF0ZUxheWVyczsKICAgICBib29sIG1fcGluY2hH
ZXN0dXJlQWN0aXZlOwogICAgIEludFBvaW50IG1fcHJldmlvdXNQaW5jaEFuY2hvcjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCAxN2E2OTU5M2E2NDNjZmZl
ODM3MTc2MTQ5N2U0YmVjMGExYzcxZDkwLi5lYThjNDBmMTI1NjVlYzQxM2JhYjU4NmJhMjBlNDlj
ZWY5ZjlkYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAt
MjMzLDYgKzIzMywxMyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIG1f
bGF5ZXJUcmVlSG9zdCA9IDA7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cG9zdEFu
aW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpbjsKKyAgICBtX2xheWVy
VHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhldmVudHMpOworfQorCiAvLyBDYWxsZWQgYnkg
dGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2Vz
IHRoZSBzY2hlZHVsaW5nKQogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1l
ZGlhdGVseSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggYWRk
YTlmMTRlOWU1NGRiYTA1YWYzMGQ1Nzg2ODM4YzQ2M2QzNDQ0MS4uNzFiNWU5OWIyZWQyYWZmNzgy
NTAzYmYzOTMzNjY5ODNmYzU5NDcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaApAQCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBDQ1NpbmdsZVRocmVhZFByb3h5X2gKICNk
ZWZpbmUgQ0NTaW5nbGVUaHJlYWRQcm94eV9oCiAKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkV2
ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKQEAgLTYzLDYg
KzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGVP
bkltcGxUaHJlYWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgeyBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRz
Q29tbWl0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+KTsKIAogICAgIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5
IHBhdGggd2hlcmUgUmVuZGVyV2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAgICAgdm9pZCBj
b21wb3NpdGVJbW1lZGlhdGVseSgpOwpAQCAtMTExLDYgKzExMywyNCBAQCBwdWJsaWM6CiAgICAg
fQogfTsKIAorLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UuIEluIGRlYnVn
IGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKKy8vIGNvZGUgaXMgcnVubmluZyBvbiB0aGUg
bWFpbiB0aHJlYWQgdG8gc2F0aXNmeSBhc3NlcnRpb24gY2hlY2tzLgorY2xhc3MgRGVidWdTY29w
ZWRTZXRNYWluVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQo
KQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIENDUHJveHk6OnNldEN1cnJl
bnRUaHJlYWRJc0ltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlmCisgICAgfQorICAgIH5EZWJ1Z1Nj
b3BlZFNldE1haW5UaHJlYWQoKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAg
IENDUHJveHk6OnNldEN1cnJlbnRUaHJlYWRJc0ltcGxUaHJlYWQodHJ1ZSk7CisjZW5kaWYKKyAg
ICB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcAppbmRleCAzZWE3MmUyYTFjNzJmYjM1NjkxNDg5MjdlY2IxNTEwNDcyOTg5
NDI2Li43NWVmMTM2MjNkZTg3NmY0NGEyY2E0N2VhZGQ4MTIwYjExMGIyMzI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMjU5LDYgKzI1OSwxMyBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKICAgICBtX3NjaGVkdWxlck9uSW1wbFRo
cmVhZC0+c2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5Ojpwb3N0QW5p
bWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRp
b25FdmVudHNWZWN0b3I+IGV2ZW50cykKK3sKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWlu
VGhyZWFkT25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CisgICAgbV9tYWluVGhyZWFkUHJveHktPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0QW5pbWF0
aW9uRXZlbnRzLCBldmVudHMpKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1Jl
ZHJhdygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTU2Miw2ICs1NjksMTQg
QEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkKICAgICBtX2xh
eWVyVHJlZUhvc3QtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKIH0KIAordm9pZCBDQ1RocmVh
ZFByb3h5OjpzZXRBbmltYXRpb25FdmVudHMoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4gZXZlbnRzKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNl
dEFuaW1hdGlvbkV2ZW50cyhldmVudHMpOworfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVJbXBsT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewog
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uSW1wbFRocmVh
ZCIsIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDIzYzI5ZjQ4ZmEzMmI3
YWM0ODgxNTgwMmNhMDM1OGVlYTFkODgwMWEuLjMzMGVmNTFjYTk4YTE2ZDIyMzFlMzM2NTU0MGFj
MDNjMTczMzJhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpZm5kZWYgQ0NUaHJlYWRQcm94eV9oCiAjZGVmaW5lIENDVGhyZWFkUHJveHlfaAogCisjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKICNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25F
dmVudC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJj
Yy9DQ1Byb3h5LmgiCkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
b25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNU
b01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cj4pOwogCiAgICAgLy8gQ0NTY2hlZHVsZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0
dWFsIGJvb2wgY2FuRHJhdygpOwpAQCAtODYsNiArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
YmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSwgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0Pik7CiAgICAgdm9pZCBkaWRDb21t
aXRBbmREcmF3RnJhbWUoKTsKICAgICB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKKyAg
ICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yPik7CiAKICAgICAvLyBDYWxsZWQgb24gaW1wbCB0aHJlYWQKICAgICBzdHJ1Y3QgUmVhZGJh
Y2tSZXF1ZXN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDZlOWE0ZDBkZmE5
NWZiNzQ4NzFlNWZmMzlmYjI4YWRmZmRhYWQ5ZmIuLmQxYTk2NzgxZTdiMDQ5MWE1YzE4ODQyZTdl
Mzg3OWE3NzczMzcyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjEsMTAg
KzYxLDEzIEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
Q0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJh
Y2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNl
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmgKaW5kZXggOTc2ZTc2YmI0ZTZmZmIxN2Y1NmY1MjViMDZmZGNiM2VlZjJl
NjMxMC4uN2YxYmJiMGM0OTY5OGRiOTIzNjRhNTYyOGFmNTRhNTEyZjU1ZTEyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC0xNDIsNiArMTQyLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZFBhaW50aW5nRW5hYmxl
ZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFBlclRpbGVQYWludGluZ0VuYWJsZWQo
Ym9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUaHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoYm9vbCkg
PSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlNldHRpbmdzKCkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3
LmgKaW5kZXggMWFkNDY4OWZlYTkwN2FjNGVlMWQyZThiZTgxNWFmYTJjYjM2NzNhMy4uMTdhODc2
YTk4NTFkZGZjMGNmOWE1NjFjOTg2YWRjMjNiYmQ2YWFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaApA
QCAtNTAsNyArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVy
VHJlZShmYWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkKICAgICAgICAgICAgICwg
cGVyVGlsZVBhaW50aW5nKGZhbHNlKQotICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQo
ZmFsc2UpIHsgfQorICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCisgICAg
ICAgICAgICAsIHRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChmYWxzZSkgeyB9CiAKICAgICAgICAg
Ym9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVu
OwpAQCAtNTksNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsK
ICAgICAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmc7CiAgICAgICAgIGJvb2wgcGFydGlhbFN3YXBF
bmFibGVkOworICAgICAgICBib29sIHRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZDsKICNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KICAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygp
IGNvbnN0OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllclRyZWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXcuY3BwCmluZGV4IGNhMDM1MTQzM2U3OGIwMGQ4Y2M2MDRlYTAwMmZlMTY3NjBlMWQ0
MjguLmQyYzBmMGMxMjFhN2MwZDVlNWJmZTFlNTA1ZWQ3YmVhYmJiMjdiYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCkBAIC00NSw2ICs0
NSw3IEBAIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzOjpvcGVyYXRvciBDQ1NldHRpbmdzKCkg
Y29uc3QKICAgICBzZXR0aW5ncy5yZWZyZXNoUmF0ZSA9IHJlZnJlc2hSYXRlOwogICAgIHNldHRp
bmdzLnBlclRpbGVQYWludGluZyA9IHBlclRpbGVQYWludGluZzsKICAgICBzZXR0aW5ncy5wYXJ0
aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFsU3dhcEVuYWJsZWQ7CisgICAgc2V0dGluZ3MudGhyZWFk
ZWRBbmltYXRpb25FbmFibGVkID0gdGhyZWFkZWRBbmltYXRpb25FbmFibGVkOwogCiAgICAgLy8g
RklYTUU6IHNob3dGUFNDb3VudGVyIC8gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIC8gbWF4UGFydGlh
bFRleHR1cmVVcGRhdGVzIGFyZW4ndCBzdXBwb3J0ZWQgY3VycmVudGx5LgogICAgIHJldHVybiBz
ZXR0aW5nczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwCmluZGV4IGE4YjY3Zjg5YjY1ZDllMDUyN2M0NzkwYTY1MzA0NDhlNjkxZWM0OWMuLjQ4NWE1
YjA1MWEwMjYyMDhiZjc2Yzg3NjkyYzM0MWZlYjQyNmY2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApAQCAtNTQzLDQgKzU0Myw5IEBAIHZv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ICAgIG1fc2V0dGluZ3MtPnNldFBhcnRpYWxTd2FwRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9p
ZCBXZWJTZXR0aW5nc0ltcGw6OnNldFRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0VGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGVuYWJs
ZWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKaW5kZXggYmI2MTFjN2I3ODU2OGM3NDQ5YmMwN2ZkZTU4
YzI2M2E5ZTQzOWMxMS4uNTFkOTMyM2E0MDg4MjZlNTQxYTlkMzNmMDA1MTlkYTljYTJlYTU0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTEz
Nyw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkUGFp
bnRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdF
bmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9v
bCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChib29sKTsK
IAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBlM2FmOGViOGQwZGExMDli
ZjliYjc5ZjZhNzNmMTQzYjc3MTNjMTgyLi4zNGRhMGRlYjRiYWVmMzI1MWI5ZWVmOGE4Mjg3NWMw
OTQxMGJiMDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CkBAIC0zMTY4LDYgKzMxNjgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAKICAgICAgICAgY2NTZXR0aW5ncy5wZXJU
aWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVEcmF3aW5nRW5hYmxlZCgp
OwogICAgICAgICBjY1NldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhZ2UoKS0+c2V0dGlu
Z3MoKS0+cGFydGlhbFN3YXBFbmFibGVkKCk7CisgICAgICAgIGNjU2V0dGluZ3MudGhyZWFkZWRB
bmltYXRpb25FbmFibGVkID0gcGFnZSgpLT5zZXR0aW5ncygpLT50aHJlYWRlZEFuaW1hdGlvbkVu
YWJsZWQoKTsKIAogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0
ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTaG93RGVi
dWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0
LmNwcAppbmRleCAzZTkzZDk1ZGU4NjhhMmYzYTI1YWIwMzAyMGVkMjVjMWQwZWM0OTBhLi5lMTRl
ZjliYzA5NzFhMTFlMjE0YjMxNGQ3NTgyOTE1ZWNjNTZkMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCkBAIC0y
NSwyNCArMjUsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgImNjL0NDQWN0
aXZlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisjaW5j
bHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAKICNpbmNsdWRlIDxnbW9jay9nbW9jay5o
PgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9uIDogcHVibGljIEND
RmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBkb3VibGUgZHVyYXRp
b24oKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3Vi
bGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9Ci19OworbmFtZXNwYWNlIHsKIAogUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25z
KQogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
UmV0dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlKSwgMCwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0
b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKICAgICByZXR1cm4gdG9SZXR1cm4u
cmVsZWFzZSgpOwogfQpAQCAtMTY0LDQgKzE2MCw0IEBAIFRFU1QoQ0NBY3RpdmVBbmltYXRpb25U
ZXN0LCBJc0ZpbmlzaGVkKQogICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWQoKSk7CiB9
CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGUwNjE1NzM0MThhMDkwMWI1NTgxNjljZTAxNmNjMzhkOTAzODFlZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworRmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmU6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkKK3sKK30KKworRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpCit7Cit9CisKK1Bh
c3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gRmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlKTsKK30KKworRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OkZha2VUcmFuc2Zv
cm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikKKyAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24p
Cit7Cit9CisKK0Zha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oKQoreworfQorCitXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
KCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gRmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCp0aGlzKSk7Cit9CisKKworRmFrZUZsb2F0VHJhbnNp
dGlvbjo6RmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZs
b2F0IHRvKQorICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAsIG1fZnJvbShmcm9tKQor
ICAgICwgbV90byh0bykKK3sKK30KKworRmFrZUZsb2F0VHJhbnNpdGlvbjo6fkZha2VGbG9hdFRy
YW5zaXRpb24oKQoreworfQorCitmbG9hdCBGYWtlRmxvYXRUcmFuc2l0aW9uOjpnZXRWYWx1ZShk
b3VibGUgdGltZSkgY29uc3QKK3sKKyAgICB0aW1lIC89IG1fZHVyYXRpb247CisgICAgaWYgKHRp
bWUgPj0gMSkKKyAgICAgICAgdGltZSA9IDE7CisgICAgcmV0dXJuICgxIC0gdGltZSkgKiBtX2Zy
b20gKyB0aW1lICogbV90bzsKK30KKworRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQ6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKKyAgICA6IG1f
b3BhY2l0eSgwKQoreworfQorCitGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KCkKK3sKK30KKworUGFz
c093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBGYWtlRmxvYXRUcmFuc2l0aW9uOjpj
bG9uZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKCp0aGlzKSk7Cit9CisKK3ZvaWQgYWRkT3BhY2l0eVRyYW5zaXRpb24oV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bSYgbGF5ZXIsIGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgc3RhcnRPcGFjaXR5LCBm
bG9hdCBlbmRPcGFjaXR5KQoreworICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IHZhbHVl
cyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisgICAgaWYgKGR1cmF0aW9uID4gMCkKKyAgICAg
ICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZSgwLCBzdGFydE9wYWNpdHkp
KTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1hdGlvblZhbHVlKGR1cmF0aW9uLCBl
bmRPcGFjaXR5KSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRp
b246OmNyZWF0ZSgpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMSk7CisKKyAgICBJbnRT
aXplIGJveFNpemU7CisKKyAgICBsYXllci5hZGRBbmltYXRpb24odmFsdWVzLCBib3hTaXplLCBh
bmltYXRpb24uZ2V0KCksIDAsIDAsIDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXRUZXN0
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRl
c3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY5NjRlNDQyZWRjYzRlZDZmMDU3OTZmMDZjMThhNzhmZjBh
ZWY5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25UZXN0Q29t
bW9uX2gKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK30KKworbmFt
ZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3MgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUgOiBw
dWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZSgpOworICAgIHZpcnR1YWwgfkZha2VGbG9hdEFuaW1hdGlvbkN1
cnZlKCk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIDE7
IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSBub3cpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4g
Y2xvbmUoKSBjb25zdDsKK307CisKK2NsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVi
bGljIFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbik7CisgICAgdmlydHVhbCB+RmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb24oKTsKKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSBjb25zdDsKKworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlv
bkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9u
OworfTsKKworY2xhc3MgRmFrZUZsb2F0VHJhbnNpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpDQ0Zs
b2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZha2VGbG9hdFRyYW5zaXRpb24oZG91
YmxlIGR1cmF0aW9uLCBmbG9hdCBmcm9tLCBmbG9hdCB0byk7CisgICAgdmlydHVhbCB+RmFrZUZs
b2F0VHJhbnNpdGlvbigpOworCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUg
dGltZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRp
b25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlv
bjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxvYXQgbV90bzsKK307CisKK2NsYXNzIEZha2VM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7CitwdWJsaWM6CisgICAgRmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKTsKKyAgICB2aXJ0dWFsIH5GYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpOworCisgICAgdmlydHVhbCBpbnQgaWQoKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3Bh
Y2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CisgICAgdmlydHVhbCBjb25zdCBXZWJDb3Jl
OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2Zvcm07IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRzOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9vcGFjaXR5OworICAg
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIFdlYkNvcmU6
OkludFNpemUgbV9ib3VuZHM7Cit9OworCit2b2lkIGFkZE9wYWNpdHlUcmFuc2l0aW9uKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW0mLCBkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0T3BhY2l0eSwg
ZmxvYXQgZW5kT3BhY2l0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNlbmRp
ZiAvLyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bFRlc3QuY3BwCmluZGV4IDNkNTBkMDZlNjIzMTIxOGYxNDAyMTJiMWRmZWQ2ZTc4OTViMGY1M2Iu
LmUxYWVjY2M1MzlhNWQ1MWRmZjE4YTJiZTdjNDJlZWJhMTQ1N2VmYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApAQCAtMjQsOTIgKzI0LDM5IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgotCi0jaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKLQor
I2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSA8Z21vY2svZ21vY2su
aD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CiAK
IG5hbWVzcGFjZSB7CiAKLWNsYXNzIEZha2VDb250cm9sbGVyQ2xpZW50IDogcHVibGljIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgRmFrZUNvbnRy
b2xsZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwKSB7IH0KLSAgICB2aXJ0dWFsIH5GYWtlQ29udHJv
bGxlckNsaWVudCgpIHsgfQotCi0gICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3Bh
Y2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9Ci0gICAgdmlydHVhbCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqIGNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBtX2FjdGl2ZUNvbnRyb2xs
ZXJzLmFwcGVuZChjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyByZXR1cm4gbV9hY3Rp
dmVDb250cm9sbGVyczsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fb3BhY2l0eTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKLSAgICBWZWN0b3I8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKj4gbV9hY3RpdmVDb250cm9sbGVyczsKLX07Ci0KLWNsYXNzIEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUg
ewotcHVibGljOgotICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikg
OiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJh
dGlvbnMgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBkb3VibGUgbV9k
dXJhdGlvbjsKLX07Ci0KLWNsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgQ0NGbG9h
dEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJs
ZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0gICAgICAgIDogbV9kdXJhdGlvbihk
dXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAgICAgICAgLCBtX3RvKHRvKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBj
b25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0aW9uOwotICAgICAgICBpZiAodGlt
ZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAgICAgIHJldHVybiAoMSAtIHRpbWUp
ICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGRvdWJsZSBt
X2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBmbG9hdCBtX3RvOwotfTsKK1Bhc3NP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRy
PENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKK30KIAogLy8gVGVzdHMgdGhhdCB0cmFuc2l0
aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogewotICAg
IEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50
c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOwor
ICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKICAgICBjb250cm9s
bGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpA
QCAtMTE3LDIwICs2NCwyMSBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogLy8gVGVzdHMgdGhhdCB0d28gcXVldWVkIGFuaW1hdGlv
bnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBpbiBzZXF1ZW5jZS4KIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFF1ZXVpbmcpCiB7Ci0gICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Cisg
ICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVB
bmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41ZikpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTM4
LDIyICs4NiwyMyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRy
aXZpYWxRdWV1aW5nKQogLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRoIGFu
b3RoZXIgdHJhbnNpdGlvbi4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgSW50ZXJydXB0KQogewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93
blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Q2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAg
IGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpX
YWl0aW5nRm9yTmV4dFRpY2ssIDApOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNl
KCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFy
dHMgTk9XLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41LCAqZXZlbnRzKTsgLy8gc2Vjb25k
IGFuaW0gc3RhcnRzIE5PVy4KICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxLjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41LCAqZXZl
bnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1Rf
RkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTYxLDIzICsx
MTAsMjQgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1
cHQpCiAvLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3
aGVuIG9ubHkgb25lIHByb3BlcnR5IGlzIGZyZWUuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQog
ewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15Owog
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwog
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246OlRy
YW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDIsIENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0
ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkp
LCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRk
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBj
b250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50
cyk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICAvLyBTaG91
bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCiAgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOwogICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3Vs
ZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTE4NywyOSArMTM3LDMwIEBAIFRF
U1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldo
ZW5BUHJvcGVydHlJc0Jsb2NrZWQpCiAvLyBmb3IgYm90aCB0byBmaW5pc2gpLgogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5p
bVdhaXRpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGll
bnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29u
dHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUo
JmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9s
bGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKIAogICAgIC8vIEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cu
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKICAgICAvLyBUaGUgb3Bh
Y2l0eSBhbmltYXRpb24gc2hvdWxkIGhhdmUgZmluaXNoZWQgYXQgdGltZSAxLCBidXQgdGhlIGdy
b3VwCiAgICAgLy8gb2YgYW5pbWF0aW9ucyB3aXRoIGlkIDEgZG9uJ3QgZmluaXNoIHVudGlsIHRp
bWUgMiBiZWNhdXNlIG9mIHRoZSBsZW5ndGgKICAgICAvLyBvZiB0aGUgdHJhbnNmb3JtIGFuaW1h
dGlvbi4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMiwgKmV2ZW50cyk7CiAgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0
IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIC8v
IFRoZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIg
YW5kIHNob3VsZCBiZQogICAgIC8vIGRvbmUgYnkgdGltZSAzCi0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwogICAgIEVYUEVD
VF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0yMTcsMjIgKzE2OCwyMyBAQCBURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaXRoQW5B
bmltV2FpdGluZykKIC8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGlu
IHRoZSBmdXR1cmUuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNj
aGVkdWxlQW5pbWF0aW9uKQogewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwogICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBF
Q1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMjQwLDI4
ICsxOTIsMjkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZUFuaW1hdGlvbikKIC8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0
IGluIHRoZSBmdXR1cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgog
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRp
b25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKIHsKLSAgICBGYWtlQ29udHJvbGxlckNsaWVu
dCBkdW1teTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9w
dFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVy
LT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIE93
blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0Fk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIHRvQWRk
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7
CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQg
c3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVu
dHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
ICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI3MCwzNCArMjIzLDM1IEBAIFRFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJy
dXB0c1J1bm5pbmdBbmltCiAvLyBhbmQgdGhlcmUgaXMgeWV0IGFub3RoZXIgYW5pbWF0aW9uIHF1
ZXVlZCB0byBzdGFydCBsYXRlci4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb25XaXRoQW5p
bUluUXVldWUpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGll
bnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29u
dHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUo
JmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAuNWYsIDApKSwgMiwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwogICAgIHRvQWRkLT5zZXRTdGFy
dFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CiAKLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAzLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBz
aG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwotICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZl
bnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDQpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CiB9CkBAIC0zMDUsNjQgKzI1OSw2NiBAQCBURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5n
QW5pbQogLy8gVGVzdCB0aGF0IGEgbG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZvciB0aGUg
Y29ycmVjdCBudW1iZXIgb2YgaXRlcmF0aW9ucy4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgVHJpdmlhbExvb3BpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRv
cHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkp
OworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKICAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjI1KTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEuNzUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9w
YWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1KTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDIuMjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDIuNzUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMsICpl
dmVudHMpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICAvLyBKdXN0IGJl
IGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDQsICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OwogfQogCiAvLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBsb29waW5nIGFuaW1hdGlvbiBkb2Vz
IGluZGVlZCBnbyB1bnRpbCBhYm9ydGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQ
dHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBjb25zdCBpbnQgaWQgPSAxOwotICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQt
PnNldEl0ZXJhdGlvbnMoLTEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkp
OwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEuMjUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSwgKmV2ZW50
cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVY
UEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTA3Mzc0MTgyNC4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
MDczNzQxODI0Ljc1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwogCkBAIC0zNzUsODAgKzMzMSw2NiBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKIC8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1
bWluZyB3b3JrIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBQYXVzZVJlc3VtZSkKIHsKLSAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcg
Q0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGludCBpZCA9IDE7Ci0gICAgY29udHJv
bGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSwgKmV2
ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogCiAgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1
c2VkLCAwLjVmKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNCk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxMDI0LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNp
dHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24o
aWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgY29udHJvbGxlci0+Z2V0QWN0
aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKIAotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMTAyNC4yNSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1LCAqZXZlbnRz
KTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAg
ICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMTAyNC41KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSwgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIH0KIAogVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBBYm9ydEFHcm91cGVkQW5pbWF0aW9uKQogewotICAgIEZh
a2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAg
IEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCiAgICAgY29u
c3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEp
KSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRk
KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRp
b24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBj
b250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmlt
YXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRp
b246OkFib3J0ZWQsIDEpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIs
ICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogfQogCi0vLyBU
ZXN0cyB0aGF0IGFkZGluZyBhbiBhbmltYXRpb24gdG8gdGhlIGNvbnRyb2xsZXIgY2FsbHMgdGhl
IGFwcHJvcHJpYXRlIGNhbGxiYWNrIG9uIHRoZSBjb250cm9sbGVyIGNsaWVudAotLy8gKGluIHRo
aXMgY2FzZSwgYWRkaW5nIHRoZSBjb250cm9sbGVyIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBjb250
cm9sbGVyKS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgRGlkQWN0
aXZhdGUpCi17Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Ci0gICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKLSAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7Ci0KLSAgICBFWFBFQ1Rf
RVEoc2l6ZV90KDApLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7Ci0KLSAgICBj
b250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5
KSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygp
LnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNvbnRyb2xsZXIuZ2V0KCksIGR1bW15LmFjdGl2ZUNv
bnRyb2xsZXJzKClbMF0pOwotfQotCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlY2MxZmZhODJlOGU1YjYyOWQ2ZWMxYmYwNjhiZGNhYWQ1
Nzg2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIK
KyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsKKworUGFzc093blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25D
dXJ2ZT4gY3VydmUsIGludCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHBy
b3BlcnR5KQoreworICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCAw
LCBpZCwgcHJvcGVydHkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVz
dCwgc3luY05ld0FuaW1hdGlvbikKK3sKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbENsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsPiBjb250cm9sbGVySW1wbCgKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3Jl
YXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmlt
YXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXIt
PmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMo
Y29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0
eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyVGVzdCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMpCit7CisgICAgRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwoCisgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1w
bC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisK
KyAgICBjb250cm9sbGVyLT5hY3RpdmVBbmltYXRpb25zKCkuYXBwZW5kKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCkpLCAwLCAw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+c3luY2hy
b25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgpKTsKKworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JU
YXJnZXRBdmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0ZSgpKTsKKworICAgIC8vIFB1c2gg
YW4gYW5pbWF0aW9uIHByb3BlcnR5IGNoYW5nZSB0byB0aGUgaW1wbCB0aHJlYWQgKHNob3VsZCBu
b3QgY2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJlIGFkZGVkKS4KKyAgICBjb250cm9sbGVyLT5wYXVz
ZUFuaW1hdGlvbigwLCAwKTsKKyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMo
Y29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCBjb250cm9sbGVySW1wbC0+Z2V0
QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+cnVuU3RhdGUo
KSk7Cit9CisKK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LCBzeW5jQWJvcnRl
ZEFuaW1hdGlvbikKK3sKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVySW1wbCgKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250
cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwor
CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFu
aW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxl
ckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2
ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9F
UShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJv
bGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSktPnJ1blN0YXRlKCkpOworCisgICAgY29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKDApOwor
CisgICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIGNv
bnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250cm9sbGVySW1wbC5nZXQoKSk7CisK
KyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlvbikKK3sKKyAgICBGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbCgKKyAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJ
bXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KworICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAs
IDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5j
aHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zv
clRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigw
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgLy8gU3Rl
cCB0aHJvdWdoIHRoZSBhbmltYXRpb24gdW50aWwgaXQgaXMgZmluaXNoZWQuIEF0IHRoZSBuZXh0
IHN5bmMsIHRoZSBtYWluIHRocmVhZCdzIGFuaW1hdGlvbiBzaG91bGQgYmUgY2xlYXJlZC4KKyAg
ICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NB
bmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBjb250cm9sbGVySW1wbC0+YW5pbWF0ZSgwLCAq
ZXZlbnRzKTsKKyAgICBjb250cm9sbGVySW1wbC0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKKworICAg
IEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNUX0VRKHNpemVfdCgxKSwgY29udHJv
bGxlci0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5j
aHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX0VR
KHNpemVfdCgwKSwgY29udHJvbGxlci0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGY1NmJmMDJlMjhjMmU4NDJlNDVm
ZjZjZjMxYWM4MzFjODk3ZTQ1M2MuLjVmODAxNDhlMDhmYmUzZWZjNWJkMDg3YTkxMTU1NWViYmE1
ZDVlZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVlc3RS
ZWRyYXcgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCkgeyBtX2RpZFJlcXVlc3RDb21taXQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBv
c3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3Rvcj4pIHsgfQogCiAgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJl
ZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAK
aW5kZXggMTYzNzFhMWFlYWVlMGVlN2NiNWEyOTU2MWFkOGNlZmYxMjAzMjA0OS4uZjk4ODNiMGIx
MTQ4ZjI4MjIyNTY4ZjA1YWEzMzFmOWI2MWUyYjE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkNDQW5p
bWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkZpbHRlck9wZXJhdGlvbnMuaCIKQEAgLTM1LDYgKzM2LDggQEAKICNpbmNsdWRlICJUZXh0dXJl
TWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJXZWJLaXQu
aCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRU
aHJlYWRQcm94eS5oIgpAQCAtNTAsNiArNTMsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgewpAQCAtNjAsNiArNjQsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJl
ZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlT25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNP
bkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0KSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KQEAgLTkxLDYgKzk2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgbV90ZXN0SG9va3MtPmRyYXdMYXllcnNPbkNDVGhyZWFkKHRoaXMpOwogICAgIH0KIAorcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZU1zKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVy
cyhmcmFtZUJlZ2luVGltZU1zKTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFuaW1hdGVMYXllcnMo
dGhpcyk7CisgICAgfQorCiBwcml2YXRlOgogICAgIE1vY2tMYXllclRyZWVIb3N0SW1wbChUZXN0
SG9va3MqIHRlc3RIb29rcywgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVl
SG9zdEltcGxDbGllbnQqIGNsaWVudCkKICAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKHNl
dHRpbmdzLCBjbGllbnQpCkBAIC0xMzIsNiArMTQ0LDI1IEBAIHByaXZhdGU6CiAgICAgVGVzdEhv
b2tzKiBtX3Rlc3RIb29rczsKIH07CiAKKy8vIEFkYXB0cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlciBmb3IgdGVzdC4gQWRkcyBhIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIGFkZEFuaW1hdGlv
biB0aGF0IGluc2VydHMgYSBmbG9hdCBhbmltYXRpb24uCisvLyBGSVhNRTogb25jZSBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uIGlzIGltcGxlbWVudGVkLCB0aGF0IGZ1
bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZGlyZWN0bHkgYW5kIHRoaXMKKy8vIGNsYXNzIGNhbiBi
ZSByZW1vdmVkLgorY2xhc3MgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8TW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcik7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBp
bnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBkb3VibGUgdGltZU9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IDA7CisgICAgICAgIGFjdGl2ZUFuaW1hdGlvbnMoKS5h
cHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbihkdXJhdGlvbiwgMSwgMCkpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwog
Y2xhc3MgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tp
bmcgOiBwdWJsaWMgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQz
RFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzKQpAQCAtMjI2LDcg
KzI1Nyw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQ29tcG9zaXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkK
KyAgICB7CisgICAgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1vY2tMYXllclRyZWVIb3N0
Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tzKSA6IG1fdGVzdEhvb2tzKHRlc3RIb29rcykgeyB9
CkBAIC0yNTYsNiArMjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChD
Q0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZSwgdGhpcyk7CiAgICAg
fQogCisgICAgdm9pZCBwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKKyAgICB7CisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hBZGRBbmlt
YXRpb24sIHRoaXMpOworICAgIH0KKwogICAgIHZvaWQgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWlu
VGhyZWFkKCkKICAgICB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0
VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0NvbW1pdCwgdGhpcyk7CkBAIC0yNzEsNyArMzA5LDYgQEAg
cHVibGljOgogICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRp
c3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0LCB0aGlzKTsKICAgICB9CiAKLQogICAgIHZv
aWQgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQoYm9vbCB2aXNpYmxlKQogICAgIHsKICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZCh2aXNpYmxlID8gQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0
Y2hTZXRWaXNpYmxlIDogQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRJbnZpc2libGUs
IHRoaXMpOwpAQCAtMzE0LDYgKzM1MSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgdGVzdC0+
bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0FuaW1hdGUoKTsKICAgICB9CiAKKyAgICBzdGF0aWMg
dm9pZCBkaXNwYXRjaEFkZEFuaW1hdGlvbih2b2lkKiBzZWxmKQorICAgIHsKKyAgICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3Rh
dGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOworICAgICAgQVNTRVJUKHRlc3Qp
OworICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhv
c3QtPnJvb3RMYXllcigpKQorICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExh
eWVyKCktPmFkZEFuaW1hdGlvbihLZXlmcmFtZVZhbHVlTGlzdChBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSksIEludFNpemUoKSwgMCwgMCwgMCwgMC4wKTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZUFuZENvbW1pdCh2b2lkKiBzZWxmKQogICAgIHsKICAg
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC00NjQsNiArNTEwLDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgbV9sYXllclRyZWVIb3N0ID0gTW9j
a0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExheWVyLCBt
X3NldHRpbmdzKTsKICAgICBBU1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QpOwogICAgIHJvb3RM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAgIHJvb3RM
YXllci0+c2V0TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKE1vY2tMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXI6OmNyZWF0ZSgpKTsKIAogICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKICAgICBiZWdpblRl
c3QoKTsKQEAgLTc5MCw2ICs4MzcsNDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTZXRO
ZWVkc0FuaW1hdGVJbnNpZGVBbmltYXRpb25DYWxsYmFjaywgcnVuTXVsdGlUaHJlYWQKICAgICBy
dW5UZXN0VGhyZWFkZWQoKTsKIH0KIAorLy8gQWRkIGEgbGF5ZXIgYW5pbWF0aW9uIGFuZCBjb25m
aXJtIHRoYXQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyBkb2VzIGdldAorLy8g
Y2FsbGVkIGFuZCBjb250aW51ZXMgdG8gZ2V0IGNhbGxlZC4KK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dFRlc3RBZGRBbmltYXRpb24gOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkg
eworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb24oKQorICAgICAg
ICA6IG1fbnVtQW5pbWF0ZXMoMCkKKyAgICAgICAgLCBtX2xheWVyVHJlZUhvc3RJbXBsKDApCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAg
ICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJbXBs
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX251bUFuaW1hdGVzKSB7CisgICAgICAgICAgICAvLyBU
aGUgYW5pbWF0aW9uIGhhZCB6ZXJvIGR1cmF0aW9uIHNvIGxheWVyVHJlZUhvc3RJbXBsIHNob3Vs
ZCBubworICAgICAgICAgICAgLy8gbG9uZ2VyIG5lZWQgdG8gYW5pbWF0ZSBpdHMgbGF5ZXJzLgor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyVHJlZUhvc3RJbXBsLT5uZWVkc0FuaW1hdGVM
YXllcnMoKSk7CisgICAgICAgICAgICBtX251bUFuaW1hdGVzKys7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fbnVt
QW5pbWF0ZXM7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9sYXllclRyZWVIb3N0SW1wbDsK
K307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uLCBydW5NdWx0aVRo
cmVhZCkKK3sKKyAgICBydW5UZXN0VGhyZWFkZWQoKTsKK30KKwogY2xhc3MgQ0NMYXllclRyZWVI
b3N0VGVzdFNjcm9sbFNpbXBsZSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25s
eSB7CiBwdWJsaWM6CiAgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3Qu
Y3BwCmluZGV4IDE1NTdhN2Q5MzIyY2M2YmUyMDZiZjUwYjAwYzBmNDcwNjNjNTQ3OGIuLjQ3MjRi
NGE0MzU2N2I0Mzk3OGRkYTdjMGQ2MWE4NDJkOGQ0ODI5ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0yNiwx
MyArMjYsMTYgQEAKIAogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKIAorI2luY2x1ZGUg
IkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAogbmFtZXNwYWNl
IHsKIApAQCAtOTEsNiArOTQsMzAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8aW50PiogbV9jY0xh
eWVyRGVzdHJ1Y3Rpb25MaXN0OwogfTsKIAorY2xhc3MgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlciA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRmFrZUxheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcik7CisgICAgfQorCisgICAgYm9vbCBzeW5jaHJvbml6ZWRBbmltYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9zeW5jaHJvbml6ZWRBbmltYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAg
RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpCisgICAgICAgIDogbV9zeW5jaHJvbml6ZWRB
bmltYXRpb25zKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxl
ckltcGwpCisgICAgeworICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hy
b25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsKTsKKyAgICAgICAgbV9zeW5jaHJvbml6ZWRB
bmltYXRpb25zID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG1fc3luY2hyb25pemVkQW5pbWF0
aW9uczsKK307CisKIHZvaWQgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIENDTGF5ZXJJbXBsKiBjY0xheWVyKQogewogICAgIEFTU0VSVF9UUlVFKGxheWVyKTsK
QEAgLTMwNyw1ICszMzQsMTkgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tS
ZXBsaWNhQW5kUmVwbGljYU1hc2tMYXllcnMpCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIH0KIAorVEVTVChU
cmVlU3luY2hyb25pemVyVGVzdCwgc3luY2hyb25pemVBbmltYXRpb25zKQoreworICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXll
clRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisKKyAgICBsYXllclRyZWVSb290
LT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cjo6Y3JlYXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKHN0YXRpY19jYXN0PEZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIqPihsYXllclRyZWVSb290LT5sYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXIoKSktPnN5bmNocm9uaXplZEFuaW1hdGlvbnMoKSk7CisKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJl
ZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8RmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlcio+KGxheWVyVHJlZVJvb3QtPmxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpKS0+c3luY2hyb25pemVkQW5pbWF0aW9ucygpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128279</attachid>
            <date>2012-02-22 13:36:59 -0800</date>
            <delta_ts>2012-02-22 17:22:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75874-20120222163658.patch</filename>
            <type>text/plain</type>
            <size>135389</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2JkMGI0MjE5NWE2MzU3
MTZiYzBkOWY4YmU5NmI3OGM1ZTg2YmQxMS4uYTA1MTNlNDZhYTU4NzIzNjk3MzE5MmYwM2UwMTYy
YmY0NjNmZWExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MCBAQAorMjAxMi0wMi0yMiAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dW1iIGZyb20gR3JhcGhpY3NMYXllciB0byB0aGUgY2MgdGhyZWFkIGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXR0aW5nczo6c2V0VGhyZWFkZWRBbmltYXRpb25FbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNldHRpbmdzOjp0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQpOgorICAgICAgICAo
U2V0dGluZ3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChzdGQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2hyb21pdW06OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzdXNwZW5kQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250
ZW50c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVMYXllclByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6bWFwQW5pbWF0aW9uTmFtZVRvSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoR3JhcGhpY3NM
YXllckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cGF1
c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnN1c3BlbmRBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJBbmltYXRpb25Db250
cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNXYWl0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppc1J1bm5pbmdPckhhc1J1bik6
CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzeW5jaHJvbml6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmg6CisgICAgICAgIChDQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6QW5pbWF0aW9uU2lnbmF0dXJlOjpBbmltYXRpb25TaWdu
YXR1cmUpOgorICAgICAgICAoQW5pbWF0aW9uU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDQWN0aXZlQW5pbWF0aW9uOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1h
dGlvbjo6Z3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnNpZ25h
dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRp
b25DdXJ2ZS5oOgorICAgICAgICAoQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvbkV2ZW50cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uU3RhcnRlZEV2ZW50OjpDQ0Fu
aW1hdGlvblN0YXJ0ZWRFdmVudCk6CisgICAgICAgIChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjp+Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3lu
Y2hyb25pemVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpyZW1vdmVDb21wbGV0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
QW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1hdGlvblByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmdldEFjdGl2ZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVtb3Zl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXI6OmFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6On5DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNo
ZWRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOgorICAgICAgICAoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OkND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvcGFjaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckltcGw6OmJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6bGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRBbmltYXRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJs
ZU9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRp
bmdzKToKKyAgICAgICAgKENDU2V0dGluZ3MpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bmVlZHNBbmltYXRlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQW5pbWF0
ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVidWdTY29wZWRTZXRNYWluVGhyZWFkOjpEZWJ1Z1Njb3BlZFNldE1haW5U
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVidWdTY29wZWRTZXRNYWluVGhyZWFkOjp+RGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXRBbmltYXRp
b25FdmVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaDoKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEyLTAyLTIxICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtJbnNwZWN0b3JJbmRleGVkREJdIFNob3cgSW5kZXhlZERCIHZpZXdzIG9uIHNlbGVjdGlv
biBJbmRleGVkREIgZWxlbWVudHMgaW4gcmVzb3VyY2VzIHBhbmVsLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkZjQyMmZiMTY4MDI5YmY3Yjc5MjNmZGExZDgyOWVlNDY3OTFmNjg1Li43
ZTY1NmQ2NDE0OTYxNTQ3Y2VjYjQyMjEyYmMxMmY2MmIwZjA5ZjdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDEyLTAyLTIyICBJYW4gVm9sbGljayAgPHZv
bGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUGx1bWIgZnJvbSBHcmFw
aGljc0xheWVyIHRvIHRoZSBjYyB0aHJlYWQgYW5pbWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODc0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAg
KiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5
ZXJUcmVlVmlldy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5n
czo6U2V0dGluZ3MpOgorICAgICAgICAoU2V0dGluZ3MpOgorICAgICAgICAqIHNyYy9XZWJMYXll
clRyZWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGlu
Z3M6Om9wZXJhdG9yIENDU2V0dGluZ3MpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFRocmVhZGVkQW5pbWF0
aW9uRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5n
c0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgICogdGVzdHMvQ0NBY3RpdmVBbmltYXRpb25U
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAg
ICAgICogdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXRUZXN0cyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtl
RmxvYXRBbmltYXRpb25DdXJ2ZTo6fkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y2xvbmUpOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpGYWtlVHJhbnNmb3JtVHJhbnNp
dGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246On5G
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJh
bnNmb3JtVHJhbnNpdGlvbjo6Y2xvbmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9h
dFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VGbG9hdFRyYW5zaXRpb246On5GYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6OkZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpG
YWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkZha2VMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlRmxvYXRU
cmFuc2l0aW9uOjpjbG9uZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6YWRkT3BhY2l0eVRyYW5z
aXRpb24pOgorICAgICAgICAqIHRlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0VGVzdHMpOgorICAgICAgICAoRmFr
ZUZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKToKKyAgICAgICAgKEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6ZHVy
YXRpb24pOgorICAgICAgICAoRmFrZUZsb2F0VHJhbnNpdGlvbik6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoRmFrZUxheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZh
a2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50OjppZCk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6Om9wYWNpdHkp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Q2xpZW50OjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbENsaWVudDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6c2V0VHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudDo6Ym91bmRzKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdFRlc3RzOjpjcmVhdGVBY3RpdmVBbmlt
YXRpb24pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
VGVzdHMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dDo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZCk6CisgICAgICAg
ICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRlc3RIb29r
czo6YW5pbWF0ZUxheWVycyk6CisgICAgICAgIChNb2NrTGF5ZXJUcmVlSG9zdEltcGwpOgorICAg
ICAgICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVMYXllcnMpOgorICAgICAg
ICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xh
eWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdURik6Cisg
ICAgICAgIChNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKFdURjo6TW9j
a0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6TW9ja0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdURjo6TW9j
a0xheWVyVHJlZUhvc3RDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRlKToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdDo6cG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCk6CisgICAg
ICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0
VGVzdDo6ZGlzcGF0Y2hBZGRBbmltYXRpb24pOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhv
c3RUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5p
bWF0aW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbjo6
Q0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5
ZXJUcmVlSG9zdFRlc3RBZGRBbmltYXRpb246OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0QWRkQW5pbWF0aW9uOjphZnRlclRlc3QpOgorICAgICAgICAo
V1RGOjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoK
KyAgICAgICAgKEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0
VGVzdHM6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVkQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJv
bGxlcjo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXRUZXN0
czo6RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6c3luY2hyb25pemVBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpURVNUKToKKwog
MjAxMi0wMi0yMiAgSGFvIFpoZW5nICA8emhlbmdoYW9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gQnVpbGQgV2ViS2l0IHdpdGggTUVESUFfU1RSRUFNIGRpc2FibGVkLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDU4Y2FhYTFjOGNmNjBmYTYwYjA2YmMxZTE0M2JiNWVhOTZhYmEyNzEu
LmM0NWM4ZDg4OTMyMjA4MTNkZDRhMjI5Y2QzZjRkZWM2MWMzOWI5NWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTMyNDQsNiArMzI0NCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25SZXN1bHRz
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
RHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCkBAIC0zMjYxLDYgKzMyNjIsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hl
YWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDY0ZjhlMDU4NTQ0ZjgzNjA4ZTFhMjY2MjM5MTE1
MDVmMGRkMzY5NGIuLjkzN2Q5OTQyNTJiM2EyZGM3NmQyYjdjMWM2MTUxNTM2MmE2ZTllMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC0yNDQsNiArMjQ0LDcgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAsIG1fdG91
Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1fdGhyZWFkZWRB
bmltYXRpb25FbmFibGVkKGZhbHNlKQogICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHlU
aW1lcih0aGlzLCAmU2V0dGluZ3M6OmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseVRpbWVyRmlyZWQp
CiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2Ug
aW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IGYx
OWI0YzExZmYxNWQ2Y2NlNzI2ODJmZDU3ZDljOGY1YmM5ODM1ZDkuLjBiZTdlYzA4ZGRkMDNmZThk
MjZjYmE1MjI5OTY1ZjE0NGZiYWRiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTUzNiw2
ICs1MzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNUb3VjaEV2ZW50
RW11bGF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudEVtdWxhdGlvbkVu
YWJsZWQ7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgc2V0VGhyZWFkZWRBbmltYXRpb25FbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7
IH0KKyAgICAgICAgYm9vbCB0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX3RocmVhZGVkQW5pbWF0aW9uRW5hYmxlZDsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
U2V0dGluZ3MoUGFnZSopOwogCkBAIC02ODYsNiArNjg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgICAgIGJvb2wgbV90b3VjaEV2ZW50RW11
bGF0aW9uRW5hYmxlZCA6IDE7CiAjZW5kaWYKKyAgICAgICAgYm9vbCBtX3RocmVhZGVkQW5pbWF0
aW9uRW5hYmxlZCA6IDE7CiAKICAgICAgICAgVGltZXI8U2V0dGluZ3M+IG1fbG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5VGltZXI7CiAgICAgICAgIHZvaWQgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
VGltZXJGaXJlZChUaW1lcjxTZXR0aW5ncz4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDUxZjIwNDNmYzU0YjQ1ZGNhYTQ2NDM0OGM5NDc3Zjg3YTQ2MjRmYTUu
LmNkZWNmNTkxNzM5ODY3MmU1YmRhZGI0YjExZDdlYzMyOTVjYmVkNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNjEsNiArNjEsMTAgQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAorbmFtZXNwYWNlIHsKK3N0YXRpYyBpbnQgc19uZXh0R3JvdXBJZCA9IDA7
Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBH
cmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpAQCAtMTI0
LDcgKzEyOCw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25z
dCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHZvaWQgR3JhcGhpY3NMYXllckNo
cm9taXVtOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQogewogICAgIEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotICAgIGlmICghbV9pblNldENoaWxkcmVu
KSAKKyAgICBpZiAoIW1faW5TZXRDaGlsZHJlbikKICAgICAgICAgdXBkYXRlQ2hpbGRMaXN0KCk7
CiB9CiAKQEAgLTM4Miw2ICszODYsMzEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKICAgICAgICAg
dXBkYXRlQ2hpbGRMaXN0KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmFkZEFu
aW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgbWFwQW5pbWF0aW9uTmFtZVRvSWQo
YW5pbWF0aW9uTmFtZSksIHNfbmV4dEdyb3VwSWQrKywgdGltZU9mZnNldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIG1fbGF5ZXItPnBhdXNlQW5pbWF0
aW9uKG1hcEFuaW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpLCB0aW1lT2Zmc2V0KTsKK30K
Kwordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAgbV9sYXllci0+cmVtb3ZlQW5pbWF0aW9uKG1hcEFu
aW1hdGlvbk5hbWVUb0lkKGFuaW1hdGlvbk5hbWUpKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXIt
PnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOworfQorCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9sYXllci0+cmVzdW1lQW5pbWF0aW9ucygp
OworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb01lZGlhKFBs
YXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7
CkBAIC0zOTYsMTIgKzQyNSwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRy
dWU7Ci0gIAorCiAgICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVyIHdpbGwgYmUg
cmVtb3ZlZCB2aWEgdXBkYXRlQ2hpbGRMaXN0LgogICAgICAgICAgICAgbV9jb250ZW50c0xheWVy
ID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgCisKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQog
ICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKIH0KQEAgLTU1MCw3ICs1NzksNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiAgICAgICAgIG1f
bGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJhbnNm
b3JtKGlkZW50aXR5KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2V0IHRoZSBvbGQgbGF5ZXIg
dG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhlIG9wYWNpdHkgb24g
dGhlIHRyYW5zZm9ybSBsYXllci4KICAgICAgICAgbV9sYXllci0+c2V0T3BhY2l0eSgxKTsKIApA
QCAtNjg5LDYgKzcxOCwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlYwogICAgIHBhaW50R3Jh
cGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQogCitpbnQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjptYXBBbmltYXRpb25OYW1lVG9JZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFpbnRhaW4gYSBuYW1lIHRvIGlkIG1hcHBp
bmcgaW4gdGhpcyBjbGFzcy4KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBkYmYxNWU1MWRiMTBiN2JkNjUxNTZkZThlN2Q4
MDE5M2ZmODdiMGQzLi5lYjMxNDZiYmQyYjUzMDg5MmI0YmFhZmMzYmFkYjMzNTRlNDQ3MjIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtOTUsNiArOTUsMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciop
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsK
IAorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcm
LCBkb3VibGUgdGltZU9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMTMyLDYgKzEzOCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXR1cENvbnRlbnRzTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogICAgIGZsb2F0IGNv
bnRlbnRzU2NhbGUoKSBjb25zdDsKIAorICAgIGludCBtYXBBbmltYXRpb25OYW1lVG9JZChjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOworCiAgICAgU3RyaW5nIG1fbmFtZUJhc2U7CiAKICAg
ICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IG1fbGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGRmMjU5OGZmNzFiMDg1OTg2NTY1YWIxNWU2MzNlYjgyN2M5MjFkOWQuLjUzM2Qx
OWM1YjA3MzNlMDZiNzRhYzQxYzhhZGFjNmJlZDY1ZWEzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpZiBVU0UoU0tJQSkKQEAgLTU5LDYgKzYwLDcgQEAgTGF5
ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSgpCiAgICAgOiBtX25lZWRzRGlzcGxheShmYWxzZSkK
ICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQorICAg
ICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6
OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxhYmxlKGZhbHNlKQogICAgICwgbV9hbmNob3JQb2lu
dCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCkBAIC05Miw2
ICs5NCw0NyBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgcmVtb3ZlQWxs
Q2hpbGRyZW4oKTsKIH0KIAorYm9vbCBMYXllckNocm9taXVtOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3Qg
QW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJs
ZSB0aW1lT2Zmc2V0KQoreworICAgIGlmICghbV9sYXllclRyZWVIb3N0IHx8ICFtX2xheWVyVHJl
ZUhvc3QtPnNldHRpbmdzKCkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBib29sIGFkZGVkQW5pbWF0aW9uID0gbV9sYXllckFuaW1hdGlvbkNv
bnRyb2xsZXItPmFkZEFuaW1hdGlvbih2YWx1ZXMsIGJveFNpemUsIGFuaW1hdGlvbiwgYW5pbWF0
aW9uSWQsIGdyb3VwSWQsIHRpbWVPZmZzZXQpOworICAgIGlmIChhZGRlZEFuaW1hdGlvbikKKyAg
ICAgICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICByZXR1cm4gYWRkZWRBbmltYXRpb247Cit9CisK
K3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3Vi
bGUgdGltZU9mZnNldCkKK3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cGF1c2VB
bmltYXRpb24oYW5pbWF0aW9uSWQsIHRpbWVPZmZzZXQpOworICAgIHNldE5lZWRzQ29tbWl0KCk7
Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25J
ZCkKK3sKKyAgICBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci0+cmVtb3ZlQW5pbWF0aW9uKGFu
aW1hdGlvbklkKTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIExheWVyQ2hyb21p
dW06OnN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fbGF5ZXJBbmltYXRp
b25Db250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKKyAgICBzZXROZWVkc0NvbW1p
dCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAg
IG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgc2V0
TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKQoreworICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyID0g
bGF5ZXJBbmltYXRpb25Db250cm9sbGVyOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKIHZv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChib29sIGlzTm9uQ29t
cG9zaXRlZENvbnRlbnQpCiB7CiAgICAgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50ID0gaXNOb25D
b21wb3NpdGVkQ29udGVudDsKQEAgLTQ0MSw2ICs0ODQsOCBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGlmIChyZXBsaWNhTGF5
ZXIoKSkKICAgICAgICAgcmVwbGljYUxheWVyKCktPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXItPnJl
cGxpY2FMYXllcigpKTsKIAorICAgIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLT5zeW5jaHJv
bml6ZUFuaW1hdGlvbnMobGF5ZXItPmxheWVyQW5pbWF0aW9uQ29udHJvbGxlcigpKTsKKwogICAg
IC8vIFJlc2V0IGFueSBzdGF0ZSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIGZvciB0aGUgbmV4dCB1
cGRhdGUuCiAgICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKaW5kZXggZmYyZTdkMjg2MjYyMmZhZDJjMDY5MzhkNmY1MjU2OTE0MGY4ODNmYS4uOTJmYjAx
M2ZiYjdmYTc1OTYyN2Q1OGJmNTFmMzBiM2NkYmJmZmI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApA
QCAtNTIsNiArNTIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3Q7CiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVyOwpAQCAtNjEsNyArNjIsNiBAQCBjbGFzcyBS
ZWdpb247CiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXll
ciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKLSAgICBmcmllbmQgY2xh
c3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNyZWF0ZSgpOwogCkBAIC0yMTUsNyArMjE1LDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsd2F5c1Jlc2VydmVUZXh0dXJlcyhib29sIGFsd2F5c1Jlc2VydmVUZXh0dXJl
cykgeyBtX2Fsd2F5c1Jlc2VydmVUZXh0dXJlcyA9IGFsd2F5c1Jlc2VydmVUZXh0dXJlczsgfQog
ICAgIGJvb2wgYWx3YXlzUmVzZXJ2ZVRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNS
ZXNlcnZlVGV4dHVyZXM7IH0KIAorICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50
IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZvaWQg
cGF1c2VBbmltYXRpb24oaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCk7CisgICAg
dm9pZCByZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKTsKKworICAgIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwor
CisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIqIGxheWVyQW5pbWF0aW9uQ29udHJvbGxl
cigpIHsgcmV0dXJuIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcj4pOworCiBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIENDTGF5ZXJJbXBs
OworICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CisgICAgZnJpZW5kIGNsYXNz
IFRyZWVTeW5jaHJvbml6ZXI7CisKICAgICBMYXllckNocm9taXVtKCk7CiAKICAgICBib29sIGlz
UGFpbnRlZEF4aXNBbGlnbmVkSW5TY3JlZW4oKSBjb25zdDsKQEAgLTIzMyw4ICsyNDcsNiBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5ZXI7CiAKLSAg
ICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKLSAgICBmcmllbmQgY2xhc3MgQ0NMYXll
ckltcGw7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1
bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogICAgIGludCBtX2xheWVy
SWQ7CkBAIC0yNDMsMTAgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYXJlbnQoTGF5
ZXJDaHJvbWl1bSopOwogICAgIGJvb2wgaGFzQW5jZXN0b3IoTGF5ZXJDaHJvbWl1bSopIGNvbnN0
OwogCi0gICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICB9CisgICAgc2l6ZV90IG51bUNoaWxkcmVuKCkgY29u
c3QgeyByZXR1cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KIAogICAgIC8vIFJldHVybnMgdGhlIGlu
ZGV4IG9mIHRoZSBjaGlsZCBvciAtMSBpZiBub3QgZm91bmQuCiAgICAgaW50IGluZGV4T2ZDaGls
ZChjb25zdCBMYXllckNocm9taXVtKik7CkBAIC0yNTksNiArMjY4LDggQEAgcHJpdmF0ZToKIAog
ICAgIFJlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAorICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7
CisKICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAg
SW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5jcHAKaW5kZXggMjFlNmNjN2E5ZTI0NmVjMGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYS4uOWVm
NWZlMjU2MmI2YjQzMDJkMTFkMmE5ZGFhZmQwYzMwYzMyOWY4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMzIsOSArMzIsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxD
Q0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFy
Z2V0UHJvcGVydHkpCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBhbmlt
YXRpb25JZCwgaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorewor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NBY3RpdmVBbmltYXRpb24oY3VydmUsIGFuaW1hdGlv
bklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSkpOworfQorCitDQ0FjdGl2ZUFuaW1hdGlvbjo6
Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgaW50
IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
CiAgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZlKQotICAgICwgbV9ncm91cChncm91cCkKKyAg
ICAsIG1faWQoYW5pbWF0aW9uSWQpCisgICAgLCBtX2dyb3VwKGdyb3VwSWQpCiAgICAgLCBtX3Rh
cmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQogICAgICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KQogICAgICwgbV9pdGVyYXRpb25zKDEpCkBAIC00NCw2ICs1MCwx
MCBAQCBDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRAogewogfQogCitDQ0FjdGl2ZUFuaW1hdGlvbjo6
fkNDQWN0aXZlQW5pbWF0aW9uKCkKK3sKK30KKwogdm9pZCBDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0
UnVuU3RhdGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSBub3cpCiB7CiAgICAgaWYgKHJ1blN0
YXRlID09IFJ1bm5pbmcgJiYgbV9ydW5TdGF0ZSA9PSBQYXVzZWQpCkBAIC02Myw2ICs3MywyMSBA
QCBib29sIENDQWN0aXZlQW5pbWF0aW9uOjppc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0
CiAgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkg
PD0gdGltZSAtIHN0YXJ0VGltZSgpIC0gbV90b3RhbFBhdXNlZFRpbWU7CiB9CiAKK2Jvb2wgQ0NB
Y3RpdmVBbmltYXRpb246OmlzV2FpdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcnVuU3Rh
dGUgPT0gV2FpdGluZ0Zvck5leHRUaWNrCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eQorICAgICAgICB8fCBtX3J1blN0YXRlID09IFdhaXRpbmdG
b3JTdGFydFRpbWU7Cit9CisKK2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzUnVubmluZ09ySGFz
UnVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBSdW5uaW5nCisgICAgICAg
IHx8IG1fcnVuU3RhdGUgPT0gRmluaXNoZWQKKyAgICAgICAgfHwgbV9ydW5TdGF0ZSA9PSBBYm9y
dGVkCisgICAgICAgIHx8IG1fcnVuU3RhdGUgPT0gUGF1c2VkOworfQorCiBkb3VibGUgQ0NBY3Rp
dmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cpIGNvbnN0
CiB7CiAgICAgZG91YmxlIHRyaW1tZWQgPSBub3c7CkBAIC05NSw0ICsxMjAsMzYgQEAgZG91Ymxl
IENDQWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93
KSBjb25zdAogICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0
aW9uKCkpOwogfQogCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y2xvbmVGb3JJbXBsVGhyZWFkKCkgY29uc3QKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvUmV0dXJuKGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihtX2FuaW1h
dGlvbkN1cnZlLT5jbG9uZSgpLCBtX2lkLCBtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KSkpOwor
ICAgIHRvUmV0dXJuLT5tX3J1blN0YXRlID0gbV9ydW5TdGF0ZTsKKyAgICB0b1JldHVybi0+bV9p
dGVyYXRpb25zID0gbV9pdGVyYXRpb25zOworICAgIHRvUmV0dXJuLT5tX3N0YXJ0VGltZSA9IG1f
c3RhcnRUaW1lOworICAgIHRvUmV0dXJuLT5tX3BhdXNlVGltZSA9IG1fcGF1c2VUaW1lOworICAg
IHRvUmV0dXJuLT5tX3RvdGFsUGF1c2VkVGltZSA9IG1fdG90YWxQYXVzZWRUaW1lOworICAgIHJl
dHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnN5
bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiogb3RoZXIpCit7CisgICAgLy8g
SXQgaXMgcG9zc2libGUgZm9yIHRoZSBpbXBsIHRocmVhZCB0byBpbml0aWF0ZSBhIHJ1biBzdGF0
ZSBjaGFuZ2UuCisgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGFuaW1hdGlvbiB3YXMgd2Fp
dGluZyBmb3IgYSBmdXR1cmUgZXZlbnQgdG8gdGFrZQorICAgIC8vIHBsYWNlLCBhbmQgdGhlIGV2
ZW50IGhhcyBoYXBwZW5lZC4gSW4gdGhhdCBjYXNlLCB3ZSB3YW50ICd0aGlzJyB0bworICAgIC8v
IGFzc3VtZSB0aGUgaW1wbCB0aHJlYWQncyBydW4gc3RhdGUgYW5kIHN0YXJ0IHRpbWUuCisgICAg
aWYgKGlzV2FpdGluZygpICYmIG90aGVyLT5pc1J1bm5pbmdPckhhc1J1bigpKSB7CisgICAgICAg
IG1fcnVuU3RhdGUgPSBvdGhlci0+bV9ydW5TdGF0ZTsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBv
dGhlci0+bV9zdGFydFRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3RoZXItPm1fcnVuU3Rh
dGUgPSBtX3J1blN0YXRlOworICAgICAgICBvdGhlci0+bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGlt
ZTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2UgaW4gc3RhdGUgcmVsYXRlZCB0byBpdGVyYXRpb25z
IGFuZCBwYXVzZSBpcyBhbHdheXMgaW5pdGlhdGVkIGZyb20KKyAgICAvLyB0aGUgbWFpbiB0aHJl
YWQsIHNvIGl0IGlzIHNhZmUgdG8gcHVzaCBwcm9wZXJ0aWVzIGluIHRoYXQgZGlyZWN0aW9uLgor
ICAgIG90aGVyLT5tX2l0ZXJhdGlvbnMgPSBtX2l0ZXJhdGlvbnM7CisgICAgb3RoZXItPm1fcGF1
c2VUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgb3RoZXItPm1fdG90YWxQYXVzZWRUaW1lID0gbV90
b3RhbFBhdXNlZFRpbWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5p
bWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oCmluZGV4IGMyMjIyNzk0MWEzY2VkMTJkNjU4ZDc2ZDYwNGVlZTlm
YmFkMGEzZDEuLmFkOWU4NGVlNzkzZGRjNzE3N2NlY2ZiZDAxZTk1YzE3OWY3ZDIyYzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0
aXZlQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMjUsMjUgKzI1LDIwIEBACiAjaWZuZGVm
IENDQWN0aXZlQW5pbWF0aW9uX2gKICNkZWZpbmUgQ0NBY3RpdmVBbmltYXRpb25faAogCisjaW5j
bHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKLQogLy8g
QSBDQ0FjdGl2ZUFuaW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSByZXF1aXJlZCB0byBw
bGF5IGEgQ0NBbmltYXRpb25DdXJ2ZS4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGFmZmVjdGVkIHBy
b3BlcnR5LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVkLCBldGMuKSwKIC8vIGxvb3Ag
Y291bnQsIGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0aW1lIHNwZW50IHBhdXNlZC4K
IGNsYXNzIENDQWN0aXZlQW5pbWF0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0Fj
dGl2ZUFuaW1hdGlvbik7CiBwdWJsaWM6Ci0gICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3QgYmUg
cnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdyb3Vw
SUQKLSAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQg
dGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucwotICAgIC8vIG1heSBhbmltYXRl
IGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0aW9u
cyBpbiB0aGUKLSAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTogYW4g
YWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKLSAgICAvLyBwcm9wZXJ0eSB1
bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KLSAgICB0eXBlZGVmIGludCBHcm91cElE
OwotCiAgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0
ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5leHQgdGljawogICAgIC8vIHdpbGwgc3Rh
cnQgdGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0
aW5nIGZvciB0YXJnZXQKICAgICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0
aGVpciB0YXJnZXQgcHJvcGVydHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucwpAQCAt
NjgsMTQgKzYzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgT3BhY2l0eQogICAgIH07CiAKLSAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlKFBhc3NPd25QdHI8Q0NB
bmltYXRpb25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdl
dFByb3BlcnR5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0FjdGl2ZUFu
aW1hdGlvbihjdXJ2ZSwgZ3JvdXAsIHRhcmdldFByb3BlcnR5KSk7Ci0gICAgfQorICAgIHN0cnVj
dCBBbmltYXRpb25TaWduYXR1cmUgeworICAgICAgICBBbmltYXRpb25TaWduYXR1cmUoaW50IGdy
b3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgICAgICAgICAgOiBncm91
cElkKGdyb3VwSWQpCisgICAgICAgICAgICAsIHRhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5
KSB7IH0KKyAgICAgICAgaW50IGdyb3VwSWQ7CisgICAgICAgIFRhcmdldFByb3BlcnR5IHRhcmdl
dFByb3BlcnR5OworICAgIH07CiAKLSAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsg
fQorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFzc093
blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgaW50IGFuaW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgVGFy
Z2V0UHJvcGVydHkpOwogCi0gICAgR3JvdXBJRCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jv
dXA7IH0KKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpOworCisgICAgaW50IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGludCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z3JvdXA7IH0KICAgICBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KIAogICAgIFJ1blN0YXRlIHJ1blN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9ydW5TdGF0ZTsgfQpAQCAtOTMsNiArOTQsOSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OwogICAgIGJvb2wgaXNGaW5pc2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBB
Ym9ydGVkOyB9CiAKKyAgICBib29sIGlzV2FpdGluZygpIGNvbnN0OworICAgIGJvb2wgaXNSdW5u
aW5nT3JIYXNSdW4oKSBjb25zdDsKKwogICAgIENDQW5pbWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1
cnZlKCkgeyByZXR1cm4gbV9hbmltYXRpb25DdXJ2ZS5nZXQoKTsgfQogICAgIGNvbnN0IENDQW5p
bWF0aW9uQ3VydmUqIGFuaW1hdGlvbkN1cnZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25D
dXJ2ZS5nZXQoKTsgfQogCkBAIC0xMDAsMTEgKzEwNCwyNyBAQCBwdWJsaWM6CiAgICAgLy8gb2Yg
aXRlcmF0aW9ucywgcmV0dXJucyB0aGUgcmVsYXRpdmUgdGltZSBpbiB0aGUgY3VycmVudCBpdGVy
YXRpb24uCiAgICAgZG91YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSBub3cp
IGNvbnN0OwogCisgICAgQW5pbWF0aW9uU2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIEFuaW1hdGlvblNpZ25hdHVyZShtX2dyb3VwLCBtX3RhcmdldFByb3BlcnR5KTsgfQorCisg
ICAgUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY2xvbmVGb3JJbXBsVGhyZWFkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHN5bmNocm9uaXplUHJvcGVydGllcyhDQ0FjdGl2ZUFuaW1hdGlvbiop
OworCiBwcml2YXRlOgotICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRp
b25DdXJ2ZT4sIEdyb3VwSUQsIFRhcmdldFByb3BlcnR5KTsKKyAgICBDQ0FjdGl2ZUFuaW1hdGlv
bihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+LCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91
cElkLCBUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICBPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gbV9h
bmltYXRpb25DdXJ2ZTsKLSAgICBHcm91cElEIG1fZ3JvdXA7CisKKyAgICAvLyBJRHMgYXJlIG5v
dCBuZWNlc3NhcmlseSB1bmlxdWUuCisgICAgaW50IG1faWQ7CisKKyAgICAvLyBBbmltYXRpb25z
IHRoYXQgbXVzdCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcgYW5kIGhhdmUg
dGhlIHNhbWUgZ3JvdXAgaWQKKyAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRl
ZWQgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0aW9ucworICAg
IC8vIG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRp
bCBhbGwgYW5pbWF0aW9ucyBpbiB0aGUKKyAgICAvLyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1h
dGluZy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKKyAg
ICAvLyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4KKyAgICBpbnQg
bV9ncm91cDsKKwogICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7CiAgICAgUnVu
U3RhdGUgbV9ydW5TdGF0ZTsKICAgICBpbnQgbV9pdGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oCmluZGV4IGRlOTdlMzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJh
ZTMuLjUzM2FiYWZlZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1NTE2NjdlZTI0ZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDYgKzI1LDEwIEBACiAjaWZuZGVmIENDQW5pbWF0
aW9uQ3VydmVfaAogI2RlZmluZSBDQ0FuaW1hdGlvbkN1cnZlX2gKIAorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDRmxvYXRBbmltYXRpb25DdXJ2ZTsKQEAgLTQxLDYg
KzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNz
T3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgPSAwOwogCiAgICAgY29uc3Qg
Q0NGbG9hdEFuaW1hdGlvbkN1cnZlKiB0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKICAg
ICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiB0b1RyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKCkgY29uc3Q7CkBAIC02MCw3ICs2NSw3IEBAIGNsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgOiBwdWJsaWMgQ0NBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsgfQogCi0gICAgdmlydHVhbCBUcmFuc2Zvcm1P
cGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJT
aXplKSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0
aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkV2ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjFhNzllMzEzOTdl
Yzg4ZTNkNTk0ZTkyMzI2M2MxZWI4MDMzZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FdmVudHMuaApA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uRXZlbnRz
X2gKKyNkZWZpbmUgQ0NBbmltYXRpb25FdmVudHNfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEluZGljYXRlcyB0aGF0IGFuIGFuaW1hdGlv
biBoYXMgc3RhcnRlZCBvbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCitzdHJ1Y3QgQ0NBbmltYXRpb25T
dGFydGVkRXZlbnQgeworICAgIENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KGludCBsYXllcklELCBk
b3VibGUgdGltZSkKKyAgICAgICAgOiBsYXllcklEKGxheWVySUQpCisgICAgICAgICwgdGltZSh0
aW1lKSB7IH0KKyAgICBpbnQgbGF5ZXJJRDsKKyAgICBkb3VibGUgdGltZTsKK307CisKK3R5cGVk
ZWYgVmVjdG9yPENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50PiBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
cjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25FdmVu
dHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk0NTUxZDljMGYyYWFhYTI4NzhmMDZmOWYwYjVjMGM4M2I0YjViNzYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiIC8vIGZv
ciBLZXlmcmFtZVZhbHVlTGlzdAorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlcjo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKQoreworfQorCitDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkKK3sKK30K
KworUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcik7Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBhbmltYXRpb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZ3JvdXBJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9u
KGludCBhbmltYXRpb25JZCwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBh
dXNlZCwgdGltZU9mZnNldCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyOjpyZW1vdmVBbmltYXRpb24oaW50IGFuaW1hdGlvbklkKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTspIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBhbmltYXRpb25JZCkKKyAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGkrKzsKKyAgICB9Cit9CisKKy8vIEFjY29yZGluZyB0byByZW5kZXIgbGF5ZXIgYmFja2luZywg
dGhlc2UgYXJlIGZvciB0ZXN0aW5nIG9ubHkuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sKK30KKworLy8gTG9va2luZyBh
dCBHcmFwaGljc0xheWVyQ0EsIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgYW5hbG9nIHRvIHN1c3Bl
bmRBbmltYXRpb25zLCB3aGljaCBpcyBmb3IgdGVzdGluZy4KK3ZvaWQgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQoreworfQorCisvLyBFbnN1cmVzIHRoYXQg
dGhlIGxpc3Qgb2YgYWN0aXZlIGFuaW1hdGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUg
aW1wbCB0aHJlYWQKKy8vIGFyZSBrZXB0IGluIHN5bmMuCit2b2lkIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICByZW1vdmVDb21wbGV0ZWRBbmltYXRpb25z
KGNvbnRyb2xsZXJJbXBsKTsKKyAgICBwdXNoTmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChjb250
cm9sbGVySW1wbCk7CisgICAgcmVtb3ZlQW5pbWF0aW9uc0NvbXBsZXRlZE9uTWFpblRocmVhZChj
b250cm9sbGVySW1wbCk7CisgICAgcHVzaEFuaW1hdGlvblByb3BlcnRpZXMoY29udHJvbGxlcklt
cGwpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmVDb21wbGV0
ZWRBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCogY29udHJvbGxlcklt
cGwpCit7CisgICAgLy8gQW55IGFuaW1hdGlvbnMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFk
IGFyZSByZW1vdmVkIGZyb20gdGhlIG1haW4gdGhyZWFkJ3MgY29sbGVjdGlvbi4KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0aW9ucy5z
aXplKCk7ICsraSkKKyAgICAgICAgcmVtb3ZlKGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5p
bWF0aW9uc1tpXS5ncm91cElkLCBjb250cm9sbGVySW1wbC0+bV9maW5pc2hlZEFuaW1hdGlvbnNb
aV0udGFyZ2V0UHJvcGVydHkpOworICAgIGNvbnRyb2xsZXJJbXBsLT5tX2ZpbmlzaGVkQW5pbWF0
aW9ucy5jbGVhcigpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpwdXNo
TmV3QW5pbWF0aW9uc1RvSW1wbFRocmVhZChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
IGNvbnRyb2xsZXJJbXBsKQoreworICAgIC8vIEFueSBuZXcgYW5pbWF0aW9ucyBvd25lZCBieSB0
aGUgbWFpbiB0aHJlYWQncyBjb250cm9sbGVyIGFyZSBjbG9uZWQgYW5kIGFkZGUgdG8gdGhlIGlt
cGwgdGhyZWFkJ3MgY29udHJvbGxlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWNvbnRyb2xsZXJJbXBs
LT5nZXRBY3RpdmVBbmltYXRpb24obV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpLCBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpKQorICAgICAgICAgICAgY29udHJv
bGxlckltcGwtPmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmNsb25lRm9ySW1wbFRocmVhZCgp
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlbW92ZUFu
aW1hdGlvbnNDb21wbGV0ZWRPbk1haW5UaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsKiBjb250cm9sbGVySW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFu
aW1hdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQg
YW5pbWF0aW9uLgorICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpIGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAv
LyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7KSB7CisgICAgICAgIENDQWN0aXZlQW5pbWF0aW9uKiBjdXJyZW50ID0gZ2V0QWN0aXZl
QW5pbWF0aW9uKGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCks
IGNvbnRyb2xsZXJJbXBsLT5tX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkp
OworICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICBjb250cm9sbGVySW1wbC0+bV9h
Y3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsr
OworICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6cHVzaEFuaW1h
dGlvblByb3BlcnRpZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVy
SW1wbCkKK3sKKyAgICAvLyBEZWxldGUgYWxsIGltcGwgdGhyZWFkIGFuaW1hdGlvbnMgZm9yIHdo
aWNoIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFpbiB0aHJlYWQgYW5pbWF0aW9uLgorICAg
IC8vIEVhY2ggaXRlcmF0aW9uLCBjb250cm9sbGVyLT5tX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
IGlzIGRlY3JlbWVudGVkIG9yIGkgaXMgaW5jcmVtZW50ZWQKKyAgICAvLyBndWFyYW50ZWVpbmcg
cHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29udHJvbGxlckltcGwtPm1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY3VycmVudEltcGwgPSBjb250cm9sbGVySW1wbC0+
bV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgICAgICBDQ0FjdGl2ZUFuaW1hdGlvbiog
Y3VycmVudCA9IGdldEFjdGl2ZUFuaW1hdGlvbihjdXJyZW50SW1wbC0+Z3JvdXAoKSwgY3VycmVu
dEltcGwtPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICBBU1NFUlQoY3VycmVudCk7CisgICAg
ICAgIGlmIChjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudC0+c3luY2hyb25pemVQcm9wZXJ0
aWVzKGN1cnJlbnRJbXBsKTsKKyAgICB9Cit9CisKK0NDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlcjo6Z2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gZ3JvdXBJZCAmJiBtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gdGFyZ2V0UHJvcGVydHkpCisg
ICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjpyZW1vdmUoaW50IGdy
b3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdy
b3VwSWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpID09IHRhcmdl
dFByb3BlcnR5KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NzA0YTYwMzMwNzQ0M2MwYTQyMjBlYTdhMGQ2N2IzZTYxOWM0Y2RmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyX2gKKyNkZWZpbmUg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBbmltYXRpb247CitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7
CitzdHJ1Y3QgSW50U2l6ZTsKK2NsYXNzIEtleWZyYW1lVmFsdWVMaXN0OworCitjbGFzcyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgfkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyKCk7CisKKyAgICAvLyBUaGVzZSBhcmUgdmlydHVhbCBmb3Ig
dGVzdGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgaW50IGFu
aW1hdGlvbklkLCBpbnQgZ3JvdXBJZCwgZG91YmxlIHRpbWVPZmZzZXQpOworICAgIHZpcnR1YWwg
dm9pZCBwYXVzZUFuaW1hdGlvbihpbnQgYW5pbWF0aW9uSWQsIGRvdWJsZSB0aW1lT2Zmc2V0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGludCBhbmltYXRpb25JZCk7CisgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworCisgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBsaXN0
IG9mIGFjdGl2ZSBhbmltYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIGltcGwgdGhy
ZWFkCisgICAgLy8gYXJlIGtlcHQgaW4gc3luYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtl
IG93bmVyc2hpcCBvZiB0aGUgaW1wbCB0aHJlYWQgY29udHJvbGxlci4KKyAgICB2aXJ0dWFsIHZv
aWQgc3luY2hyb25pemVBbmltYXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCop
OworCisgICAgLy8gVGhpcyBpcyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgIFZlY3Rv
cjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4mIGFjdGl2ZUFuaW1hdGlvbnMoKSB7IHJldHVy
biBtX2FjdGl2ZUFuaW1hdGlvbnM7IH0KKworcHJvdGVjdGVkOgorICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVyKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZW1vdmVDb21wbGV0ZWRBbmlt
YXRpb25zKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaE5l
d0FuaW1hdGlvbnNUb0ltcGxUaHJlYWQoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7
CisgICAgdm9pZCByZW1vdmVBbmltYXRpb25zQ29tcGxldGVkT25NYWluVGhyZWFkKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCopOworICAgIHZvaWQgcHVzaEFuaW1hdGlvblByb3BlcnRp
ZXMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKik7CisKKyAgICBDQ0FjdGl2ZUFuaW1h
dGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VGFyZ2V0UHJvcGVydHkpOworICAgIHZvaWQgcmVtb3ZlKGludCBncm91cElkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgVmVjdG9yPE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gPiBtX2FjdGl2ZUFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcAppbmRleCBi
YmNhOWNiZDkwNTVlMWVjMTNjYzBhOTc0NjM5YzVmOTcwODgwOTkyLi40ZjcyNzk4Y2E5Yzc3NmVi
YjMyYWYzNzExZTZlNWY0YzgwNzdmZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDI4ICs0NSwzMCBAQCBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVy
QW5pbWF0aW9uQwogewogfQogCi12b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQorQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjp+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKCkKIHsKLSAgICBzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzKTsKLSAgICBz
dGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vjcyk7Ci0g
ICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2lu
VGltZVNlY3MpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5p
bWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzLCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvciYg
ZXZlbnRzKQoreworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhmcmFtZUJl
Z2luVGltZVNlY3MsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CisgICAgc3RhcnRBbmltYXRpb25zV2Fp
dGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CiAg
ICAgcmVzb2x2ZUNvbmZsaWN0cyhmcmFtZUJlZ2luVGltZVNlY3MpOwogICAgIHRpY2tBbmltYXRp
b25zKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CiAgICAgcHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsK
LSAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVn
aW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eShmcmFtZUJlZ2luVGltZVNlY3MsIGV2ZW50cyk7CiB9CiAKIHZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5p
bSkKIHsKICAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOwotICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZh
dGUodGhpcyk7CiB9CiAKLUNDQWN0aXZlQW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6R3JvdXBJRCBn
cm91cCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQorQ0NBY3Rp
dmVBbmltYXRpb24qIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Z2V0QWN0aXZlQW5p
bWF0aW9uKGludCBncm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgcHJv
cGVydHkpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAo
KSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0g
cHJvcGVydHkpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0g
Z3JvdXBJZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gcHJv
cGVydHkpCiAgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmltYXRpb25zW2ldLmdldCgpOwog
ICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTgwLDI1ICs4MywyOCBAQCBib29sIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFy
dEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5vdykKK3ZvaWQgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2so
ZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImIGV2ZW50cykKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewogICAg
ICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5p
bWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2spIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CiAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAg
ICAgICAgICAgZXZlbnRzLmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+
aWQoKSwgbm93KSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGRvdWJs
ZSBub3cpCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93LCBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rv
ciYgZXZlbnRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1
blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUgJiYgbV9h
Y3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBub3cpCisgICAgICAgIGlmIChtX2Fj
dGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRp
bmdGb3JTdGFydFRpbWUgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSBu
b3cpIHsKICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7CisgICAgICAgICAgICBldmVudHMuYXBwZW5k
KENDQW5pbWF0aW9uU3RhcnRlZEV2ZW50KG1fY2xpZW50LT5pZCgpLCBub3cpKTsKKyAgICAgICAg
fQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdykKK3ZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3csIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBl
dmVudHMpCiB7CiAgICAgLy8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCiAgICAg
VGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsKQEAgLTEzMCw2ICsxMzYsNyBAQCB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eQogICAgICAgICAgICAgaWYgKG51bGxJbnRlcnNlY3Rpb24p
IHsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwogICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgZXZlbnRz
LmFwcGVuZChDQ0FuaW1hdGlvblN0YXJ0ZWRFdmVudChtX2NsaWVudC0+aWQoKSwgbm93KSk7CiAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmltYXRp
b25zLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwpAQCAtMTc4LDkgKzE4NSwxMCBAQCB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlv
bnMoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBpZiAoYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQpCisgICAgICAgIGlmIChhbGxBbmlt
c1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkgeworICAgICAgICAgICAgbV9maW5pc2hlZEFuaW1hdGlv
bnMuYXBwZW5kKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2lnbmF0dXJlKCkpOwogICAgICAgICAg
ICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgZWxzZQorICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGkrKzsKICAgICB9CiB9CkBAIC0xOTQsMTQgKzIwMiwxMSBAQCB2
b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6dGlja0FuaW1hdGlvbnMoZG91Ymxl
IG5vdykKIAogICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7
CiAgICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZl
KCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+
Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQs
IG1fY2xpZW50LT5ib3VuZHMoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCiAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBu
b3cpOwogCi0gICAgICAgICAgICAgICAgLy8gRGVjaWRlIGhlcmUgaWYgYWJzb2x1dGUgb3IgcmVs
YXRpdmUuIEFic29sdXRlIGZvciBub3cuCi0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdG9BcHBseTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGx5KEZsb2F0U2l6
ZSgpLCB0b0FwcGx5KTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKHRv
QXBwbHkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAppbmRleCAxYWQyMjNkYmE4
MjNhMmEwNTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Li4yOTYwNjZkZTAwMmUyNjQ0YTBhZDdhMDY5
NDE5NDc5YzAyZDhjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaApAQCAtMjcsOCArMjcsMTAgQEAKIAogI2luY2x1ZGUgImNjL0ND
QWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorI2lu
Y2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTQ0LDM1ICs0Niw0MSBAQCBjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGll
bnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCgpIHsgfQogCisgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFj
aXR5KGZsb2F0KSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
KikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgPSAwOwog
fTsKIAogY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwpOwogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY3Jl
YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOwogCi0gICAgdm9pZCBh
bmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHZpcnR1YWwgfkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbCgpOworCisgICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFt
ZUJlZ2luVGltZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJik7CiAKICAgICB2b2lkIGFk
ZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBh
Y3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBw
cm9wZXJ0eSBpZiBzdWNoIGFuCiAgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KLSAgICBDQ0FjdGl2
ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElE
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkpOworICAgIENDQWN0aXZlQW5pbWF0
aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oaW50IGdyb3VwSWQsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBh
bmltYXRpb25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCiAgICAgYm9v
bCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CisKICAgICAvLyBUaGUgYW5pbWF0b3IgaXMg
b3duZWQgYnkgdGhlIGxheWVyLgogICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKIAotICAgIHZv
aWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpOwotICAgIHZv
aWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KTsKLSAgICB2
b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5v
dyk7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZG91YmxlIG5v
dywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsK
KyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91
YmxlIG5vdywgQ0NBbmltYXRpb25FdmVudHNWZWN0b3ImKTsKICAgICB2b2lkIHJlc29sdmVDb25m
bGljdHMoZG91YmxlIG5vdyk7CiAgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOwog
CkBAIC04MCw2ICs4OCw3IEBAIHByaXZhdGU6CiAKICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQqIG1fY2xpZW50OwogICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworICAgIFZlY3RvcjxDQ0FjdGl2ZUFuaW1hdGlv
bjo6QW5pbWF0aW9uU2lnbmF0dXJlPiBtX2ZpbmlzaGVkQW5pbWF0aW9uczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBjZTU0ZTdlNGI3
NDk0Mjg5ZjVhODFkNjM1ZGFkNjgzYmU5NjVjNzMwLi5kNGJhYmUyNzZlMzc3OTU4OTZjYmRhODE2
YzFmM2RhYjFlNTIyZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjEsNiArNjIsNyBAQCBDQ0xheWVySW1w
bDo6Q0NMYXllckltcGwoaW50IGlkKQogICAgICwgbV9kcmF3T3BhY2l0eSgwKQogICAgICwgbV9k
ZWJ1Z0JvcmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2RlYnVnQm9yZGVyV2lkdGgoMCkK
KyAgICAsIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKHRoaXMpKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA5ZTZjNTUwMDdlZTdlMzhkNzVmNjMx
MWM5YTBmOGRlZGE3NDc2ZWFjLi5kMGQ1MjQxYmU2ZjY4NmRjODVkMDZlYmQ4OWRmMzg2ZTY0ZDA5
NTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJT
dXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsMTIgKzQ2LDIxIEBAIGNs
YXNzIENDTGF5ZXJTb3J0ZXI7CiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOwogCi1jbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPEND
TGF5ZXJJbXBsPiB7CitjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5
ZXJJbXBsPiwgcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShpbnQgaWQp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKGlkKSk7CiAg
ICAgfQorCisgICAgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGltcGxl
bWVudGF0aW9uLgorICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklk
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgZmxv
YXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2aXJ0dWFs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3VuZHM7IH0KKwogICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7CiAKICAg
ICAvLyBUcmVlIHN0cnVjdHVyZS4KQEAgLTY2LDggKzc2LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKICAgICBDQ0xheWVySW1w
bCogcmVwbGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0KCk7IH0K
IAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQotCiAjaWZuZGVmIE5E
RUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9CiAjZW5k
aWYKQEAgLTExMSw5ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCk7
CiAgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCi0gICAgdm9p
ZCBzZXRPcGFjaXR5KGZsb2F0KTsKLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9vcGFjaXR5OyB9Ci0KICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsK
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KIApAQCAtMTI5LDkgKzEzNCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN1YmxheWVy
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJs
YXllclRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQogICAgIHZvaWQgc2V0TmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkBAIC0xNTQsNyArMTU2LDYgQEAgcHVibGlj
OgogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3Vy
ZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0g
c3VyZmFjZTsgfQogCi0gICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CiAKICAgICBj
b25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50Qm91
bmRzOyB9CkBAIC0yMDMsNiArMjA0LDggQEAgcHVibGljOgogICAgIGJvb2wgbGF5ZXJQcm9wZXJ0
eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlDaGFuZ2VkOyB9CiAgICAg
dm9pZCByZXNldEFsbENoYW5nZVRyYWNraW5nRm9yU3VidHJlZSgpOwogCisgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVy
biBtX2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
ZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIApAQCAtMzEyLDYgKzMxNSw5IEBAIHByaXZhdGU6
CiAgICAgLy8gUmVjdCBpbmRpY2F0aW5nIHdoYXQgd2FzIHJlcGFpbnRlZC91cGRhdGVkIGR1cmlu
ZyB1cGRhdGUuCiAgICAgLy8gTm90ZSB0aGF0IHBsdWdpbiBsYXllcnMgYnlwYXNzIHRoaXMgYW5k
IGxlYXZlIGl0IGVtcHR5LgogICAgIEZsb2F0UmVjdCBtX3VwZGF0ZVJlY3Q7CisKKyAgICAvLyBN
YW5hZ2VzIGFuaW1hdGlvbnMgZm9yIHRoaXMgbGF5ZXIuCisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXI7CiB9OwogCiB2
b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZmly
c3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NMYXllclNv
cnRlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZTQ2MmU1MzE4YmZj
N2YzNzk0ZGE4NjVjZWZmMzNiYWVjNWQyZTUwMS4uZWExN2U4YzlhOTYxMjlmNmU1MDlhMTk3YmY2
ODIzNTlmMDMzMWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xNzEs
OSArMTcxLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRPbkltcGxUaHJl
YWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKIAogICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3Rz
IGF0IGFsbC4uLgotICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICBpZiAocm9vdExheWVyKCkpIHsK
ICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJv
bml6ZVRyZWVzKHJvb3RMYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKLSAgICBlbHNl
CisgICAgICAgIC8vIFdlIG1heSBoYXZlIGFkZGVkIGFuIGFuaW1hdGlvbiBkdXJpbmcgdGhlIHRy
ZWUgc3luYy4gVGhpcyB3aWxsIGNhdXNlIGhvc3RJbXBsIHRvIHZpc2l0IGl0cyBjb250cm9sbGVy
cy4KKyAgICAgICAgaG9zdEltcGwtPnNldE5lZWRzQW5pbWF0ZUxheWVycygpOworICAgIH0gZWxz
ZQogICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOwogCiAgICAgaG9zdEltcGwtPnNl
dFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVyKCkpOwpAQCAtMjU5LDYgKzI2MSwxMiBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQogICAgICAgICBtX2NsaWVudC0+
c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldEFuaW1h
dGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7
CisgICAgQVNTRVJUKENDVGhyZWFkUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBGSVhN
RTogbmVlZCB0byB3YWxrIHRoZSB0cmVlLgorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyKQogewogICAgIGlm
IChtX3Jvb3RMYXllciA9PSByb290TGF5ZXIpCkBAIC0zMzQsOSArMzQyLDEyIEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaG9zdEltCiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHJvb3RMYXllcigpKQorCisgICAgaWYgKHJvb3RM
YXllcigpKSB7CiAgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7
Ci0gICAgZWxzZQorICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhZGRlZCBhbiBhbmltYXRpb24gZHVy
aW5nIHRoZSB0cmVlIHN5bmMuIFRoaXMgd2lsbCBjYXVzZSBob3N0SW1wbCB0byB2aXNpdCBpdHMg
Y29udHJvbGxlcnMuCisgICAgICAgIGhvc3RJbXBsLT5zZXROZWVkc0FuaW1hdGVMYXllcnMoKTsK
KyAgICB9IGVsc2UKICAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBmNWUxMTM0YzgxYjQzZTIxODg2YTVkOTM1MzBl
ZTg4ZjE5YTQwMzI1Li40ZWQ4ZGE5NjM0ODY5MjA3ZmRhZGU5Zjg5MWE5ZDM5MjM0M2Q1ODg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSYXRlTGltaXRlci5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCiAKQEAgLTc1LDYgKzc2LDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAg
ICAgLCByZWZyZXNoUmF0ZSgwKQogICAgICAgICAgICAgLCBwZXJUaWxlUGFpbnRpbmcoZmFsc2Up
CiAgICAgICAgICAgICAsIHBhcnRpYWxTd2FwRW5hYmxlZChmYWxzZSkKKyAgICAgICAgICAgICwg
dGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGZhbHNlKQogICAgICAgICAgICAgLCBtYXhQYXJ0aWFs
VGV4dHVyZVVwZGF0ZXMoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSkgeyB9CiAK
ICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKQEAgLTg0LDYgKzg2LDcgQEAgc3RydWN0IEND
U2V0dGluZ3MgewogICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKICAgICBib29sIHBlclRpbGVQYWlu
dGluZzsKICAgICBib29sIHBhcnRpYWxTd2FwRW5hYmxlZDsKKyAgICBib29sIHRocmVhZGVkQW5p
bWF0aW9uRW5hYmxlZDsKICAgICBzaXplX3QgbWF4UGFydGlhbFRleHR1cmVVcGRhdGVzOwogfTsK
IApAQCAtMTYzLDYgKzE2Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHND
b21taXQoKTsKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lkIHNldEFuaW1h
dGlvbkV2ZW50cyhQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPik7CisKICAgICBM
YXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQog
ICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dExheWVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNo
cm9taXVtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDc2
OGFjMmYyYTM1MzZlZDU5ODYxNWZhM2NmMGYyYjBiMzdkN2E5MTAuLjFlODBiMmExYTc0NTVlOWI1
NjQ1ZjVlZmQwYzNiMjZiOTkxZWIwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCkBAIC01OCw2ICs1OCw3IEBAIENDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJU
cmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MsIENDTGF5ZXJUcmVlCiAgICAg
LCBtX3NlbnRQYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV9taW5QYWdlU2NhbGUoMCkKICAgICAs
IG1fbWF4UGFnZVNjYWxlKDApCisgICAgLCBtX25lZWRzQW5pbWF0ZUxheWVycyhmYWxzZSkKICAg
ICAsIG1fcGluY2hHZXN0dXJlQWN0aXZlKGZhbHNlKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CkBAIC05OCwyMSArOTksOCBAQCBHcmFwaGljc0NvbnRleHQzRCogQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKLSAgICBpZiAoIW1fcGFnZVNjYWxl
QW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0g
dG9TaXplKG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXll
ckltcGwtPnNjcm9sbERlbHRhKCkpOwotCi0gICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2Nh
bGVBbmltYXRpb24tPnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNj
YWxlKTsKLSAgICBJbnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Ny
b2xsT2Zmc2V0QXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpOwotICAgIG5leHRTY3JvbGwuc2NhbGUo
MSAvIG1fcGFnZVNjYWxlRGVsdGEpOwotICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShu
ZXh0U2Nyb2xsIC0gc2Nyb2xsVG90YWwpOwotICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09u
SW1wbFRocmVhZCgpOwotCi0gICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlv
bkNvbXBsZXRlQXRUaW1lKGZyYW1lQmVnaW5UaW1lTXMpKSB7Ci0gICAgICAgIG1fcGFnZVNjYWxl
QW5pbWF0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpOwotICAgIH0KKyAgICBhbmltYXRlUGFnZVNjYWxlKGZyYW1lQmVnaW5UaW1lTXMp
OworICAgIGFuaW1hdGVMYXllcnMoZnJhbWVCZWdpblRpbWVNcyk7CiB9CiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFy
Z2V0UG9zaXRpb24sIGJvb2wgYW5jaG9yUG9pbnQsIGZsb2F0IHBhZ2VTY2FsZSwgZG91YmxlIHN0
YXJ0VGltZU1zLCBkb3VibGUgZHVyYXRpb25NcykKQEAgLTI1MCw2ICsyMzgsMzQgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0
JiBwYXNzZXMpCiAgICAgfQogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGVM
YXllcnNSZWN1cnNpdmUoQ0NMYXllckltcGwqIGN1cnJlbnQsIGRvdWJsZSBmcmFtZUJlZ2luVGlt
ZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiBldmVudHMsIGJvb2wmIGRpZEFuaW1hdGUs
IGJvb2wmIG5lZWRzQW5pbWF0ZUxheWVycykKK3sKKyAgICBib29sIHN1YnRyZWVOZWVkc0FuaW1h
dGVMYXllcnMgPSBmYWxzZTsKKworICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCog
Y3VycmVudENvbnRyb2xsZXIgPSBjdXJyZW50LT5sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKTsK
KworICAgIGJvb2wgaGFkQWN0aXZlQW5pbWF0aW9uID0gY3VycmVudENvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpOworICAgIGN1cnJlbnRDb250cm9sbGVyLT5hbmltYXRlKGZyYW1lQmVn
aW5UaW1lU2VjcywgZXZlbnRzKTsKKyAgICBib29sIHN0YXJ0ZWRBbmltYXRpb24gPSBldmVudHMu
c2l6ZSgpID4gMDsKKworICAgIC8vIFdlIGFuaW1hdGVkIGlmIHdlIGVpdGhlciB0aWNrZWQgYSBy
dW5uaW5nIGFuaW1hdGlvbiwgb3Igc3RhcnRlZCBhIG5ldyBhbmltYXRpb24uCisgICAgaWYgKGhh
ZEFjdGl2ZUFuaW1hdGlvbiB8fCBzdGFydGVkQW5pbWF0aW9uKQorICAgICAgICBkaWRBbmltYXRl
ID0gdHJ1ZTsKKworICAgIC8vIElmIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIgc3RpbGwgaGFzIGFu
IGFjdGl2ZSBhbmltYXRpb24sIHdlIG11c3QgY29udGludWUgYW5pbWF0aW5nIGxheWVycy4KKyAg
ICBpZiAoY3VycmVudENvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKQorICAgICAgICAg
c3VidHJlZU5lZWRzQW5pbWF0ZUxheWVycyA9IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGN1cnJlbnQtPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCBj
aGlsZE5lZWRzQW5pbWF0ZUxheWVycyA9IGZhbHNlOworICAgICAgICBhbmltYXRlTGF5ZXJzUmVj
dXJzaXZlKGN1cnJlbnQtPmNoaWxkcmVuKClbaV0uZ2V0KCksIGZyYW1lQmVnaW5UaW1lU2Vjcywg
ZXZlbnRzLCBkaWRBbmltYXRlLCBjaGlsZE5lZWRzQW5pbWF0ZUxheWVycyk7CisgICAgICAgIGlm
IChjaGlsZE5lZWRzQW5pbWF0ZUxheWVycykKKyAgICAgICAgICAgIHN1YnRyZWVOZWVkc0FuaW1h
dGVMYXllcnMgPSB0cnVlOworICAgIH0KKworICAgIG5lZWRzQW5pbWF0ZUxheWVycyA9IHN1YnRy
ZWVOZWVkc0FuaW1hdGVMYXllcnM7Cit9CisKIEludFNpemUgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y29udGVudFNpemUoKSBjb25zdAogewogICAgIC8vIFRPRE8oYWVsaWFzKTogSGFyZGNvZGluZyB0
aGUgZmlyc3QgY2hpbGQgaGVyZSBpcyB3ZWlyZC4gVGhpbmsgb2YKQEAgLTYyNSw0ICs2NDEsNDIg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRGdWxsUm9vdExheWVyRGFtYWdlKCkKICAg
ICB9CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZVBhZ2VTY2FsZShkb3Vi
bGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICBpZiAoIW1fcGFnZVNjYWxlQW5pbWF0aW9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRTaXplIHNjcm9sbFRvdGFsID0gdG9TaXplKG1fc2Ny
b2xsTGF5ZXJJbXBsLT5zY3JvbGxQb3NpdGlvbigpICsgbV9zY3JvbGxMYXllckltcGwtPnNjcm9s
bERlbHRhKCkpOworCisgICAgc2V0UGFnZVNjYWxlRGVsdGEobV9wYWdlU2NhbGVBbmltYXRpb24t
PnBhZ2VTY2FsZUF0VGltZShmcmFtZUJlZ2luVGltZU1zKSAvIG1fcGFnZVNjYWxlKTsKKyAgICBJ
bnRTaXplIG5leHRTY3JvbGwgPSBtX3BhZ2VTY2FsZUFuaW1hdGlvbi0+c2Nyb2xsT2Zmc2V0QXRU
aW1lKGZyYW1lQmVnaW5UaW1lTXMpOworICAgIG5leHRTY3JvbGwuc2NhbGUoMSAvIG1fcGFnZVNj
YWxlRGVsdGEpOworICAgIG1fc2Nyb2xsTGF5ZXJJbXBsLT5zY3JvbGxCeShuZXh0U2Nyb2xsIC0g
c2Nyb2xsVG90YWwpOworICAgIG1fY2xpZW50LT5zZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
OworCisgICAgaWYgKG1fcGFnZVNjYWxlQW5pbWF0aW9uLT5pc0FuaW1hdGlvbkNvbXBsZXRlQXRU
aW1lKGZyYW1lQmVnaW5UaW1lTXMpKSB7CisgICAgICAgIG1fcGFnZVNjYWxlQW5pbWF0aW9uLmNs
ZWFyKCk7CisgICAgICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwor
ICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5ZXJzKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZU1zKQoreworICAgIGlmICghbV9zZXR0aW5ncy50aHJlYWRlZEFuaW1h
dGlvbkVuYWJsZWQgfHwgIW1fbmVlZHNBbmltYXRlTGF5ZXJzIHx8ICFtX3Jvb3RMYXllckltcGwp
CisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
OjphbmltYXRlTGF5ZXJzIiwgdGhpcywgMCk7CisKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVu
dHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsK
KworICAgIGJvb2wgZGlkQW5pbWF0ZSA9IGZhbHNlOworICAgIGFuaW1hdGVMYXllcnNSZWN1cnNp
dmUobV9yb290TGF5ZXJJbXBsLmdldCgpLCBmcmFtZUJlZ2luVGltZU1zIC8gMTAwMCwgKmV2ZW50
cywgZGlkQW5pbWF0ZSwgbV9uZWVkc0FuaW1hdGVMYXllcnMpOworCisgICAgaWYgKCFldmVudHMt
PmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnBvc3RBbmltYXRpb25FdmVudHNUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoZXZlbnRzLnJlbGVhc2UoKSk7CisKKyAgICBpZiAoZGlkQW5pbWF0
ZSkKKyAgICAgICAgbV9jbGllbnQtPnNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiB9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aAppbmRleCAwYTNjYmFlOGQ4Zjc5ZGMzOTY4ODQ4NDhkM2E0OGM1NzNkOWU4NWNlLi42OWE4YTlh
MTE3ZjY1OGYyZTU3OTkyNDY0MmNlMWEyMDMyZTZkY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCkBAIC0yNSwxMSArMjUsMTMgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVI
b3N0SW1wbF9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogCisjaW5jbHVkZSAiY2Mv
Q0NBbmltYXRpb25FdmVudHMuaCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3Qu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9D
Q1JlbmRlclBhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNiArNTAsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZU9uSW1wbFRocmVhZCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFk
KFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+KSA9IDA7CiB9OwogCiAvLyBDQ0xh
eWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3Nv
Y2lhdGVkIHJlbmRlcmluZyBzdGF0ZQpAQCAtNjgsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHBpbmNoR2VzdHVyZUVuZCgpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydFBhZ2VT
Y2FsZUFuaW1hdGlvbihjb25zdCBJbnRTaXplJiB0YXJnZXRQb3NpdGlvbiwgYm9vbCBhbmNob3JQ
b2ludCwgZmxvYXQgcGFnZVNjYWxlLCBkb3VibGUgc3RhcnRUaW1lTXMsIGRvdWJsZSBkdXJhdGlv
bk1zKTsKIAotICAgIC8vIFZpcnR1YWwgZm9yIHRlc3RpbmcKKyAgICAvLyBWaXJ0dWFsIGZvciB0
ZXN0aW5nLgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRDb21wbGV0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFt
ZURpc3BsYXlUaW1lTXMpOwpAQCAtMTE5LDggKzEyMiwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRyYWdldFBvc2l0aW9uLCBi
b29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CiAKKyAgICBi
b29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRlTGF5
ZXJzOyB9CisgICAgdm9pZCBzZXROZWVkc0FuaW1hdGVMYXllcnMoKSB7IG1fbmVlZHNBbmltYXRl
TGF5ZXJzID0gdHJ1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbChj
b25zdCBDQ1NldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworCisgICAgdm9p
ZCBhbmltYXRlUGFnZVNjYWxlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKTsKKworICAgIC8vIFZp
cnR1YWwgZm9yIHRlc3RpbmcuCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lTXMpOworCiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9j
bGllbnQ7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1i
ZXI7CkBAIC0xMzksNiArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0JiwgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OwogICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAg
IHZvaWQgYW5pbWF0ZUxheWVyc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCosIGRvdWJsZSBmcmFtZUJl
Z2luVGltZVNlY3MsIENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yJiwgYm9vbCYgZGlkQW5pbWF0ZSwg
Ym9vbCYgbmVlZHNBbmltYXRlTGF5ZXJzKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29u
c3Q7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7
CkBAIC0xNTQsNiArMTY3LDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3NlbnRQYWdlU2NhbGVE
ZWx0YTsKICAgICBmbG9hdCBtX21pblBhZ2VTY2FsZSwgbV9tYXhQYWdlU2NhbGU7CiAKKyAgICAv
LyBJZiB0aGlzIGlzIHRydWUsIGl0IGlzIG5lY2Vzc2FyeSB0byB0cmF2ZXJzZSB0aGUgbGF5ZXIg
dHJlZSB0aWNraW5nIHRoZSBhbmltYXRvcnMuCisgICAgYm9vbCBtX25lZWRzQW5pbWF0ZUxheWVy
czsKICAgICBib29sIG1fcGluY2hHZXN0dXJlQWN0aXZlOwogICAgIEludFBvaW50IG1fcHJldmlv
dXNQaW5jaEFuY2hvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApp
bmRleCAxN2E2OTU5M2E2NDNjZmZlODM3MTc2MTQ5N2U0YmVjMGExYzcxZDkwLi5lYThjNDBmMTI1
NjVlYzQxM2JhYjU4NmJhMjBlNDljZWY5ZjlkYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcApAQCAtMjMzLDYgKzIzMywxMyBAQCB2b2lkIENDU2luZ2xlVGhyZWFk
UHJveHk6OnN0b3AoKQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CiB9CiAKK3ZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVh
ZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMpCit7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJl
YWQgbWFpbjsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhldmVudHMp
OworfQorCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hl
cmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQogdm9pZCBDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmgKaW5kZXggYWRkYTlmMTRlOWU1NGRiYTA1YWYzMGQ1Nzg2ODM4YzQ2M2QzNDQ0
MS4uNzFiNWU5OWIyZWQyYWZmNzgyNTAzYmYzOTMzNjY5ODNmYzU5NDcxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBDQ1Np
bmdsZVRocmVhZFByb3h5X2gKICNkZWZpbmUgQ0NTaW5nbGVUaHJlYWRQcm94eV9oCiAKKyNpbmNs
dWRlICJjYy9DQ0FuaW1hdGlvbkV2ZW50cy5oIgogI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2
ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKQEAgLTYzLDYgKzY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGVPbkltcGxUaHJlYWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgeyBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNDb21taXRPbkltcGxUaHJlYWQoKSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+KTsKIAogICAgIC8v
IENhbGxlZCBieSB0aGUgbGVnYWN5IHBhdGggd2hlcmUgUmVuZGVyV2lkZ2V0IGRvZXMgdGhlIHNj
aGVkdWxpbmcuCiAgICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOwpAQCAtMTExLDYgKzEx
MywyNCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRo
cmVhZGVkIGNhc2UuIEluIGRlYnVnIGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKKy8vIGNv
ZGUgaXMgcnVubmluZyBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gc2F0aXNmeSBhc3NlcnRpb24gY2hl
Y2tzLgorY2xhc3MgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBEZWJ1
Z1Njb3BlZFNldE1haW5UaHJlYWQoKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIENDUHJveHk6OnNldEN1cnJlbnRUaHJlYWRJc0ltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlm
CisgICAgfQorICAgIH5EZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQoKQorICAgIHsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgICAgIENDUHJveHk6OnNldEN1cnJlbnRUaHJlYWRJc0ltcGxUaHJl
YWQodHJ1ZSk7CisjZW5kaWYKKyAgICB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCAzZWE3MmUyYTFjNzJmYjM1
NjkxNDg5MjdlY2IxNTEwNDcyOTg5NDI2Li43NWVmMTM2MjNkZTg3NmY0NGEyY2E0N2VhZGQ4MTIw
YjExMGIyMzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMjU5LDYgKzI1OSwx
MyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKICAg
ICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0TmVlZHNDb21taXQoKTsKIH0KIAordm9pZCBD
Q1RocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFk
KFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2ZW50cykKK3sKKyAgICBBU1NF
UlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpwb3N0
QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkIiwgdGhpcywgMCk7CisgICAg
bV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6c2V0QW5pbWF0aW9uRXZlbnRzLCBldmVudHMpKTsKK30KKwogdm9pZCBDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKQEAgLTU2Miw2ICs1NjksMTQgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkaWRDb21wbGV0ZVN3
YXBCdWZmZXJzKCkKICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMo
KTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5OjpzZXRBbmltYXRpb25FdmVudHMoUGFzc093blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhldmVudHMpOworfQorCiB2b2lk
IENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2
ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojppbml0
aWFsaXplSW1wbE9uSW1wbFRocmVhZCIsIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
CmluZGV4IDIzYzI5ZjQ4ZmEzMmI3YWM0ODgxNTgwMmNhMDM1OGVlYTFkODgwMWEuLjMzMGVmNTFj
YTk4YTE2ZDIyMzFlMzM2NTU0MGFjMDNjMTczMzJhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgQ0NUaHJlYWRQcm94eV9oCiAjZGVmaW5lIEND
VGhyZWFkUHJveHlfaAogCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25FdmVudHMuaCIKICNpbmNs
dWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCkBAIC03MCw2ICs3MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25JbXBsVGhyZWFkKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pOwogCiAgICAgLy8gQ0NTY2hlZHVsZXJDbGllbnQgaW1w
bGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygpOwpAQCAtODYsNiArODgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1i
ZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0
Pik7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKTsKICAgICB2b2lkIGRpZENvbXBs
ZXRlU3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbkV2ZW50cyhQYXNzT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPik7CiAKICAgICAvLyBDYWxsZWQgb24gaW1wbCB0aHJl
YWQKICAgICBzdHJ1Y3QgUmVhZGJhY2tSZXF1ZXN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCmluZGV4IDZlOWE0ZDBkZmE5NWZiNzQ4NzFlNWZmMzlmYjI4YWRmZmRhYWQ5ZmIuLmQxYTk2
NzgxZTdiMDQ5MWE1YzE4ODQyZTdlMzg3OWE3NzczMzcyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQpAQCAtNjEsMTAgKzYxLDEzIEBACiAgICAgICAgICAgICAndGVzdHMvQXNzb2Np
YXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVy
Q2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25U
ZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcCcs
CisgICAgICAgICAgICAndGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9D
Q0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJh
bWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXll
ckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggOTc2ZTc2YmI0ZTZmZmIx
N2Y1NmY1MjViMDZmZGNiM2VlZjJlNjMxMC4uN2YxYmJiMGM0OTY5OGRiOTIzNjRhNTYyOGFmNTRh
NTEyZjU1ZTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oCkBAIC0xNDIsNiArMTQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nl
bGVyYXRlZFBhaW50aW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFBl
clRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJ0
aWFsU3dhcEVuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUaHJlYWRlZEFu
aW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlNldHRpbmdz
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJMYXllclRyZWVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgKaW5kZXggMWFkNDY4OWZlYTkwN2FjNGVlMWQyZThiZTgx
NWFmYTJjYjM2NzNhMy4uMTdhODc2YTk4NTFkZGZjMGNmOWE1NjFjOTg2YWRjMjNiYmQ2YWFiNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5
ZXJUcmVlVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYkxheWVyVHJlZVZpZXcuaApAQCAtNTAsNyArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJh
dGUoMCkKICAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZhbHNlKQotICAgICAgICAgICAg
LCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpIHsgfQorICAgICAgICAgICAgLCBwYXJ0aWFsU3dh
cEVuYWJsZWQoZmFsc2UpCisgICAgICAgICAgICAsIHRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChm
YWxzZSkgeyB9CiAKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgICAgIGJv
b2wgY29tcG9zaXRlT2Zmc2NyZWVuOwpAQCAtNTksNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGRvdWJsZSByZWZyZXNoUmF0ZTsKICAgICAgICAgYm9vbCBwZXJUaWxlUGFpbnRpbmc7CiAgICAg
ICAgIGJvb2wgcGFydGlhbFN3YXBFbmFibGVkOworICAgICAgICBib29sIHRocmVhZGVkQW5pbWF0
aW9uRW5hYmxlZDsKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICAgICAgb3BlcmF0b3Ig
V2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCmluZGV4IGNhMDM1MTQzM2U3OGIwMGQ4
Y2M2MDRlYTAwMmZlMTY3NjBlMWQ0MjguLmQyYzBmMGMxMjFhN2MwZDVlNWJmZTFlNTA1ZWQ3YmVh
YmJiMjdiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJl
ZVZpZXcuY3BwCkBAIC00NSw2ICs0NSw3IEBAIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzOjpv
cGVyYXRvciBDQ1NldHRpbmdzKCkgY29uc3QKICAgICBzZXR0aW5ncy5yZWZyZXNoUmF0ZSA9IHJl
ZnJlc2hSYXRlOwogICAgIHNldHRpbmdzLnBlclRpbGVQYWludGluZyA9IHBlclRpbGVQYWludGlu
ZzsKICAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFsU3dhcEVuYWJsZWQ7
CisgICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdGhyZWFkZWRBbmltYXRp
b25FbmFibGVkOwogCiAgICAgLy8gRklYTUU6IHNob3dGUFNDb3VudGVyIC8gc2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlIC8gbWF4UGFydGlhbFRleHR1cmVVcGRhdGVzIGFyZW4ndCBzdXBwb3J0ZWQgY3Vy
cmVudGx5LgogICAgIHJldHVybiBzZXR0aW5nczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IGE4YjY3Zjg5YjY1ZDllMDUyN2M0NzkwYTY1
MzA0NDhlNjkxZWM0OWMuLjQ4NWE1YjA1MWEwMjYyMDhiZjc2Yzg3NjkyYzM0MWZlYjQyNmY2NWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApA
QCAtNTQzLDQgKzU0Myw5IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRQYXJ0aWFsU3dhcEVu
YWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fc2V0dGluZ3MtPnNldFBhcnRpYWxTd2FwRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldFRocmVhZGVkQW5pbWF0
aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+c2V0VGhyZWFkZWRB
bmltYXRpb25FbmFibGVkKGVuYWJsZWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKaW5kZXggYmI2MTFj
N2I3ODU2OGM3NDQ5YmMwN2ZkZTU4YzI2M2E5ZTQzOWMxMS4uNTFkOTMyM2E0MDg4MjZlNTQxYTlk
MzNmMDA1MTlkYTljYTJlYTU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2V0dGluZ3NJbXBsLmgKQEAgLTEzNyw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldEFjY2VsZXJhdGVkUGFpbnRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFRocmVhZGVkQW5p
bWF0aW9uRW5hYmxlZChib29sKTsKIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyog
bV9zZXR0aW5nczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApp
bmRleCBlM2FmOGViOGQwZGExMDliZjliYjc5ZjZhNzNmMTQzYjc3MTNjMTgyLi4zNGRhMGRlYjRi
YWVmMzI1MWI5ZWVmOGE4Mjg3NWMwOTQxMGJiMDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0zMTY4LDYgKzMxNjgsNyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAKICAg
ICAgICAgY2NTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBl
clRpbGVEcmF3aW5nRW5hYmxlZCgpOwogICAgICAgICBjY1NldHRpbmdzLnBhcnRpYWxTd2FwRW5h
YmxlZCA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3YXBFbmFibGVkKCk7CisgICAgICAg
IGNjU2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gcGFnZSgpLT5zZXR0aW5ncygp
LT50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKIAogICAgICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKFdlYlZpZXdJbXBs
Q29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0Rl
YnVnQm9yZGVycygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcAppbmRleCAzZTkzZDk1ZGU4NjhhMmYzYTI1YWIwMzAy
MGVkMjVjMWQwZWM0OTBhLi5lMTRlZjliYzA5NzFhMTFlMjE0YjMxNGQ3NTgyOTE1ZWNjNTZkMzUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0
aW9uVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFu
aW1hdGlvblRlc3QuY3BwCkBAIC0yNSwyNCArMjUsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
IAogI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAKICNp
bmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0VGVzdHM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgRmFrZUZsb2F0
QW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxOyB9Ci0gICAgdmlydHVh
bCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgbm93KSBjb25zdCB7IHJldHVybiAwOyB9Ci19OworbmFt
ZXNwYWNlIHsKIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGludCBpdGVyYXRpb25zKQogewotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4g
dG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRv
cHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKSwgMCwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKICAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsK
ICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQpAQCAtMTY0LDQgKzE2MCw0IEBAIFRF
U1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQogICAgIEVYUEVDVF9UUlVFKGFu
aW0tPmlzRmluaXNoZWQoKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFt
ZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0
aW9uVGVzdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0
aW9uVGVzdENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUwNjE1NzM0MThhMDkwMWI1NTgxNjljZTAx
NmNjMzhkOTAzODFlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0
Q29tbW9uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dFRlc3RzIHsKKworRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OkZha2VGbG9hdEFuaW1hdGlvbkN1
cnZlKCkKK3sKK30KKworRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6On5GYWtlRmxvYXRBbmltYXRp
b25DdXJ2ZSgpCit7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4g
RmFrZUZsb2F0QW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKTsKK30KKworRmFrZVRyYW5zZm9ybVRy
YW5zaXRpb246OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikKKyAgICA6
IG1fZHVyYXRpb24oZHVyYXRpb24pCit7Cit9CisKK0Zha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKQoreworfQorCitXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OlRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmlt
YXRpb25DdXJ2ZT4gRmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmNsb25lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCp0aGlzKSk7Cit9
CisKKworRmFrZUZsb2F0VHJhbnNpdGlvbjo6RmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVy
YXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQorICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikK
KyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykKK3sKK30KKworRmFrZUZsb2F0VHJh
bnNpdGlvbjo6fkZha2VGbG9hdFRyYW5zaXRpb24oKQoreworfQorCitmbG9hdCBGYWtlRmxvYXRU
cmFuc2l0aW9uOjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKK3sKKyAgICB0aW1lIC89IG1f
ZHVyYXRpb247CisgICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAgdGltZSA9IDE7CisgICAgcmV0
dXJuICgxIC0gdGltZSkgKiBtX2Zyb20gKyB0aW1lICogbV90bzsKK30KKworRmFrZUxheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6OkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsQ2xpZW50KCkKKyAgICA6IG1fb3BhY2l0eSgwKQoreworfQorCitGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudDo6fkZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Q2xpZW50KCkKK3sKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBG
YWtlRmxvYXRUcmFuc2l0aW9uOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKCp0aGlzKSk7Cit9CisKK3ZvaWQgYWRkT3BhY2l0eVRy
YW5zaXRpb24oV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSYgbGF5ZXIsIGRvdWJsZSBkdXJhdGlvbiwg
ZmxvYXQgc3RhcnRPcGFjaXR5LCBmbG9hdCBlbmRPcGFjaXR5KQoreworICAgIFdlYkNvcmU6Oktl
eWZyYW1lVmFsdWVMaXN0IHZhbHVlcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CisgICAgaWYg
KGR1cmF0aW9uID4gMCkKKyAgICAgICAgdmFsdWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25W
YWx1ZSgwLCBzdGFydE9wYWNpdHkpKTsKKyAgICB2YWx1ZXMuaW5zZXJ0KG5ldyBGbG9hdEFuaW1h
dGlvblZhbHVlKGR1cmF0aW9uLCBlbmRPcGFjaXR5KSk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9u
PiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOworICAgIGFuaW1hdGlvbi0+c2V0RHVy
YXRpb24oMSk7CisKKyAgICBJbnRTaXplIGJveFNpemU7CisKKyAgICBsYXllci5hZGRBbmltYXRp
b24odmFsdWVzLCBib3hTaXplLCBhbmltYXRpb24uZ2V0KCksIDAsIDAsIDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXRUZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY5NjRlNDQyZWRjYzRl
ZDZmMDU3OTZmMDZjMThhNzhmZjBhZWY5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKyNkZWZp
bmUgQ0NBbmltYXRpb25UZXN0Q29tbW9uX2gKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3Vy
dmUuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKwor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgTGF5
ZXJDaHJvbWl1bTsKK30KKworbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsKKworY2xhc3MgRmFrZUZs
b2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZl
IHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRBbmltYXRpb25DdXJ2ZSgpOworICAgIHZpcnR1YWwg
fkZha2VGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRvdWJs
ZSBub3cpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29y
ZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKK307CisKK2NsYXNzIEZha2VUcmFu
c2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIFdlYkNvcmU6OkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgeworcHVibGljOgorICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlv
bik7CisgICAgdmlydHVhbCB+RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oKTsKKworICAgIHZpcnR1
YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZp
cnR1YWwgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKKworICAgIHZpcnR1YWwgUGFzc093blB0
cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGRvdWJsZSBtX2R1cmF0aW9uOworfTsKKworY2xhc3MgRmFrZUZsb2F0VHJhbnNpdGlvbiA6
IHB1YmxpYyBXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIEZh
a2VGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBmcm9tLCBmbG9hdCB0byk7
CisgICAgdmlydHVhbCB+RmFrZUZsb2F0VHJhbnNpdGlvbigpOworCisgICAgdmlydHVhbCBkb3Vi
bGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBm
bG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxvYXQgbV90
bzsKK307CisKK2NsYXNzIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IDog
cHVibGljIFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7Citw
dWJsaWM6CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKTsKKyAg
ICB2aXJ0dWFsIH5GYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpOworCisg
ICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBmbG9h
dCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CisgICAg
dmlydHVhbCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisKK3ByaXZhdGU6CisgICAg
ZmxvYXQgbV9vcGFjaXR5OworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJh
bnNmb3JtOworICAgIFdlYkNvcmU6OkludFNpemUgbV9ib3VuZHM7Cit9OworCit2b2lkIGFkZE9w
YWNpdHlUcmFuc2l0aW9uKFdlYkNvcmU6OkxheWVyQ2hyb21pdW0mLCBkb3VibGUgZHVyYXRpb24s
IGZsb2F0IHN0YXJ0T3BhY2l0eSwgZmxvYXQgZW5kT3BhY2l0eSk7CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdFRlc3RzCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvblRlc2N0Q29tbW9uX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCmluZGV4IDNkNTBkMDZlNjIzMTIxOGYxNDAy
MTJiMWRmZWQ2ZTc4OTViMGY1M2IuLmUxYWVjY2M1MzlhNWQ1MWRmZjE4YTJiZTdjNDJlZWJhMTQ1
N2VmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApAQCAtMjQsOTIg
KzI0LDM5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9u
VGVzdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImNjL0ND
QW5pbWF0aW9uQ3VydmUuaCIKLQorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAj
aW5jbHVkZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIEZha2VDb250cm9sbGVy
Q2xpZW50IDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwKSB7IH0KLSAg
ICB2aXJ0dWFsIH5GYWtlQ29udHJvbGxlckNsaWVudCgpIHsgfQotCi0gICAgdmlydHVhbCBmbG9h
dCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9Ci0gICAg
dmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zv
cm07IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0
ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXIpCi0gICAgewotICAg
ICAgICBtX2FjdGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9sbGVyKTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4mIGFjdGl2ZUNvbnRyb2xs
ZXJzKCkgeyByZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQotCi1wcml2YXRlOgotICAgIGZs
b2F0IG1fb3BhY2l0eTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKLSAg
ICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4gbV9hY3RpdmVDb250cm9s
bGVyczsKLX07Ci0KLWNsYXNzIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uIDogcHVibGljIENDVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUgewotcHVibGljOgotICAgIEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKGRvdWJsZSBkdXJhdGlvbikgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKSB7IH0KLSAgICB2aXJ0
dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2
aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbnMgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLX07Ci0KLWNsYXNzIEZha2VGbG9hdFRyYW5z
aXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIHsKLXB1YmxpYzoKLSAgICBGYWtl
RmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCi0g
ICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgLCBtX2Zyb20oZnJvbSkKLSAg
ICAgICAgLCBtX3RvKHRvKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBkdXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICB2aXJ0dWFsIGZsb2F0IGdl
dFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgdGltZSAvPSBtX2R1cmF0
aW9uOwotICAgICAgICBpZiAodGltZSA+PSAxKQotICAgICAgICAgICAgdGltZSA9IDE7Ci0gICAg
ICAgIHJldHVybiAoMSAtIHRpbWUpICogbV9mcm9tICsgdGltZSAqIG1fdG87Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGZsb2F0IG1fZnJvbTsKLSAgICBm
bG9hdCBtX3RvOwotfTsKK1Bhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBpbnQgaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4g
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgMCwgaWQsIHByb3BlcnR5KTsKK30KIAog
Ly8gVGVzdHMgdGhhdCB0cmFuc2l0aW9uaW5nIG9wYWNpdHkgZnJvbSAwIHRvIDEgd29ya3MgYXMg
ZXhwZWN0ZWQuCiBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZp
YWxUcmFuc2l0aW9uKQogewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93
blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
Q2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBPd25QdHI8Q0NB
Y3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CiAKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKLSAgICBjb250
cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7
CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwogfQpAQCAtMTE3LDIwICs2NCwyMSBAQCBURVNUKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxUcmFuc2l0aW9uKQogLy8gVGVzdHMgdGhh
dCB0d28gcXVldWVkIGFuaW1hdGlvbnMgYWZmZWN0aW5nIHRoZSBzYW1lIHByb3BlcnR5IHJ1biBp
biBzZXF1ZW5jZS4KIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJp
dmlhbFF1ZXVpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3du
UHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4g
Y29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVh
dGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC41
ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFk
ZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xs
ZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMSwgMC41ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpl
dmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVt
bXkub3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOwogfQpAQCAtMTM4LDIyICs4NiwyMyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQogLy8gVGVzdHMgaW50ZXJydXB0aW5n
IGEgdHJhbnNpdGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KIFRFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQogewotICAgIEZha2VDb250cm9sbGVy
Q2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRz
KGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVBY3RpdmVBbmltYXRp
b24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50
cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwog
ICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogCi0gICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOwogICAgIGNvbnRyb2xs
ZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUp
OyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41
LCAqZXZlbnRzKTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4KICAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15
Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjUpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMS41LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogfQpAQCAtMTYxLDIzICsxMTAsMjQgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LCBJbnRlcnJ1cHQpCiAvLyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRp
b25zIHRvIHJ1biB0b2dldGhlciB3aGVuIG9ubHkgb25lIHByb3BlcnR5IGlzIGZyZWUuCiBURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVu
QVByb3BlcnR5SXNCbG9ja2VkKQogewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBD
Q0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEpKSwgMSwg
Q0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRyb2xsZXItPmFkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bigxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKLSAgICBjb250cm9sbGVy
LT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJh
bnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAg
Y29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7
CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcg
RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNm
b3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAq
ZXZlbnRzKTsKICAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNp
dGlvbiB5ZXQuCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIC8vIFRoZSB0aGUg
ZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQg
YmUgZG9uZS4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAg
LTE4NywyOSArMTM3LDMwIEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgU2NoZWR1bGVUb2dldGhlcldoZW5BUHJvcGVydHlJc0Jsb2NrZWQpCiAvLyBmb3IgYm90aCB0
byBmaW5pc2gpLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRv
cHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRp
b24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Ci0gICAgY29udHJvbGxl
ci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwotICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0
UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigyKSksIDEsIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwg
Q0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEFuaW1zIHdpdGggaWQgMSBz
aG91bGQgYm90aCBzdGFydCBub3cuCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKICAgICAvLyBUaGUgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIGhhdmUgZmluaXNoZWQg
YXQgdGltZSAxLCBidXQgdGhlIGdyb3VwCiAgICAgLy8gb2YgYW5pbWF0aW9ucyB3aXRoIGlkIDEg
ZG9uJ3QgZmluaXNoIHVudGlsIHRpbWUgMiBiZWNhdXNlIG9mIHRoZSBsZW5ndGgKICAgICAvLyBv
ZiB0aGUgdHJhbnNmb3JtIGFuaW1hdGlvbi4KLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMiwgKmV2ZW50cyk7CiAgICAgLy8gU2hvdWxkIG5vdCBo
YXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
b3BhY2l0eSgpKTsKIAogICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5pbWF0aW9uIHNo
b3VsZCBzdGFydCBhdCB0aW1lIDIgYW5kIHNob3VsZCBiZQogICAgIC8vIGRvbmUgYnkgdGltZSAz
Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMs
ICpldmVudHMpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0yMTcs
MjIgKzE2OCwyMyBAQCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNj
aGVkdWxlVG9nZXRoZXJXaXRoQW5BbmltV2FpdGluZykKIC8vIFRlc3RzIHNjaGVkdWxpbmcgYW4g
YW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCiBURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQogewotICAgIEZha2VDb250cm9s
bGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZl
bnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlvbkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwogCi0gICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKGNyZWF0ZUFjdGl2
ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEs
IENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldFJ1blN0YXRlKEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKICAgICB0b0FkZC0+c2V0
U3RhcnRUaW1lKDEpOwogICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0g
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpl
dmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSwgKmV2ZW50cyk7CiAgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9F
USgwLCBkdW1teS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXku
b3BhY2l0eSgpKTsKICAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOwogfQpAQCAtMjQwLDI4ICsxOTIsMjkgQEAgVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKIC8vIFRlc3RzIHNjaGVkdWxpbmcg
YW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCdzIGludGVycnVwdGluZyBh
IHJ1bm5pbmcgYW5pbWF0aW9uLgogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKIHsKLSAg
ICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVu
dHNWZWN0b3I+IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsK
KyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKICAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAotICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKIAotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVBY3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOwogICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2Fp
dGluZ0ZvclN0YXJ0VGltZSwgMCk7CiAgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKICAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKIAogICAgIC8vIEZpcnN0IDJzIG9wYWNp
dHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MiwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKIH0KQEAgLTI3MCwz
NCArMjIzLDM1IEBAIFRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2No
ZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltCiAvLyBhbmQgdGhlcmUgaXMgeWV0
IGFub3RoZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KIFRFU1QoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1
bm5pbmdBbmltYXRpb25XaXRoQW5pbUluUXVldWUpCiB7Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiBldmVudHMoYWRv
cHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7CisgICAgRmFrZUxheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3duUHRyPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigy
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxl
ci0+YWRkKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDIsIDAuNWYsIDApKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0Fk
ZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAp
OwogICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CiAgICAgY29udHJvbGxlci0+YWRkKHRvQWRk
LnJlbGVhc2UoKSk7CiAKLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAwLjc1ZikpLCAzLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43
NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAogICAgIC8vIEZpcnN0IDJz
IG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCi0gICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwog
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBF
WFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAu
NSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUsICpldmVudHMpOwogICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC4y
NWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHko
KSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDMsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKLSAgICBjb250cm9s
bGVyLT5hbmltYXRlKDQpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCwgKmV2ZW50cyk7CiAg
ICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwogICAgIEVYUEVDVF9GQUxTRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiB9CkBAIC0zMDUsNjQgKzI1OSw2NiBA
QCBURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1h
dGlvbkludGVycnVwdHNSdW5uaW5nQW5pbQogLy8gVGVzdCB0aGF0IGEgbG9vcGluZyBhbmltYXRp
b24gbG9vcHMgYW5kIGZvciB0aGUgY29ycmVjdCBudW1iZXIgb2YgaXRlcmF0aW9ucy4KIFRFU1Qo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbExvb3BpbmcpCiB7Ci0g
ICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7
CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAg
T3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKLSAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9B
ZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICB0b0FkZC0+
c2V0SXRlcmF0aW9ucygzKTsKICAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsK
IAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CiAgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUsICpldmVudHMp
OwogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAg
ICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxLjc1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUsICpldmVudHMpOwogICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBF
Q1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
LjI1KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUsICpldmVudHMpOwogICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEo
MC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjc1KTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC43NWYs
IGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDMsICpldmVudHMpOwogICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHko
KSk7CiAKICAgICAvLyBKdXN0IGJlIGV4dHJhIHN1cmUuCi0gICAgY29udHJvbGxlci0+YW5pbWF0
ZSg0KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQsICpldmVudHMpOwogICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOwogfQogCiAvLyBUZXN0IHRoYXQgYW4gaW5maW5pdGVseSBs
b29waW5nIGFuaW1hdGlvbiBkb2VzIGluZGVlZCBnbyB1bnRpbCBhYm9ydGVkLgogVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbmZpbml0ZUxvb3BpbmcpCiB7Ci0gICAg
RmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiBldmVudHMoYWRvcHRQdHIobmV3IENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yKSk7Cisg
ICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7CiAgICAgT3du
UHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CiAKICAgICBj
b25zdCBpbnQgaWQgPSAxOwotICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CiAgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwogICAgIGNvbnRyb2xsZXIt
PmFkZCh0b0FkZC5yZWxlYXNlKCkpOwogCi0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDAsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMS4yNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMS43NSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKIAot
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgxMDczNzQxODI0LjI1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5v
cGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAu
NzVmLCBkdW1teS5vcGFjaXR5KCkpOwogCkBAIC0zNzUsODAgKzMzMSw2NiBAQCBURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKIC8vIFRlc3Qg
dGhhdCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVjdGVkLgogVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3VtZSkKIHsKLSAgICBGYWtlQ29u
dHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
IGV2ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKICAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAogICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKIAogICAgIGNvbnN0IGlu
dCBpZCA9IDE7Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5p
bWF0aW9uKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAKLSAgICBjb250cm9sbGVyLT5hbmltYXRlKDAp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDAuNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwogICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5
KCkpOwogCiAgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwogICAgIGNvbnRyb2xsZXItPmdldEFjdGl2
ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwLjVmKTsKIAotICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMTAyNCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CiAKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CiAg
ICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsK
IAotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC4yNSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxMDI0LjI1LCAqZXZlbnRzKTsKICAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OwotICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41KTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEwMjQuNSwgKmV2ZW50cyk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKIH0K
IAogVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBBYm9ydEFHcm91cGVk
QW5pbWF0aW9uKQogewotICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0
cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4gZXZlbnRzKGFkb3B0UHRyKG5ldyBDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3RvcikpOworICAgIEZha2VMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50IGR1bW15OwogICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCiAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOwogCiAgICAgY29uc3QgaW50IGlkID0gMTsKLSAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24oMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOwotICAgIGNvbnRy
b2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxv
YXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
Ci0gICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKGNyZWF0ZUFjdGl2ZUFu
aW1hdGlvbihhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChjcmVhdGVB
Y3RpdmVBbmltYXRpb24oYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMSwgMC43
NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKIAotICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMCk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKICAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKICAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXku
b3BhY2l0eSgpKTsKIAogICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1h
dGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKICAgICBjb250cm9sbGVyLT5n
ZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIDEpOwotICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLCAqZXZlbnRzKTsKICAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VR
KDEsIGR1bW15Lm9wYWNpdHkoKSk7Ci0gICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDIsICpldmVudHMpOwogICAgIEVYUEVDVF9UUlVFKCFjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CiAgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5v
cGFjaXR5KCkpOwogfQogCi0vLyBUZXN0cyB0aGF0IGFkZGluZyBhbiBhbmltYXRpb24gdG8gdGhl
IGNvbnRyb2xsZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIG9uIHRoZSBjb250cm9s
bGVyIGNsaWVudAotLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRoZSBjb250cm9sbGVyIHRvIHRo
ZSBsaXN0IG9mIGFjdGl2ZSBjb250cm9sbGVyKS4KLVRFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgRGlkQWN0aXZhdGUpCi17Ci0gICAgRmFrZUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7Ci0gICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKLSAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1teS5hY3RpdmVDb250cm9sbGVy
cygpLnNpemUoKSk7Ci0KLSAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7Ci0KLSAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBkdW1t
eS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKGNvbnRyb2xsZXIu
Z2V0KCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOwotfQotCiB9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlY2MxZmZhODJlOGU1
YjYyOWQ2ZWMxYmYwNjhiZGNhYWQ1Nzg2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKQEAg
LTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKKworbmFtZXNwYWNlIHsK
KworUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKFBh
c3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBpZCwgQ0NBY3RpdmVBbmltYXRp
b246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQoreworICAgIHJldHVybiBDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGN1cnZlLCAwLCBpZCwgcHJvcGVydHkpOworfQorCitURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY05ld0FuaW1hdGlvbikKK3sKKyAgICBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbCgKKyAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKworICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSks
IDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5z
eW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworfQorCitURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0FuaW1hdGlvblByb3BlcnRpZXMp
Cit7CisgICAgRmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgZHVtbXk7Cisg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlckltcGwo
CisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkp
OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcj4gY29udHJvbGxlcigKKyAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKKworICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hY3RpdmVBbmltYXRpb25zKCku
YXBwZW5kKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdEFu
aW1hdGlvbkN1cnZlKCkpLCAwLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisg
ICAgY29udHJvbGxlci0+c3luY2hyb25pemVBbmltYXRpb25zKGNvbnRyb2xsZXJJbXBsLmdldCgp
KTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24o
MCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBFWFBFQ1RfRVEoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIGNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpLT5ydW5TdGF0
ZSgpKTsKKworICAgIC8vIFB1c2ggYW4gYW5pbWF0aW9uIHByb3BlcnR5IGNoYW5nZSB0byB0aGUg
aW1wbCB0aHJlYWQgKHNob3VsZCBub3QgY2F1c2UgYW4gYW5pbWF0aW9uIHRvIGJlIGFkZGVkKS4K
KyAgICBjb250cm9sbGVyLT5wYXVzZUFuaW1hdGlvbigwLCAwKTsKKyAgICBjb250cm9sbGVyLT5z
eW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2Vk
LCBjb250cm9sbGVySW1wbC0+Z2V0QWN0aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KS0+cnVuU3RhdGUoKSk7Cit9CisKK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LCBzeW5jQWJvcnRlZEFuaW1hdGlvbikKK3sKKyAgICBGYWtlTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1wbCgKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y3JlYXRlKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5n
ZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAg
IGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlvbnMoKS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6
ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdl
dEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0YXRlKCkpOworCisgICAgY29udHJvbGxlci0+
cmVtb3ZlQW5pbWF0aW9uKDApOworCisgICAgLy8gQWJvcnQgYW4gYW5pbWF0aW9uIGZyb20gdGhl
IG1haW4gdGhyZWFkLgorICAgIGNvbnRyb2xsZXItPnN5bmNocm9uaXplQW5pbWF0aW9ucyhjb250
cm9sbGVySW1wbC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlckltcGwtPmdl
dEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworfQorCitU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyVGVzdCwgc3luY0NvbXBsZXRlZEFuaW1hdGlv
bikKK3sKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVySW1w
bCgKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjb250cm9sbGVyKAor
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOworCisgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXJJbXBsLT5nZXRBY3RpdmVBbmltYXRpb24oMCwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFjdGl2ZUFuaW1hdGlvbnMo
KS5hcHBlbmQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
QW5pbWF0aW9uQ3VydmUoKSksIDAsIDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisK
KyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0
KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlckltcGwtPmdldEFjdGl2ZUFuaW1hdGlv
bigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIEVYUEVDVF9FUShDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgY29udHJvbGxlckltcGwt
PmdldEFjdGl2ZUFuaW1hdGlvbigwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnJ1blN0
YXRlKCkpOworCisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBhbmltYXRpb24gdW50aWwgaXQgaXMg
ZmluaXNoZWQuIEF0IHRoZSBuZXh0IHN5bmMsIHRoZSBtYWluIHRocmVhZCdzIGFuaW1hdGlvbiBz
aG91bGQgYmUgY2xlYXJlZC4KKyAgICBPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+IGV2
ZW50cyhhZG9wdFB0cihuZXcgQ0NBbmltYXRpb25FdmVudHNWZWN0b3IpKTsKKyAgICBjb250cm9s
bGVySW1wbC0+YW5pbWF0ZSgwLCAqZXZlbnRzKTsKKyAgICBjb250cm9sbGVySW1wbC0+YW5pbWF0
ZSgyLCAqZXZlbnRzKTsKKworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVySW1wbC0+Z2V0QWN0
aXZlQW5pbWF0aW9uKDAsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgRVhQRUNU
X0VRKHNpemVfdCgxKSwgY29udHJvbGxlci0+YWN0aXZlQW5pbWF0aW9ucygpLnNpemUoKSk7CisK
KyAgICBjb250cm9sbGVyLT5zeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwuZ2V0
KCkpOworCisgICAgRVhQRUNUX0VRKHNpemVfdCgwKSwgY29udHJvbGxlci0+YWN0aXZlQW5pbWF0
aW9ucygpLnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4
IGY1NmJmMDJlMjhjMmU4NDJlNDVmZjZjZjMxYWM4MzFjODk3ZTQ1M2MuLjVmODAxNDhlMDhmYmUz
ZWZjNWJkMDg3YTkxMTU1NWViYmE1ZDVlZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC01Miw2ICs1
Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlT25J
bXBsVGhyZWFkKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhy
ZWFkKCkgeyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgeyBtX2RpZFJlcXVlc3RDb21taXQgPSB0cnVlOyB9
CisgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxU
aHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4pIHsgfQogCiAgICAgc3Rh
dGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCog
bGF5ZXIpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMTYzNzFhMWFlYWVlMGVlN2NiNWEyOTU2MWFkOGNl
ZmYxMjAzMjA0OS4uODI2MDk4OWE1NGJmMDViMDQwMzMwYWMzZDQ5NDM4MjQ3NzNmOWZlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRl
c3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3Qu
aCIKIAorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNvbXBv
c2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJDb250ZW50TGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKQEAgLTM1LDYgKzM2LDgg
QEAKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvbXBvc2l0b3Iu
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAj
aW5jbHVkZSAiY2MvQ0NTY29wZWRUaHJlYWRQcm94eS5oIgpAQCAtNTAsNiArNTMsNyBAQAogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0VGVzdHM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2Ug
ewpAQCAtNjAsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZs
b2F0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVC
ZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KQEAgLTkxLDYgKzk2
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV90ZXN0SG9va3MtPmRyYXdMYXllcnNPbkNDVGhyZWFk
KHRoaXMpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5
ZXJzKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbDo6YW5pbWF0ZUxheWVycyhmcmFtZUJlZ2luVGltZU1zKTsKKyAgICAgICAgbV90ZXN0
SG9va3MtPmFuaW1hdGVMYXllcnModGhpcyk7CisgICAgfQorCiBwcml2YXRlOgogICAgIE1vY2tM
YXllclRyZWVIb3N0SW1wbChUZXN0SG9va3MqIHRlc3RIb29rcywgY29uc3QgQ0NTZXR0aW5ncyYg
c2V0dGluZ3MsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKICAgICAgICAgOiBD
Q0xheWVyVHJlZUhvc3RJbXBsKHNldHRpbmdzLCBjbGllbnQpCkBAIC0xMDYsNyArMTE4LDExIEBA
IGNsYXNzIE1vY2tMYXllclRyZWVIb3N0IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShUZXN0
SG9va3MqIHRlc3RIb29rcywgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykK
ICAgICB7Ci0gICAgICAgIFJlZlB0cjxNb2NrTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9
IGFkb3B0UmVmKG5ldyBNb2NrTGF5ZXJUcmVlSG9zdCh0ZXN0SG9va3MsIGNsaWVudCwgc2V0dGlu
Z3MpKTsKKyAgICAgICAgLy8gRm9yIHRoZXNlIHRlc3RzLCB3ZSB3aWxsIGVuYWJsZSB0aHJlYWRl
ZCBhbmltYXRpb25zLgorICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzQ29weSA9IHNldHRpbmdz
OworICAgICAgICBzZXR0aW5nc0NvcHkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdHJ1ZTsK
KworICAgICAgICBSZWZQdHI8TW9ja0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QgPSBhZG9w
dFJlZihuZXcgTW9ja0xheWVyVHJlZUhvc3QodGVzdEhvb2tzLCBjbGllbnQsIHNldHRpbmdzQ29w
eSkpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBsYXllclRyZWVIb3N0LT5pbml0aWFsaXplKCk7
CiAgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOwogICAgICAgICBsYXllclRyZWVIb3N0LT5z
ZXRSb290TGF5ZXIocm9vdExheWVyKTsKQEAgLTExOSw3ICsxMzUsMTAgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJl
ZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShtX3Rlc3RIb29rcywgc2V0
dGluZ3MoKSwgY2xpZW50KTsKKyAgICAgICAgLy8gRm9yIHRoZXNlIHRlc3RzLCB3ZSB3aWxsIGVu
YWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgorICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzOwor
ICAgICAgICBzZXR0aW5ncy50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQgPSB0cnVlOworICAgICAg
ICByZXR1cm4gTW9ja0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUobV90ZXN0SG9va3MsIHNldHRp
bmdzLCBjbGllbnQpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEzMiw2ICsxNTEsMjUgQEAgcHJp
dmF0ZToKICAgICBUZXN0SG9va3MqIG1fdGVzdEhvb2tzOwogfTsKIAorLy8gQWRhcHRzIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIGZvciB0ZXN0LiBBZGRzIGEgZHVtbXkgaW1wbGVtZW50YXRp
b24gb2YgYWRkQW5pbWF0aW9uIHRoYXQgaW5zZXJ0cyBhIGZsb2F0IGFuaW1hdGlvbi4KKy8vIEZJ
WE1FOiBvbmNlIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOjphZGRBbmltYXRpb24gaXMgaW1w
bGVtZW50ZWQsIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBkaXJlY3RseSBhbmQgdGhp
cworLy8gY2xhc3MgY2FuIGJlIHJlbW92ZWQuCitjbGFzcyBNb2NrTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyIDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJBbmltYXRpb25Db250cm9sbGVyPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNv
bnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIGRvdWJsZSB0aW1l
T2Zmc2V0KQorICAgIHsKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gMDsKKyAgICAgICAgYWN0
aXZlQW5pbWF0aW9ucygpLmFwcGVuZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKGR1cmF0aW9uLCAxLCAwKSksIGFuaW1hdGlvbklkLCBn
cm91cElkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9OworCiBjbGFzcyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
V2l0aFRleHR1cmVUcmFja2luZyA6IHB1YmxpYyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZz4gY3JlYXRlKEF0dHJpYnV0ZXMg
YXR0cnMpCkBAIC0yMjYsNyArMjY0LDkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2No
ZWR1bGVDb21wb3NpdGUoKQorICAgIHsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
TW9ja0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0ZXN0SG9va3MpIDogbV90ZXN0SG9v
a3ModGVzdEhvb2tzKSB7IH0KQEAgLTI1Niw2ICsyOTYsMTEgQEAgcHVibGljOgogICAgICAgICBj
YWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmlt
YXRlLCB0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJl
YWQoKQorICAgIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChDQ0xheWVyVHJlZUhvc3RUZXN0
OjpkaXNwYXRjaEFkZEFuaW1hdGlvbiwgdGhpcyk7CisgICAgfQorCiAgICAgdm9pZCBwb3N0U2V0
TmVlZHNDb21taXRUb01haW5UaHJlYWQoKQogICAgIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29tbWl0LCB0aGlzKTsKQEAg
LTI3MSw3ICszMTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXll
clRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRDb21taXQsIHRoaXMpOwog
ICAgIH0KIAotCiAgICAgdm9pZCBwb3N0U2V0VmlzaWJsZVRvTWFpblRocmVhZChib29sIHZpc2li
bGUpCiAgICAgewogICAgICAgICBjYWxsT25NYWluVGhyZWFkKHZpc2libGUgPyBDQ0xheWVyVHJl
ZUhvc3RUZXN0OjpkaXNwYXRjaFNldFZpc2libGUgOiBDQ0xheWVyVHJlZUhvc3RUZXN0OjpkaXNw
YXRjaFNldEludmlzaWJsZSwgdGhpcyk7CkBAIC0zMTQsNiArMzU4LDE1IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQW5pbWF0ZSgpOwogICAg
IH0KIAorICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpCisg
ICAgeworICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgIENDTGF5ZXJUcmVlSG9z
dFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7Cisg
ICAgICBBU1NFUlQodGVzdCk7CisgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVIb3N0ICYmIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisgICAgICAgICAgdGVzdC0+bV9sYXll
clRyZWVIb3N0LT5yb290TGF5ZXIoKS0+YWRkQW5pbWF0aW9uKEtleWZyYW1lVmFsdWVMaXN0KEFu
aW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgSW50U2l6ZSgpLCAwLCAwLCAwLCAwLjApOworICAgIH0K
KwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0KHZvaWQq
IHNlbGYpCiAgICAgewogICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTQ2NCw2ICs1
MTcsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRvQmVnaW5UZXN0KCkKICAgICBtX2xh
eWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1fY2xpZW50Lmdl
dCgpLCByb290TGF5ZXIsIG1fc2V0dGluZ3MpOwogICAgIEFTU0VSVF9UUlVFKG1fbGF5ZXJUcmVl
SG9zdCk7CiAgICAgcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJUcmVlSG9zdC5n
ZXQoKSk7CisgICAgcm9vdExheWVyLT5zZXRMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoTW9ja0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwogCiAgICAgbV9iZWdpbm5pbmcgPSB0
cnVlOwogICAgIGJlZ2luVGVzdCgpOwpAQCAtNzkwLDYgKzg0NCw0NyBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0VGVzdFNldE5lZWRzQW5pbWF0ZUluc2lkZUFuaW1hdGlvbkNhbGxiYWNrLCBydW5N
dWx0aVRocmVhZAogICAgIHJ1blRlc3RUaHJlYWRlZCgpOwogfQogCisvLyBBZGQgYSBsYXllciBh
bmltYXRpb24gYW5kIGNvbmZpcm0gdGhhdCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlTGF5
ZXJzIGRvZXMgZ2V0CisvLyBjYWxsZWQgYW5kIGNvbnRpbnVlcyB0byBnZXQgY2FsbGVkLgorY2xh
c3MgQ0NMYXllclRyZWVIb3N0VGVzdEFkZEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3RUZXN0VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdEFkZEFu
aW1hdGlvbigpCisgICAgICAgIDogbV9udW1BbmltYXRlcygwKQorICAgICAgICAsIG1fbGF5ZXJU
cmVlSG9zdEltcGwoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICBwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwpCisgICAgeworICAgICAgICBpZiAoIW1fbnVtQW5pbWF0ZXMpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBhbmltYXRpb24gaGFkIHplcm8gZHVyYXRpb24gc28gbGF5ZXJU
cmVlSG9zdEltcGwgc2hvdWxkIG5vCisgICAgICAgICAgICAvLyBsb25nZXIgbmVlZCB0byBhbmlt
YXRlIGl0cyBsYXllcnMuCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJUcmVlSG9zdElt
cGwtPm5lZWRzQW5pbWF0ZUxheWVycygpKTsKKyAgICAgICAgICAgIG1fbnVtQW5pbWF0ZXMrKzsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbmRUZXN0KCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KKworcHJpdmF0
ZToKKyAgICBpbnQgbV9udW1BbmltYXRlczsKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBtX2xh
eWVyVHJlZUhvc3RJbXBsOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RBZGRBbmlt
YXRpb24sIHJ1bk11bHRpVGhyZWFkKQoreworICAgIHJ1blRlc3RUaHJlYWRlZCgpOworfQorCiBj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlIDogcHVibGljIENDTGF5ZXJUcmVl
SG9zdFRlc3RUaHJlYWRPbmx5IHsKIHB1YmxpYzoKICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Ny
b2xsU2ltcGxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJl
ZVN5bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVl
U3luY2hyb25pemVyVGVzdC5jcHAKaW5kZXggMTU1N2E3ZDkzMjJjYzZiZTIwNmJmNTBiMDBjMGY0
NzA2M2M1NDc4Yi4uNDcyNGI0YTQzNTY3YjQzOTc4ZGRhN2MwZDYxYTg0MmQ4ZDQ4Mjk4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAKQEAgLTI2LDEzICsyNiwxNiBAQAogCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAj
aW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRl
c3RzOwogCiBuYW1lc3BhY2UgewogCkBAIC05MSw2ICs5NCwzMCBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxpbnQ+KiBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CiB9OwogCitjbGFzcyBGYWtlTGF5
ZXJBbmltYXRpb25Db250cm9sbGVyIDogcHVibGljIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxGYWtlTGF5ZXJBbmltYXRpb25Db250
cm9sbGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGYWtl
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyKTsKKyAgICB9CisKKyAgICBib29sIHN5bmNocm9uaXpl
ZEFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnM7IH0K
KworcHJpdmF0ZToKKyAgICBGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKCkKKyAgICAgICAg
OiBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnMoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGlvbnMoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKiBjb250cm9sbGVySW1wbCkKKyAgICB7CisgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVyOjpzeW5jaHJvbml6ZUFuaW1hdGlvbnMoY29udHJvbGxlckltcGwpOworICAgICAg
ICBtX3N5bmNocm9uaXplZEFuaW1hdGlvbnMgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgbV9z
eW5jaHJvbml6ZWRBbmltYXRpb25zOworfTsKKwogdm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNh
bChMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCiB7CiAgICAgQVNT
RVJUX1RSVUUobGF5ZXIpOwpAQCAtMzA3LDUgKzMzNCwxOSBAQCBURVNUKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jTWFza1JlcGxpY2FBbmRSZXBsaWNhTWFza0xheWVycykKICAgICBleHBlY3RU
cmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0
KCkpOwogfQogCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jaHJvbml6ZUFuaW1hdGlv
bnMpCit7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKKwor
ICAgIGxheWVyVHJlZVJvb3QtPnNldExheWVyQW5pbWF0aW9uQ29udHJvbGxlcihGYWtlTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyOjpjcmVhdGUoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0Uoc3RhdGlj
X2Nhc3Q8RmFrZUxheWVyQW5pbWF0aW9uQ29udHJvbGxlcio+KGxheWVyVHJlZVJvb3QtPmxheWVy
QW5pbWF0aW9uQ29udHJvbGxlcigpKS0+c3luY2hyb25pemVkQW5pbWF0aW9ucygpKTsKKworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBjY0xheWVyVHJl
ZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3Qu
Z2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShzdGF0aWNf
Y2FzdDxGYWtlTGF5ZXJBbmltYXRpb25Db250cm9sbGVyKj4obGF5ZXJUcmVlUm9vdC0+bGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKCkpLT5zeW5jaHJvbml6ZWRBbmltYXRpb25zKCkpOworfQogCiB9
IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>